<?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>76382</bug_id>
          
          <creation_ts>2012-01-16 07:16:01 -0800</creation_ts>
          <short_desc>Web Inspector: CodeGeneratorInspector.py: start using typedefs</short_desc>
          <delta_ts>2012-01-17 07:46:08 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>72861</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Peter Rybin">prybin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>prybin</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>536535</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-16 07:16:01 -0800</bug_when>
    <thetext>Currently we generated typedefs for named string types, but not use them. Start using them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536538</commentid>
    <comment_count>1</comment_count>
      <attachid>122632</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-16 07:22:03 -0800</bug_when>
    <thetext>Created attachment 122632
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536544</commentid>
    <comment_count>2</comment_count>
      <attachid>122633</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-16 07:32:13 -0800</bug_when>
    <thetext>Created attachment 122633
InspectorFrontend.h base version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536545</commentid>
    <comment_count>3</comment_count>
      <attachid>122634</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-16 07:33:02 -0800</bug_when>
    <thetext>Created attachment 122634
New InspectorFrontend.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536546</commentid>
    <comment_count>4</comment_count>
      <attachid>122635</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-16 07:33:55 -0800</bug_when>
    <thetext>Created attachment 122635
Generator output diff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536552</commentid>
    <comment_count>5</comment_count>
      <attachid>122632</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-01-16 07:47:07 -0800</bug_when>
    <thetext>Comment on attachment 122632
Patch

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

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:661
&gt;                              return

return None?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536698</commentid>
    <comment_count>6</comment_count>
      <attachid>122670</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-16 12:03:18 -0800</bug_when>
    <thetext>Created attachment 122670
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537098</commentid>
    <comment_count>7</comment_count>
      <attachid>122670</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-17 07:46:02 -0800</bug_when>
    <thetext>Comment on attachment 122670
Patch

Clearing flags on attachment: 122670

Committed r105160: &lt;http://trac.webkit.org/changeset/105160&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537099</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-17 07:46:08 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122632</attachid>
            <date>2012-01-16 07:22:03 -0800</date>
            <delta_ts>2012-01-16 12:03:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76382-20120116192201.patch</filename>
            <type>text/plain</type>
            <size>10983</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MDYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTc4OTc1ZmYyMDU2ZmM4
ZjBhMjY2ODRlMjg4ZjhmY2M1MzdkMjU5YS4uMDA1MjQ0N2U1ZGY2MTg1YTkzZmRjNzc1NzBiZWM2
ZjcwNWEyMjkyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTAxLTE2ICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBzdGFydCB1c2luZyB0eXBlZGVmcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYzODIKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBHZW5lcmF0b3IgaXMgcGF0
Y2hlZCBhY2NvcmRpbmdseS4KKworICAgICAgICAqIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5z
cGVjdG9yLnB5OgorICAgICAgICAoRW51bUNvbnN0YW50cy5nZXRfZW51bV9jb25zdGFudF9jb2Rl
KToKKyAgICAgICAgKFR5cGVCdWlsZGVyUGFzcyk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3Jl
YXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2Rl
R2VuZXJhdG9yKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlv
bl8uRW51bUJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yLkNvZGVHZW5lcmF0b3IuZ2V0X2dlbmVy
YXRlX3Bhc3NfaWQpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0
aW9uXyk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLlBs
YWluU3RyaW5nKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlv
bl8uUGxhaW5TdHJpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yKToKKyAgICAgICAgKFR5cGVCaW5kaW5n
cy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcucmVkdWNlX3RvX3Jhd190eXBl
KToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5T
dHJpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4pOgorICAgICAgICAoVHlw
ZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5QbGFpblN0cmluZy5nZXRfaW5fY190
eXBlX3RleHQpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9u
Xy5UeXBlZGVmU3RyaW5nKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNs
YXJhdGlvbl8uVHlwZWRlZlN0cmluZy5nZXRfY29kZV9nZW5lcmF0b3IpOgorICAgICAgICAoVHlw
ZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5UeXBlZGVmU3RyaW5nLmdldF9jb2Rl
X2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVf
dHlwZV9kZWNsYXJhdGlvbl8uVHlwZWRlZlN0cmluZy5nZXRfY29kZV9nZW5lcmF0b3IuQ29kZUdl
bmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNy
ZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5UeXBlZGVmU3RyaW5nLmdldF9jb2RlX2dlbmVyYXRvci5D
b2RlR2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVpbGRlci5TdHJpbmcpOgorICAgICAgICAoVHlw
ZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5UeXBlZGVmU3RyaW5nLmdldF9jb2Rl
X2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLnJlZ2lzdGVyX3VzZSk6CisgICAgICAgIChUeXBlQmlu
ZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLlR5cGVkZWZTdHJpbmcuZ2V0X2NvZGVfZ2Vu
ZXJhdG9yLkNvZGVHZW5lcmF0b3IuZ2V0X2dlbmVyYXRlX3Bhc3NfaWQpOgorICAgICAgICAoVHlw
ZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5UeXBlZGVmU3RyaW5nLnJlZHVjZV90
b19yYXdfdHlwZSk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRp
b25fLlR5cGVkZWZTdHJpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4pOgor
ICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5UeXBlZGVmU3Ry
aW5nLmdldF9pbl9jX3R5cGVfdGV4dCk6CisgICAgICAgIChnZXRfZ2VuZXJhdGVfcGFzc19pZCk6
CisgICAgICAgIChBcnJheUJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yLkNvZGVHZW5lcmF0b3Ip
OgorICAgICAgICAoQXJyYXlCaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9y
LmdldF9nZW5lcmF0ZV9wYXNzX2lkKToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX3R5cGVz
LmNyZWF0ZV90eXBlX2J1aWxkZXJfY2FsbGVyKToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNz
X3R5cGVzLmNyZWF0ZV90eXBlX2J1aWxkZXJfY2FsbGVyLmNhbGxfdHlwZV9idWlsZGVyKToKKyAg
ICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX3R5cGVzKToKKwogMjAxMi0wMS0xNiAgTmlrb2xhcyBa
aW1tZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KIAogICAgICAgICBMYXJnZSBTVkcgdGV4
dCBsYXlvdXQgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiBpbiByODExNjgKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggZjRlOTcz
MGRhMmJhNzM1MjhhYzE0NDdjMTg0MDQyODg3Y2Y0NzQxNC4uZGFmNDA2YjQwMWZmZmJlZDk0ZDg1
ODBlNmJkMjg1YmMzYmIxNmIyZCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKQEAgLTU0Myw2ICs1NDMsMTMgQEAgY2xhc3MgRW51
bUNvbnN0YW50czoKICAgICAgICAgcmV0dXJuIGpvaW4ob3V0cHV0LCAiLFxuIikgKyAiXG4iCiAK
IAorIyBUeXBlYnVpbGRlciBjb2RlIGlzIGdlbmVyYXRlZCBpbiBzZXZlcmFsIHBhc3NlczogZmly
c3QgdHlwZWRlZnMsIHRoZW4gb3RoZXIgY2xhc3Nlcy4KKyMgTWFudWFsIHBhc3MgbWFuYWdlbWVu
dCBpcyBuZWVkZWQgYmVjYXVzZSB3ZSBjYW5ub3QgaGF2ZSBmb3J3YXJkIGRlY2xhcmF0aW9ucyBm
b3IgdHlwZWRlZnMuCitjbGFzcyBUeXBlQnVpbGRlclBhc3M6CisgICAgVFlQRURFRiA9ICJ0eXBl
ZGVmIgorICAgIE1BSU4gPSAibWFpbiIKKworCiBjbGFzcyBUeXBlQmluZGluZ3M6CiAgICAgQHN0
YXRpY21ldGhvZAogICAgIGRlZiBjcmVhdGVfbmFtZWRfdHlwZV9kZWNsYXJhdGlvbihqc29uX3R5
cGFibGUsIGNvbnRleHRfZG9tYWluX25hbWUsIHR5cGVfZGF0YSk6CkBAIC02MjYsNiArNjMzLDEw
IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYg
cmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXNzCiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9k
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9nZW5lcmF0ZV9wYXNzX2lkKCk6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlQnVpbGRlclBhc3Mu
TUFJTgorCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29kZUdlbmVyYXRvcgogCiAg
ICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZApAQCAtNjQyLDQyICs2NTMsNjQgQEAgY2xh
c3MgVHlwZUJpbmRpbmdzOgogCiAgICAgICAgICAgICAgICAgcmV0dXJuIEVudW1CaW5kaW5nCiAg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGhlbHBlci5pc19hZF9ob2M6CiAK
LSAgICAgICAgICAgICAgICBjbGFzcyBQbGFpblN0cmluZzoKLSAgICAgICAgICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2NvZGVfZ2VuZXJhdG9y
KCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBoZWxwZXIuaXNfYWRfaG9jOgorICAgICAg
ICAgICAgICAgICAgICBjbGFzcyBQbGFpblN0cmluZzoKKyAgICAgICAgICAgICAgICAgICAgICAg
IEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfY29kZV9nZW5l
cmF0b3IoKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICAg
ICAgICAgICAgICAgICAgY2xhc3MgQ29kZUdlbmVyYXRvcjoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdl
bmVyYXRlX3R5cGVfYnVpbGRlcih3cml0ZXIsIGZvcndhcmRfbGlzdGVuZXIpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXIud3JpdGVfZG9jKHdyaXRlcikKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWRfdHlwZV9uYW1lLm91dHB1dF9jb21tZW50KHdy
aXRlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoInR5
cGVkZWYgU3RyaW5nICIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5h
cHBlbmQoZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5hcHBlbmQoIjtcblxuIikKKyAgICAgICAgICAgICAgICAgICAgICAg
IEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3
X3R5cGUoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuU3Ry
aW5nCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmIHJlZ2lzdGVyX3VzZShmb3J3YXJkX2xpc3RlbmVyKToK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAg
ICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0
ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKIAotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVHZW5l
cmF0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmIGdldF9pbl9jX3R5cGVfdGV4dChjbHMsIG9wdGlvbmFsKToKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xzLnJlZHVjZV90b19yYXdfdHlwZSgpLmdl
dF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLkVWRU5ULCBvcHRpb25hbCkuZ2V0X3RleHQoKQogCi0g
ICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVm
IHJlZHVjZV90b19yYXdfdHlwZSgpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJh
d1R5cGVzLlN0cmluZworICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGxhaW5TdHJpbmcKIAot
ICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRl
ZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgICAgICBlbHNlOgogCi0gICAgICAgICAg
ICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2luX2Nf
dHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgotICAgICAgICAgICAgICAgICAgICAgICAgI0ZJWE1F
OiByZXR1cm4gYSB0eXBlZGVmIG5hbWUgaW5zdGVhZC4KLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBjbHMucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5
cGUuRVZFTlQsIG9wdGlvbmFsKS5nZXRfdGV4dCgpCisgICAgICAgICAgICAgICAgICAgIGNsYXNz
IFR5cGVkZWZTdHJpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisg
ICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2NvZGVfZ2VuZXJhdG9yKCk6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2xhc3MgQ29kZUdlbmVyYXRvcjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRlciwgZm9yd2FyZF9saXN0ZW5l
cik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXIud3JpdGVfZG9j
KHdyaXRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkX3R5cGVf
bmFtZS5vdXRwdXRfY29tbWVudCh3cml0ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIubmV3bGluZSgidHlwZWRlZiBTdHJpbmcgIikKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoZml4ZWRfdHlwZV9uYW1lLmNsYXNz
X25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5k
KCI7XG5cbiIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhv
ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVnaXN0ZXJfdXNlKGZvcndh
cmRfbGlzdGVuZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9nZW5lcmF0ZV9wYXNzX2lkKCk6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZUJ1aWxkZXJQYXNzLlRZ
UEVERUYKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb2RlR2VuZXJhdG9y
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gUmF3VHlwZXMuU3RyaW5nCiAKLSAgICAgICAgICAgICAgICByZXR1cm4g
UGxhaW5TdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVy
bigpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgZGVm
IGdldF9pbl9jX3R5cGVfdGV4dChjbHMsIG9wdGlvbmFsKToKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gImNvbnN0ICVzJXMmIiAlIChoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeCwg
Zml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFR5cGVkZWZTdHJpbmcKIAogICAgICAgICBlbGlmIGpzb25fdHlwYWJsZVsidHlwZSJdID09ICJv
YmplY3QiOgogICAgICAgICAgICAgaWYgInByb3BlcnRpZXMiIGluIGpzb25fdHlwYWJsZToKQEAg
LTg2Myw2ICs4OTYsMTAgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZiByZWdpc3Rlcl91c2UoZm9yd2FyZF9saXN0ZW5lcik6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci5hZGRfdG9fZm9yd2FyZF9saXN0ZW5lcihmb3J3
YXJkX2xpc3RlbmVyKQogCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhv
ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfZ2VuZXJhdGVfcGFzc19pZCgp
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZUJ1aWxkZXJQYXNz
Lk1BSU4KKwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVHZW5lcmF0b3IKIAog
ICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKQEAgLTk3Miw2ICsxMDA5LDEwIEBAIGNs
YXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZWdpc3Rlcl91
c2UoZm9yd2FyZF9saXN0ZW5lcik6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscGVy
LmFkZF90b19mb3J3YXJkX2xpc3RlbmVyKGZvcndhcmRfbGlzdGVuZXIpCiAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBn
ZXRfZ2VuZXJhdGVfcGFzc19pZCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBUeXBlQnVpbGRlclBhc3MuTUFJTgorCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb2Rl
R2VuZXJhdG9yCiAKICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKQEAgLTIwNzYsMTcgKzIx
MTcsMTggQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICAgICAgICAgICAgICBpZiBkb21haW5f
Z3VhcmQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW5fZ3VhcmQuZ2VuZXJhdGVfY2xv
c2Uob3V0KQogCi0gICAgICAgIGRlZiBjYWxsX3R5cGVfYnVpbGRlcih0eXBlX2RhdGEsIHdyaXRl
cl9nZXR0ZXIpOgotICAgICAgICAgICAgIyBEbyBub3QgZ2VuZXJhdGUgZm9yd2FyZHMgZm9yIHRo
aXMgdHlwZSBhbnkgbG9uZ2VyLgotICAgICAgICAgICAgRm9yd2FyZExpc3RlbmVyLmFscmVhZHlf
ZGVjbGFyZWRfc2V0LmFkZCh0eXBlX2RhdGEpCisgICAgICAgIGRlZiBjcmVhdGVfdHlwZV9idWls
ZGVyX2NhbGxlcihnZW5lcmF0ZV9wYXNzX2lkKToKKyAgICAgICAgICAgIGRlZiBjYWxsX3R5cGVf
YnVpbGRlcih0eXBlX2RhdGEsIHdyaXRlcl9nZXR0ZXIpOgorICAgICAgICAgICAgICAgICMgRG8g
bm90IGdlbmVyYXRlIGZvcndhcmRzIGZvciB0aGlzIHR5cGUgYW55IGxvbmdlci4KKyAgICAgICAg
ICAgICAgICBGb3J3YXJkTGlzdGVuZXIuYWxyZWFkeV9kZWNsYXJlZF9zZXQuYWRkKHR5cGVfZGF0
YSkKIAotICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IgPSB0eXBlX2RhdGEuZ2V0X2JpbmRpbmco
KS5nZXRfY29kZV9nZW5lcmF0b3IoKQotICAgICAgICAgICAgIyBDYWxsIGxhenkgZ2V0dGVyIGV2
ZW4gaWYgd2UgZG9uJ3QgZ2VuZXJhdCBhbnl0aGluZy4KLSAgICAgICAgICAgIHdyaXRlciA9IHdy
aXRlcl9nZXR0ZXIoKQotICAgICAgICAgICAgaWYgY29kZV9nZW5lcmF0b3I6Ci0gICAgICAgICAg
ICAgICAgY29kZV9nZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRlciwgRm9yd2Fy
ZExpc3RlbmVyKQorICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yID0gdHlwZV9kYXRhLmdl
dF9iaW5kaW5nKCkuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkKKyAgICAgICAgICAgICAgICBpZiBjb2Rl
X2dlbmVyYXRvciBhbmQgZ2VuZXJhdGVfcGFzc19pZCA9PSBjb2RlX2dlbmVyYXRvci5nZXRfZ2Vu
ZXJhdGVfcGFzc19pZCgpOgorICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSB3cml0ZXJfZ2V0
dGVyKCkKKyAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9i
dWlsZGVyKHdyaXRlciwgRm9yd2FyZExpc3RlbmVyKQorICAgICAgICAgICAgcmV0dXJuIGNhbGxf
dHlwZV9idWlsZGVyCiAKLSAgICAgICAgZ2VuZXJhdGVfYWxsX2RvbWFpbnNfY29kZShvdXRwdXQs
IGNhbGxfdHlwZV9idWlsZGVyKQorICAgICAgICBnZW5lcmF0ZV9hbGxfZG9tYWluc19jb2RlKG91
dHB1dCwgY3JlYXRlX3R5cGVfYnVpbGRlcl9jYWxsZXIoVHlwZUJ1aWxkZXJQYXNzLk1BSU4pKQog
CiAgICAgICAgIEdlbmVyYXRvci50eXBlX2J1aWxkZXJfZm9yd2FyZHMuYXBwZW5kKCIvLyBGb3J3
YXJkIGRlY2xhcmF0aW9ucy5cbiIpCiAKQEAgLTIwOTYsNyArMjEzOCwxMyBAQCBjbGFzcyBHZW5l
cmF0b3I6CiAgICAgICAgICAgICAgICAgYmluZGluZy5nZXRfY29kZV9nZW5lcmF0b3IoKS5nZW5l
cmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9uKHdyaXRlcl9nZXR0ZXIoKSkKICAgICAgICAgZ2VuZXJh
dGVfYWxsX2RvbWFpbnNfY29kZShHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ZvcndhcmRzLCBnZW5l
cmF0ZV9mb3J3YXJkX2NhbGxiYWNrKQogCi0gICAgICAgIEdlbmVyYXRvci50eXBlX2J1aWxkZXJf
Zm9yd2FyZHMuYXBwZW5kKCIvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuXG4iKQorICAg
ICAgICBHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ZvcndhcmRzLmFwcGVuZCgiLy8gRW5kIG9mIGZv
cndhcmQgZGVjbGFyYXRpb25zLlxuXG4iKQorCisgICAgICAgIEdlbmVyYXRvci50eXBlX2J1aWxk
ZXJfZm9yd2FyZHMuYXBwZW5kKCIvLyBUeXBlZGVmcy5cbiIpCisKKyAgICAgICAgZ2VuZXJhdGVf
YWxsX2RvbWFpbnNfY29kZShHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ZvcndhcmRzLCBjcmVhdGVf
dHlwZV9idWlsZGVyX2NhbGxlcihUeXBlQnVpbGRlclBhc3MuVFlQRURFRikpCisKKyAgICAgICAg
R2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9mb3J3YXJkcy5hcHBlbmQoIi8vIEVuZCBvZiB0eXBlZGVm
cy5cblxuIikKIAogCiBkZWYgZmxhdHRlbl9saXN0KGlucHV0KToK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>122633</attachid>
            <date>2012-01-16 07:32:13 -0800</date>
            <delta_ts>2012-01-16 07:32:13 -0800</delta_ts>
            <desc>InspectorFrontend.h base version</desc>
            <filename>InspectorFrontend.base.h</filename>
            <type>text/plain</type>
            <size>160131</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckZyb250ZW5kX2gKI2RlZmluZSBJbnNw
ZWN0b3JGcm9udGVuZF9oCgojaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNsdWRlIDxQ
bGF0Zm9ybVN0cmluZy5oPgojaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KCm5hbWVzcGFjZSBX
ZWJDb3JlIHsKCmNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKCi8vIEJvdGggSW5zcGVj
dG9yT2JqZWN0IGFuZCBJbnNwZWN0b3JBcnJheSBtYXkgb3IgbWF5IG5vdCBiZSBkZWNsYXJlZCBh
dCB0aGlzIHBvaW50IGFzIGRlZmluZWQgYnkgRU5BQkxFRF9JTlNQRUNUT1IuCi8vIERvdWJsZS1j
aGVjayB3ZSBoYXZlIHRoZW0gYXQgbGVhc3QgYXMgZm9yd2FyZCBkZWNsYXJhdGlvbi4KY2xhc3Mg
SW5zcGVjdG9yQXJyYXk7CmNsYXNzIEluc3BlY3Rvck9iamVjdDsKCnR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwoKI2lmIEVOQUJMRShJTlNQRUNUT1IpCgpuYW1lc3BhY2UgVHlwZUJ1aWxkZXIg
ewovLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KbmFtZXNwYWNlIENvbnNvbGUgewpjbGFzcyBTdGFj
a1RyYWNlOwp9IC8vIENvbnNvbGUKCm5hbWVzcGFjZSBDU1MgewpjbGFzcyBDU1NSdWxlOwpjbGFz
cyBTb3VyY2VSYW5nZTsKY2xhc3MgQ1NTU3R5bGU7CmNsYXNzIENTU1Byb3BlcnR5OwpjbGFzcyBD
U1NNZWRpYTsKfSAvLyBDU1MKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKbmFtZXNw
YWNlIERlYnVnZ2VyIHsKY2xhc3MgTG9jYXRpb247CmNsYXNzIFNjb3BlOwp9IC8vIERlYnVnZ2Vy
CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi8vIEVuZCBvZiBmb3J3YXJk
IGRlY2xhcmF0aW9ucy4KCgpTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOwoK
bmFtZXNwYWNlIE1lbW9yeSB7Ci8qIE51bWJlciBvZiBub2RlcyB3aXRoIGdpdmVuIG5hbWUuICov
CmNsYXNzIE5vZGVDb3VudCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBl
bnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgTm9kZU5hbWVTZXQgPSAxIDw8
IDAsCiAgICAgICAgQ291bnRTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKE5v
ZGVOYW1lU2V0IHwgQ291bnRTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAg
IGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxOb2RlQ291bnQ+IHB0cikKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9
CiAgICAgICAgZnJpZW5kIGNsYXNzIE5vZGVDb3VudDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE5vZGVOYW1lU2V0PiYgc2V0Tm9kZU5hbWUoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb2RlTmFt
ZVNldCksIHByb3BlcnR5X25vZGVOYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygibm9kZU5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8Tm9kZU5hbWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
Q291bnRTZXQ+JiBzZXRDb3VudChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgQ291bnRTZXQpLCBwcm9wZXJ0eV9jb3VudF9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNvdW50IiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvdW50U2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUmVmUHRyPE5vZGVDb3VudD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPE5vZGVDb3VudD4qPigm
bV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxOb2RlQ291
bnQ+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPE5vZGVDb3VudD4oKnRo
aXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKICAgICAqIFJlZlB0cjxOb2RlQ291bnQ+IHJlc3VsdCA9IE5vZGVDb3VudDo6Y3JlYXRlKCkK
ICAgICAqICAgICAuc2V0Tm9kZU5hbWUoLi4uKQogICAgICogICAgIC5zZXRDb3VudCguLi4pOwog
ICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IE5vZGVDb3VudCgp
KSk7CiAgICB9Cn07CgovKiBOdW1iZXIgb2YgSlMgZXZlbnQgbGlzdGVuZXJzIGJ5IGV2ZW50IHR5
cGUuICovCmNsYXNzIExpc3RlbmVyQ291bnQgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVi
bGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFR5cGVTZXQg
PSAxIDw8IDAsCiAgICAgICAgQ291bnRTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0
ID0gKFR5cGVTZXQgfCBDb3VudFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgog
ICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPExpc3RlbmVyQ291bnQ+IHB0cikKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAg
ICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIExpc3RlbmVyQ291bnQ7CiAgICBwdWJsaWM6Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVT
ZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBl
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvdW50U2V0PiYgc2V0
Q291bnQoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIENvdW50U2V0KSwgcHJvcGVydHlfY291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJjb3VudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxDb3VudFNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxMaXN0ZW5lckNvdW50PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8TGlzdGVuZXJDb3VudD4qPigmbV9yZXN1
bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxMaXN0ZW5lckNvdW50
PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxMaXN0ZW5lckNvdW50Pigq
dGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVj
dG9yOgogICAgICogUmVmUHRyPExpc3RlbmVyQ291bnQ+IHJlc3VsdCA9IExpc3RlbmVyQ291bnQ6
OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICogICAgIC5zZXRDb3VudCgu
Li4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAg
IHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IExpc3Rl
bmVyQ291bnQoKSkpOwogICAgfQp9OwoKY2xhc3MgRE9NR3JvdXAgOiBwdWJsaWMgSW5zcGVjdG9y
T2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnbm9kZUNv
dW50JyB3aGlsZSBnZW5lcmF0aW5nIERPTUdyb3VwLgogICAgY2xhc3MgTm9kZUNvdW50IDogcHVi
bGljIEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAgTm9kZUNvdW50KCkgeyB9
CgogICAgcHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxk
ZXI6Ok1lbW9yeTo6Tm9kZUNvdW50PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAg
IH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Tm9kZUNvdW50PiBjcmVhdGUoKSB7CiAgICAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTm9kZUNvdW50KCkpOwogICAgICAgIH0KICAgIH07
CgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnbGlzdGVuZXJDb3VudCcgd2hpbGUg
Z2VuZXJhdGluZyBET01Hcm91cC4KICAgIGNsYXNzIExpc3RlbmVyQ291bnQgOiBwdWJsaWMgSW5z
cGVjdG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAgICAgICBMaXN0ZW5lckNvdW50KCkgeyB9Cgog
ICAgcHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
Ok1lbW9yeTo6TGlzdGVuZXJDb3VudD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAg
ICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPExpc3RlbmVyQ291bnQ+IGNyZWF0ZSgpIHsK
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMaXN0ZW5lckNvdW50KCkpOwogICAgICAg
IH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFNp
emVTZXQgPSAxIDw8IDAsCiAgICAgICAgVGl0bGVTZXQgPSAxIDw8IDEsCiAgICAgICAgTm9kZUNv
dW50U2V0ID0gMSA8PCAyLAogICAgICAgIExpc3RlbmVyQ291bnRTZXQgPSAxIDw8IDMsCiAgICAg
ICAgQWxsRmllbGRzU2V0ID0gKFNpemVTZXQgfCBUaXRsZVNldCB8IE5vZGVDb3VudFNldCB8IExp
c3RlbmVyQ291bnRTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNz
IEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBt
X3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
PiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXIoUGFzc1JlZlB0cjxET01Hcm91cD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAg
ICBmcmllbmQgY2xhc3MgRE9NR3JvdXA7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBTaXplU2V0PiYgc2V0U2l6ZShpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgU2l6ZVNldCksIHByb3BlcnR5X3NpemVfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzaXplIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNpemVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgVGl0bGVTZXQ+JiBzZXRUaXRsZShjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpdGxlU2V0KSwg
cHJvcGVydHlfdGl0bGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJ0aXRsZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaXRsZVNl
dD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb2RlQ291bnRTZXQ+JiBz
ZXROb2RlQ291bnQoLypQYXNzUmVmUHRyPE5vZGVDb3VudD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBOb2RlQ291bnRTZXQpLCBwcm9wZXJ0eV9ub2RlQ291bnRfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoIm5vZGVDb3VudCIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxOb2RlQ291bnRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgTGlzdGVuZXJDb3VudFNldD4mIHNldExpc3RlbmVyQ291bnQoLypQYXNz
UmVmUHRyPExpc3RlbmVyQ291bnQ+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTGlzdGVuZXJD
b3VudFNldCksIHByb3BlcnR5X2xpc3RlbmVyQ291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0QXJyYXkoImxpc3RlbmVyQ291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8TGlzdGVuZXJDb3VudFNldD4oKTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFJlZlB0cjxET01Hcm91cD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPERPTUdyb3VwPio+KCZt
X3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPERPTUdyb3Vw
PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxET01Hcm91cD4oKnRoaXMp
OwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
ICAgICAqIFJlZlB0cjxET01Hcm91cD4gcmVzdWx0ID0gRE9NR3JvdXA6OmNyZWF0ZSgpCiAgICAg
KiAgICAgLnNldFNpemUoLi4uKQogICAgICogICAgIC5zZXRUaXRsZSguLi4pCiAgICAgKiAgICAg
LnNldE5vZGVDb3VudCguLi4pCiAgICAgKiAgICAgLnNldExpc3RlbmVyQ291bnQoLi4uKTsKICAg
ICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBET01Hcm91cCgpKSk7
CiAgICB9CgogICAgdm9pZCBzZXREb2N1bWVudFVSSShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ewogICAgICAgIHRoaXMtPnNldFN0cmluZygiZG9jdW1lbnRVUkkiLCB2YWx1ZSk7CiAgICB9Cn07
Cgp9IC8vIE1lbW9yeQoKbmFtZXNwYWNlIFBhZ2UgewovKiBSZXNvdXJjZSB0eXBlIGFzIGl0IHdh
cyBwZXJjZWl2ZWQgYnkgdGhlIHJlbmRlcmluZyBlbmdpbmUuICovCnN0cnVjdCBSZXNvdXJjZVR5
cGUgewogICAgZW51bSBFbnVtIHsKICAgICAgICBEb2N1bWVudCA9IDAsCiAgICAgICAgU3R5bGVz
aGVldCA9IDEsCiAgICAgICAgSW1hZ2UgPSAyLAogICAgICAgIEZvbnQgPSAzLAogICAgICAgIFNj
cmlwdCA9IDQsCiAgICAgICAgWEhSID0gNSwKICAgICAgICBXZWJTb2NrZXQgPSA2LAogICAgICAg
IE90aGVyID0gNywKICAgIH07Cn07IC8vIHN0cnVjdCBSZXNvdXJjZVR5cGUKCi8qIEluZm9ybWF0
aW9uIGFib3V0IHRoZSBGcmFtZSBvbiB0aGUgcGFnZS4gKi8KY2xhc3MgRnJhbWUgOiBwdWJsaWMg
SW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLAogICAgICAgIElkU2V0ID0gMSA8PCAwLAogICAgICAgIExvYWRlcklkU2V0ID0gMSA8PCAx
LAogICAgICAgIFVybFNldCA9IDEgPDwgMiwKICAgICAgICBNaW1lVHlwZVNldCA9IDEgPDwgMywK
ICAgICAgICBBbGxGaWVsZHNTZXQgPSAoSWRTZXQgfCBMb2FkZXJJZFNldCB8IFVybFNldCB8IE1p
bWVUeXBlU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWls
ZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1
bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8RnJhbWU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5k
IGNsYXNzIEZyYW1lOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSWRTZXQ+
JiBzZXRJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIElkU2V0KSwgcHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJpZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxJZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBMb2FkZXJJZFNldD4mIHNldExvYWRlcklkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTG9hZGVySWRTZXQpLCBwcm9w
ZXJ0eV9sb2FkZXJJZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoImxvYWRlcklkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExvYWRl
cklkU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVybFNldD4mIHNl
dFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFVybFNldCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxVcmxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgTWltZVR5cGVTZXQ+JiBzZXRNaW1lVHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1pbWVUeXBlU2V0KSwgcHJv
cGVydHlfbWltZVR5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJtaW1lVHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNaW1l
VHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxGcmFtZT4mICgp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNT
ZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8UmVmUHRyPEZyYW1lPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBQYXNzUmVmUHRyPEZyYW1lPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJl
ZlB0cjxGcmFtZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxGcmFtZT4gcmVzdWx0ID0gRnJhbWU6OmNy
ZWF0ZSgpCiAgICAgKiAgICAgLnNldElkKC4uLikKICAgICAqICAgICAuc2V0TG9hZGVySWQoLi4u
KQogICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRNaW1lVHlwZSguLi4pOwog
ICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IEZyYW1lKCkpKTsK
ICAgIH0KCiAgICB2b2lkIHNldFBhcmVudElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAg
ICAgICAgdGhpcy0+c2V0U3RyaW5nKCJwYXJlbnRJZCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lk
IHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJp
bmcoIm5hbWUiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTZWN1cml0eU9yaWdpbihjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic2VjdXJpdHlP
cmlnaW4iLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgRnJhbWUg
aGllcmFyY2h5IGFsb25nIHdpdGggdGhlaXIgY2FjaGVkIHJlc291cmNlcy4gKi8KY2xhc3MgRnJh
bWVSZXNvdXJjZVRyZWUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8g
TmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAncmVzb3VyY2VzJyB3aGlsZSBnZW5lcmF0aW5nIEZy
YW1lUmVzb3VyY2VUcmVlLgogICAgY2xhc3MgUmVzb3VyY2VzIDogcHVibGljIEluc3BlY3RvckFy
cmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVzb3VyY2VzKCkgeyB9CgogICAgcHVibGljOgog
ICAgICAgIGNsYXNzIEl0ZW0gOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJs
aWM6CiAgICAgICAgICAgIGVudW0gewogICAgICAgICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAog
ICAgICAgICAgICAgICAgVXJsU2V0ID0gMSA8PCAwLAogICAgICAgICAgICAgICAgVHlwZVNldCA9
IDEgPDwgMSwKICAgICAgICAgICAgICAgIE1pbWVUeXBlU2V0ID0gMSA8PCAyLAogICAgICAgICAg
ICAgICAgQWxsRmllbGRzU2V0ID0gKFVybFNldCB8IFR5cGVTZXQgfCBNaW1lVHlwZVNldCkKICAg
ICAgICAgICAgfTsKCiAgICAgICAgICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgICAgICAgICAg
Y2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTxp
bnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVy
PFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICBCdWlsZGVyKFBhc3NSZWZQdHI8SXRlbT4gcHRyKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICAgICAgICAgIG1fcmVzdWx0
ID0gcHRyOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIEl0
ZW07CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAKICAgICAgICAgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBVcmxTZXQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVXJsU2V0
KSwgcHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxVcmxTZXQ+KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZUJ1aWxkZXI6OlBhZ2U6
OlJlc291cmNlVHlwZTo6RW51bSB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5
cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAKICAg
ICAgICAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgCiAgICAgICAgICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWltZVR5cGVT
ZXQ+JiBzZXRNaW1lVHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNaW1lVHlwZVNldCks
IHByb3BlcnR5X21pbWVUeXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJtaW1lVHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPE1pbWVUeXBlU2V0PigpOwogICAgICAgICAgICAgICAgfQogICAgICAg
IAogICAgICAgICAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEl0ZW0+JiAoKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxk
c1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PFJlZlB0cjxJdGVtPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxJdGVtPiAoKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWZQdHI8SXRlbT4oKnRoaXMp
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgLyoKICAgICAg
ICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8SXRl
bT4gcmVzdWx0ID0gSXRlbTo6Y3JlYXRlKCkKICAgICAgICAgICAgICogICAgIC5zZXRVcmwoLi4u
KQogICAgICAgICAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNl
dE1pbWVUeXBlKC4uLik7CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBzdGF0aWMgQnVpbGRl
cjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBJdGVtKCkpKTsKICAgICAgICAg
ICAgfQogICAgICAgIH07CgogICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8SXRlbT4q
LyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFJlc291cmNlcz4gY3JlYXRlKCkgewogICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFJlc291cmNlcygpKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8vIE5hbWVkIGFmdGVyIHBy
b3BlcnR5IG5hbWUgJ2NoaWxkRnJhbWVzJyB3aGlsZSBnZW5lcmF0aW5nIEZyYW1lUmVzb3VyY2VU
cmVlLgogICAgY2xhc3MgQ2hpbGRGcmFtZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAg
cHJpdmF0ZToKICAgICAgICBDaGlsZEZyYW1lcygpIHsgfQoKICAgIHB1YmxpYzoKICAgICAgICB2
b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNl
VHJlZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENoaWxkRnJhbWVzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQ2hpbGRGcmFtZXMoKSk7CiAgICAgICAgfQogICAgfTsKCiAgICBlbnVtIHsK
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgRnJhbWVTZXQgPSAxIDw8IDAsCiAgICAg
ICAgUmVzb3VyY2VzU2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChGcmFtZVNl
dCB8IFJlc291cmNlc1NldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xh
c3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcihQYXNzUmVmUHRyPEZyYW1lUmVzb3VyY2VUcmVlPiBwdHIpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAg
ICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBGcmFtZVJlc291cmNlVHJlZTsKICAgIHB1YmxpYzoK
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEZyYW1lU2V0PiYgc2V0RnJhbWUoLypQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRnJh
bWVTZXQpLCBwcm9wZXJ0eV9mcmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRPYmplY3QoImZyYW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PEZyYW1lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJlc291cmNl
c1NldD4mIHNldFJlc291cmNlcygvKlBhc3NSZWZQdHI8UmVzb3VyY2VzPiovIFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFJlc291cmNlc1NldCksIHByb3BlcnR5X3Jlc291cmNlc19hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgicmVzb3VyY2VzIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFJlc291cmNlc1NldD4oKTsKICAgICAgICB9Cgog
ICAgICAgIG9wZXJhdG9yIFJlZlB0cjxGcmFtZVJlc291cmNlVHJlZT4mICgpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRy
PEZyYW1lUmVzb3VyY2VUcmVlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBQYXNzUmVmUHRyPEZyYW1lUmVzb3VyY2VUcmVlPiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuIFJlZlB0cjxGcmFtZVJlc291cmNlVHJlZT4oKnRoaXMpOwogICAgICAgIH0KICAg
IH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxG
cmFtZVJlc291cmNlVHJlZT4gcmVzdWx0ID0gRnJhbWVSZXNvdXJjZVRyZWU6OmNyZWF0ZSgpCiAg
ICAgKiAgICAgLnNldEZyYW1lKC4uLikKICAgICAqICAgICAuc2V0UmVzb3VyY2VzKC4uLik7CiAg
ICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAg
ICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgRnJhbWVSZXNvdXJj
ZVRyZWUoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0Q2hpbGRGcmFtZXMoLypQYXNzUmVmUHRyPENo
aWxkRnJhbWVzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgewogICAg
ICAgIHRoaXMtPnNldEFycmF5KCJjaGlsZEZyYW1lcyIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIFNl
YXJjaCBtYXRjaCBmb3IgcmVzb3VyY2UuICovCmNsYXNzIFNlYXJjaE1hdGNoIDogcHVibGljIElu
c3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKICAgICAgICBMaW5lTnVtYmVyU2V0ID0gMSA8PCAwLAogICAgICAgIExpbmVDb250ZW50U2V0
ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChMaW5lTnVtYmVyU2V0IHwgTGluZUNv
bnRlbnRTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxk
ZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3Vs
dDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIo
UGFzc1JlZlB0cjxTZWFyY2hNYXRjaD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBm
cmllbmQgY2xhc3MgU2VhcmNoTWF0Y2g7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBMaW5lTnVtYmVyU2V0PiYgc2V0TGluZU51bWJlcihkb3VibGUgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTGluZU51bWJlclNldCksIHBy
b3BlcnR5X2xpbmVOdW1iZXJfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
TnVtYmVyKCJsaW5lTnVtYmVyIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PExpbmVOdW1iZXJTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTGlu
ZUNvbnRlbnRTZXQ+JiBzZXRMaW5lQ29udGVudChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExpbmVDb250ZW50U2V0KSwg
cHJvcGVydHlfbGluZUNvbnRlbnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJsaW5lQ29udGVudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxMaW5lQ29udGVudFNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxTZWFyY2hNYXRjaD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNlYXJjaE1hdGNoPio+KCZtX3Jlc3VsdCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFNlYXJjaE1hdGNoPiAoKQog
ICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxTZWFyY2hNYXRjaD4oKnRoaXMpOwog
ICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAg
ICAqIFJlZlB0cjxTZWFyY2hNYXRjaD4gcmVzdWx0ID0gU2VhcmNoTWF0Y2g6OmNyZWF0ZSgpCiAg
ICAgKiAgICAgLnNldExpbmVOdW1iZXIoLi4uKQogICAgICogICAgIC5zZXRMaW5lQ29udGVudCgu
Li4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAg
IHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFNlYXJj
aE1hdGNoKCkpKTsKICAgIH0KfTsKCi8qIFNlYXJjaCByZXN1bHQgZm9yIHJlc291cmNlLiAqLwpj
bGFzcyBTZWFyY2hSZXN1bHQgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAg
ZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFVybFNldCA9IDEgPDwgMCwK
ICAgICAgICBGcmFtZUlkU2V0ID0gMSA8PCAxLAogICAgICAgIE1hdGNoZXNDb3VudFNldCA9IDEg
PDwgMiwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVXJsU2V0IHwgRnJhbWVJZFNldCB8IE1hdGNo
ZXNDb3VudFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVp
bGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVz
dWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBj
YXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cihQYXNzUmVmUHRyPFNlYXJjaFJlc3VsdD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAg
ICBmcmllbmQgY2xhc3MgU2VhcmNoUmVzdWx0OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgVXJsU2V0PiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVXJsU2V0KSwgcHJvcGVydHlfdXJs
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVybFNldD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBGcmFtZUlkU2V0PiYgc2V0RnJhbWVJZChjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IEZyYW1lSWRTZXQpLCBwcm9wZXJ0eV9mcmFtZUlkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygiZnJhbWVJZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxGcmFtZUlkU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IE1hdGNoZXNDb3VudFNldD4mIHNldE1hdGNoZXNDb3VudChkb3VibGUgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWF0Y2hlc0NvdW50U2V0
KSwgcHJvcGVydHlfbWF0Y2hlc0NvdW50X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldE51bWJlcigibWF0Y2hlc0NvdW50IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPE1hdGNoZXNDb3VudFNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9y
IFJlZlB0cjxTZWFyY2hSZXN1bHQ+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxTZWFyY2hSZXN1bHQ+Kj4oJm1f
cmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8U2VhcmNoUmVz
dWx0PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxTZWFyY2hSZXN1bHQ+
KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6CiAgICAgKiBSZWZQdHI8U2VhcmNoUmVzdWx0PiByZXN1bHQgPSBTZWFyY2hSZXN1bHQ6
OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgKiAgICAgLnNldEZyYW1lSWQo
Li4uKQogICAgICogICAgIC5zZXRNYXRjaGVzQ291bnQoLi4uKTsKICAgICAqLwogICAgc3RhdGlj
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBTZWFyY2hSZXN1bHQoKSkpOwogICAgfQp9OwoK
LyogQ29va2llIG9iamVjdCAqLwpjbGFzcyBDb29raWUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0
IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIE5h
bWVTZXQgPSAxIDw8IDAsCiAgICAgICAgVmFsdWVTZXQgPSAxIDw8IDEsCiAgICAgICAgRG9tYWlu
U2V0ID0gMSA8PCAyLAogICAgICAgIFBhdGhTZXQgPSAxIDw8IDMsCiAgICAgICAgRXhwaXJlc1Nl
dCA9IDEgPDwgNCwKICAgICAgICBTaXplU2V0ID0gMSA8PCA1LAogICAgICAgIEh0dHBPbmx5U2V0
ID0gMSA8PCA2LAogICAgICAgIFNlY3VyZVNldCA9IDEgPDwgNywKICAgICAgICBTZXNzaW9uU2V0
ID0gMSA8PCA4LAogICAgICAgIEFsbEZpZWxkc1NldCA9IChOYW1lU2V0IHwgVmFsdWVTZXQgfCBE
b21haW5TZXQgfCBQYXRoU2V0IHwgRXhwaXJlc1NldCB8IFNpemVTZXQgfCBIdHRwT25seVNldCB8
IFNlY3VyZVNldCB8IFNlc3Npb25TZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4K
ICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDb29raWU+IHB0cikKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9
CiAgICAgICAgZnJpZW5kIGNsYXNzIENvb2tpZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IE5hbWVTZXQ+JiBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTmFtZVNldCksIHByb3BlcnR5
X25hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJuYW1l
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5hbWVTZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVTZXQ+JiBzZXRWYWx1ZShjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFZhbHVlU2V0KSwgcHJvcGVydHlfdmFsdWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxWYWx1ZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBE
b21haW5TZXQ+JiBzZXREb21haW4oY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBEb21haW5TZXQpLCBwcm9wZXJ0eV9kb21h
aW5fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJkb21haW4i
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RG9tYWluU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBhdGhTZXQ+JiBzZXRQYXRoKGNvbnN0IFN0
cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgUGF0aFNldCksIHByb3BlcnR5X3BhdGhfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJwYXRoIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFBhdGhTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXhwaXJl
c1NldD4mIHNldEV4cGlyZXMoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIEV4cGlyZXNTZXQpLCBwcm9wZXJ0eV9leHBpcmVzX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiZXhwaXJlcyIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFeHBpcmVzU2V0PigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFNpemVTZXQ+JiBzZXRTaXplKGludCB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTaXplU2V0KSwgcHJvcGVy
dHlfc2l6ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNp
emUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U2l6ZVNldD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBIdHRwT25seVNldD4mIHNldEh0dHBPbmx5
KGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgSHR0cE9ubHlTZXQpLCBwcm9wZXJ0eV9odHRwT25seV9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJodHRwT25seSIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxIdHRwT25seVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBTZWN1cmVTZXQ+JiBzZXRTZWN1cmUoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTZWN1cmVTZXQpLCBwcm9wZXJ0eV9z
ZWN1cmVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigic2Vj
dXJlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNlY3VyZVNldD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTZXNzaW9uU2V0PiYgc2V0U2Vzc2lv
bihib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFNlc3Npb25TZXQpLCBwcm9wZXJ0eV9zZXNzaW9uX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oInNlc3Npb24iLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8U2Vzc2lvblNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9y
IFJlZlB0cjxDb29raWU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDb29raWU+Kj4oJm1fcmVzdWx0KTsKICAg
ICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q29va2llPiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDb29raWU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9
OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q29v
a2llPiByZXN1bHQgPSBDb29raWU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE5hbWUoLi4uKQog
ICAgICogICAgIC5zZXRWYWx1ZSguLi4pCiAgICAgKiAgICAgLnNldERvbWFpbiguLi4pCiAgICAg
KiAgICAgLnNldFBhdGgoLi4uKQogICAgICogICAgIC5zZXRFeHBpcmVzKC4uLikKICAgICAqICAg
ICAuc2V0U2l6ZSguLi4pCiAgICAgKiAgICAgLnNldEh0dHBPbmx5KC4uLikKICAgICAqICAgICAu
c2V0U2VjdXJlKC4uLikKICAgICAqICAgICAuc2V0U2Vzc2lvbiguLi4pOwogICAgICovCiAgICBz
dGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4g
QnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IENvb2tpZSgpKSk7CiAgICB9Cn07Cgov
KiBVbmlxdWUgc2NyaXB0IGlkZW50aWZpZXIuICovCnR5cGVkZWYgU3RyaW5nIFNjcmlwdElkZW50
aWZpZXI7Cgp9IC8vIFBhZ2UKCm5hbWVzcGFjZSBSdW50aW1lIHsKLyogVW5pcXVlIG9iamVjdCBp
ZGVudGlmaWVyLiAqLwp0eXBlZGVmIFN0cmluZyBSZW1vdGVPYmplY3RJZDsKCi8qIE1pcnJvciBv
YmplY3QgcmVmZXJlbmNpbmcgb3JpZ2luYWwgSmF2YVNjcmlwdCBvYmplY3QuICovCmNsYXNzIFJl
bW90ZU9iamVjdCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1l
ZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIFJlbW90ZU9iamVj
dC4KICAgIHN0cnVjdCBUeXBlIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBPYmpl
Y3QgPSA4LAogICAgICAgICAgICBGdW5jdGlvbiA9IDksCiAgICAgICAgICAgIFVuZGVmaW5lZCA9
IDEwLAogICAgICAgICAgICBTdHJpbmcgPSAxMSwKICAgICAgICAgICAgTnVtYmVyID0gMTIsCiAg
ICAgICAgICAgIEJvb2xlYW4gPSAxMywKICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0IFR5cGUK
CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdzdWJ0eXBlJyB3aGlsZSBnZW5lcmF0
aW5nIFJlbW90ZU9iamVjdC4KICAgIHN0cnVjdCBTdWJ0eXBlIHsKICAgICAgICBlbnVtIEVudW0g
ewogICAgICAgICAgICBBcnJheSA9IDE0LAogICAgICAgICAgICBOdWxsID0gMTUsCiAgICAgICAg
ICAgIE5vZGUgPSAxNiwKICAgICAgICAgICAgUmVnZXhwID0gMTcsCiAgICAgICAgICAgIERhdGUg
PSAxOCwKICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0IFN1YnR5cGUKCiAgICBlbnVtIHsKICAg
ICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgVHlwZVNldCA9IDEgPDwgMCwKICAgICAgICBB
bGxGaWVsZHNTZXQgPSAoVHlwZVNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgog
ICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFJlbW90ZU9iamVjdD4gcHRyKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3Jl
YXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAg
ICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgUmVtb3RlT2JqZWN0OwogICAgcHVibGljOgoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZTo6RW51bSB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwg
cHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoInR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgVHlwZVNldD4mIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKICAgICAgICB9Cgog
ICAgICAgIG9wZXJhdG9yIFJlZlB0cjxSZW1vdGVPYmplY3Q+JiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxSZW1v
dGVPYmplY3Q+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NS
ZWZQdHI8UmVtb3RlT2JqZWN0PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0
cjxSZW1vdGVPYmplY3Q+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UmVtb3RlT2JqZWN0PiByZXN1bHQg
PSBSZW1vdGVPYmplY3Q6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKTsKICAgICAq
LwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBSZW1vdGVPYmplY3QoKSkp
OwogICAgfQoKICAgIHZvaWQgc2V0U3VidHlwZShTdWJ0eXBlOjpFbnVtIHZhbHVlKQogICAgewog
ICAgICAgIHRoaXMtPnNldFN0cmluZygic3VidHlwZSIsIGdldEVudW1Db25zdGFudFZhbHVlKHZh
bHVlKSk7CiAgICB9CgogICAgdm9pZCBzZXRTdWJ0eXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzdWJ0eXBlIiwgdmFsdWUpOwogICAgfQoKICAg
IHZvaWQgc2V0Q2xhc3NOYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhp
cy0+c2V0U3RyaW5nKCJjbGFzc05hbWUiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRWYWx1
ZShQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRWYWx1ZSgidmFsdWUiLCB2YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3JPYmplY3Q6
OnNldFZhbHVlOwoKCiAgICB2b2lkIHNldERlc2NyaXB0aW9uKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJkZXNjcmlwdGlvbiIsIHZhbHVlKTsKICAg
IH0KCiAgICB2b2lkIHNldE9iamVjdElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAg
ICAgdGhpcy0+c2V0U3RyaW5nKCJvYmplY3RJZCIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIE9iamVj
dCBwcm9wZXJ0eSBkZXNjcmlwdG9yLiAqLwpjbGFzcyBQcm9wZXJ0eURlc2NyaXB0b3IgOiBwdWJs
aWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNT
ZXQgPSAwLAogICAgICAgIE5hbWVTZXQgPSAxIDw8IDAsCiAgICAgICAgV3JpdGFibGVTZXQgPSAx
IDw8IDEsCiAgICAgICAgQ29uZmlndXJhYmxlU2V0ID0gMSA8PCAyLAogICAgICAgIEVudW1lcmFi
bGVTZXQgPSAxIDw8IDMsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKE5hbWVTZXQgfCBXcml0YWJs
ZVNldCB8IENvbmZpZ3VyYWJsZVNldCB8IEVudW1lcmFibGVTZXQpCiAgICB9OwoKICAgIHRlbXBs
YXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNU
RVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxQcm9wZXJ0eURlc2NyaXB0
b3I+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5v
RmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAg
ICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFByb3BlcnR5
RGVzY3JpcHRvcjsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5hbWVTZXQ+
JiBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgTmFtZVNldCksIHByb3BlcnR5X25hbWVfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPE5hbWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgV3JpdGFibGVTZXQ+JiBzZXRXcml0YWJsZShib29sIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFdyaXRhYmxlU2V0KSwgcHJv
cGVydHlfd3JpdGFibGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9v
bGVhbigid3JpdGFibGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8V3Jp
dGFibGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29uZmlndXJh
YmxlU2V0PiYgc2V0Q29uZmlndXJhYmxlKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29uZmlndXJhYmxlU2V0KSwgcHJvcGVydHlfY29u
ZmlndXJhYmxlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4o
ImNvbmZpZ3VyYWJsZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb25m
aWd1cmFibGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRW51bWVy
YWJsZVNldD4mIHNldEVudW1lcmFibGUoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFbnVtZXJhYmxlU2V0KSwgcHJvcGVydHlfZW51bWVy
YWJsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJlbnVt
ZXJhYmxlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVudW1lcmFibGVT
ZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8UHJvcGVydHlEZXNjcmlw
dG9yPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFs
bEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxSZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9yPio+KCZtX3Jlc3VsdCk7CiAg
ICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFByb3BlcnR5RGVzY3JpcHRvcj4g
KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9y
PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgogICAgICogUmVmUHRyPFByb3BlcnR5RGVzY3JpcHRvcj4gcmVzdWx0ID0gUHJvcGVy
dHlEZXNjcmlwdG9yOjpjcmVhdGUoKQogICAgICogICAgIC5zZXROYW1lKC4uLikKICAgICAqICAg
ICAuc2V0V3JpdGFibGUoLi4uKQogICAgICogICAgIC5zZXRDb25maWd1cmFibGUoLi4uKQogICAg
ICogICAgIC5zZXRFbnVtZXJhYmxlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5v
RmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRz
U2V0PihhZG9wdFJlZihuZXcgUHJvcGVydHlEZXNjcmlwdG9yKCkpKTsKICAgIH0KCiAgICB2b2lk
IHNldFZhbHVlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlz
LT5zZXRPYmplY3QoInZhbHVlIiwgdmFsdWUpOwogICAgfQogICAgdXNpbmcgSW5zcGVjdG9yT2Jq
ZWN0OjpzZXRWYWx1ZTsKCgogICAgdm9pZCBzZXRHZXQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgiZ2V0IiwgdmFsdWUpOwogICAgfQoK
ICAgIHZvaWQgc2V0U2V0KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAg
ICB0aGlzLT5zZXRPYmplY3QoInNldCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFdhc1Ro
cm93bihib29sIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4oIndhc1Rocm93
biIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIFJlcHJlc2VudHMgZnVuY3Rpb24gY2FsbCBhcmd1bWVu
dC4gRWl0aGVyIHJlbW90ZSBvYmplY3QgaWQgPGNvZGU+b2JqZWN0SWQ8L2NvZGU+IG9yIHByaW1p
dGl2ZSA8Y29kZT52YWx1ZTwvY29kZT4gb3IgbmVpdGhlciBvZiAoZm9yIHVuZGVmaW5lZCkgdGhl
bSBzaG91bGQgYmUgc3BlY2lmaWVkLiAqLwpjbGFzcyBDYWxsQXJndW1lbnQgOiBwdWJsaWMgSW5z
cGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAw
LAogICAgICAgIEFsbEZpZWxkc1NldCA9IDAKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRF
PgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxT
VEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENhbGxBcmd1bWVudD4gcHRyKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwog
ICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ2FsbEFyZ3VtZW50OwogICAgcHVibGljOgoK
ICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q2FsbEFyZ3VtZW50PiYgKCkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q2Fs
bEFyZ3VtZW50Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNz
UmVmUHRyPENhbGxBcmd1bWVudD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQ
dHI8Q2FsbEFyZ3VtZW50PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENhbGxBcmd1bWVudD4gcmVzdWx0
ID0gQ2FsbEFyZ3VtZW50OjpjcmVhdGUoKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+KGFkb3B0UmVmKG5ldyBDYWxsQXJndW1lbnQoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0VmFs
dWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0VmFsdWUoInZhbHVlIiwgdmFsdWUpOwogICAgfQogICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0
OjpzZXRWYWx1ZTsKCgogICAgdm9pZCBzZXRPYmplY3RJZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxk
ZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
dmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJvYmplY3RJZCIsIHZhbHVlKTsK
ICAgIH0KfTsKCn0gLy8gUnVudGltZQoKbmFtZXNwYWNlIENvbnNvbGUgewovKiBDb25zb2xlIG1l
c3NhZ2UuICovCmNsYXNzIENvbnNvbGVNZXNzYWdlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7
CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3NvdXJjZScgd2hpbGUg
Z2VuZXJhdGluZyBDb25zb2xlTWVzc2FnZS4KICAgIHN0cnVjdCBTb3VyY2UgewogICAgICAgIGVu
dW0gRW51bSB7CiAgICAgICAgICAgIEh0bWwgPSAxOSwKICAgICAgICAgICAgV21sID0gMjAsCiAg
ICAgICAgICAgIFhtbCA9IDIxLAogICAgICAgICAgICBKYXZhc2NyaXB0ID0gMjIsCiAgICAgICAg
ICAgIE5ldHdvcmsgPSAyMywKICAgICAgICAgICAgQ29uc29sZV9hcGkgPSAyNCwKICAgICAgICAg
ICAgT3RoZXIgPSAyNSwKICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0IFNvdXJjZQoKICAgIC8v
IE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2xldmVsJyB3aGlsZSBnZW5lcmF0aW5nIENvbnNv
bGVNZXNzYWdlLgogICAgc3RydWN0IExldmVsIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAg
ICAgICBUaXAgPSAyNiwKICAgICAgICAgICAgTG9nID0gMjcsCiAgICAgICAgICAgIFdhcm5pbmcg
PSAyOCwKICAgICAgICAgICAgRXJyb3IgPSAyOSwKICAgICAgICAgICAgRGVidWcgPSAzMCwKICAg
ICAgICB9OwogICAgfTsgLy8gc3RydWN0IExldmVsCgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVy
dHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGluZyBDb25zb2xlTWVzc2FnZS4KICAgIHN0cnVj
dCBUeXBlIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBMb2cgPSAyNywKICAgICAg
ICAgICAgRGlyID0gMzEsCiAgICAgICAgICAgIERpcnhtbCA9IDMyLAogICAgICAgICAgICBUcmFj
ZSA9IDMzLAogICAgICAgICAgICBTdGFydEdyb3VwID0gMzQsCiAgICAgICAgICAgIFN0YXJ0R3Jv
dXBDb2xsYXBzZWQgPSAzNSwKICAgICAgICAgICAgRW5kR3JvdXAgPSAzNiwKICAgICAgICAgICAg
QXNzZXJ0ID0gMzcsCiAgICAgICAgfTsKICAgIH07IC8vIHN0cnVjdCBUeXBlCgogICAgLy8gTmFt
ZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAncGFyYW1ldGVycycgd2hpbGUgZ2VuZXJhdGluZyBDb25z
b2xlTWVzc2FnZS4KICAgIGNsYXNzIFBhcmFtZXRlcnMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkg
ewogICAgcHJpdmF0ZToKICAgICAgICBQYXJhbWV0ZXJzKCkgeyB9CgogICAgcHVibGljOgogICAg
ICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90
ZU9iamVjdD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFBhcmFtZXRlcnM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBQYXJhbWV0ZXJzKCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7
CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFNvdXJjZVNldCA9IDEgPDwgMCwKICAg
ICAgICBMZXZlbFNldCA9IDEgPDwgMSwKICAgICAgICBUZXh0U2V0ID0gMSA8PCAyLAogICAgICAg
IEFsbEZpZWxkc1NldCA9IChTb3VyY2VTZXQgfCBMZXZlbFNldCB8IFRleHRTZXQpCiAgICB9OwoK
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToK
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDb25zb2xl
TWVzc2FnZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ29u
c29sZU1lc3NhZ2U7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTb3VyY2VT
ZXQ+JiBzZXRTb3VyY2UoU291cmNlOjpFbnVtIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNvdXJjZVNldCksIHByb3BlcnR5X3NvdXJjZV9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInNvdXJjZSIsIGdldEVu
dW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U291
cmNlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNvdXJjZVNldD4m
IHNldFNvdXJjZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFNvdXJjZVNldCksIHByb3BlcnR5X3NvdXJjZV9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInNvdXJjZSIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTb3VyY2VTZXQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgTGV2ZWxTZXQ+JiBzZXRMZXZlbChMZXZlbDo6RW51bSB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBMZXZlbFNl
dCksIHByb3BlcnR5X2xldmVsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygibGV2ZWwiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPExldmVsU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IExldmVsU2V0PiYgc2V0TGV2ZWwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBMZXZlbFNldCksIHByb3Bl
cnR5X2xldmVsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
bGV2ZWwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TGV2ZWxTZXQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGV4dFNldD4mIHNldFRleHQoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBUZXh0U2V0KSwgcHJvcGVydHlfdGV4dF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoInRleHQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8VGV4dFNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxD
b25zb2xlTWVzc2FnZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENvbnNvbGVNZXNzYWdlPio+KCZtX3Jlc3Vs
dCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENvbnNvbGVNZXNzYWdl
PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDb25zb2xlTWVzc2FnZT4o
KnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKICAgICAqIFJlZlB0cjxDb25zb2xlTWVzc2FnZT4gcmVzdWx0ID0gQ29uc29sZU1lc3Nh
Z2U6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFNvdXJjZSguLi4pCiAgICAgKiAgICAgLnNldExl
dmVsKC4uLikKICAgICAqICAgICAuc2V0VGV4dCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxO
b0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IENvbnNvbGVNZXNzYWdlKCkpKTsKICAgIH0KCiAgICB2
b2lkIHNldFR5cGUoVHlwZTo6RW51bSB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJp
bmcoInR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgfQoKICAgIHZvaWQg
c2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmlu
ZygidHlwZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFVybChjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgfQoK
ICAgIHZvaWQgc2V0TGluZShpbnQgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0TnVtYmVy
KCJsaW5lIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0UmVwZWF0Q291bnQoaW50IHZhbHVl
KQogICAgewogICAgICAgIHRoaXMtPnNldE51bWJlcigicmVwZWF0Q291bnQiLCB2YWx1ZSk7CiAg
ICB9CgogICAgdm9pZCBzZXRQYXJhbWV0ZXJzKC8qUGFzc1JlZlB0cjxQYXJhbWV0ZXJzPiovIFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFy
cmF5KCJwYXJhbWV0ZXJzIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U3RhY2tUcmFjZSgv
KlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OlN0YWNrVHJhY2U+Ki8gUGFzc1JlZlB0
cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0QXJyYXkoInN0
YWNrVHJhY2UiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXROZXR3b3JrUmVxdWVzdElkKGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJuZXR3b3Jr
UmVxdWVzdElkIiwgdmFsdWUpOwogICAgfQp9OwoKLyogU3RhY2sgZW50cnkgZm9yIGNvbnNvbGUg
ZXJyb3JzIGFuZCBhc3NlcnRpb25zLiAqLwpjbGFzcyBDYWxsRnJhbWUgOiBwdWJsaWMgSW5zcGVj
dG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAog
ICAgICAgIEZ1bmN0aW9uTmFtZVNldCA9IDEgPDwgMCwKICAgICAgICBVcmxTZXQgPSAxIDw8IDEs
CiAgICAgICAgTGluZU51bWJlclNldCA9IDEgPDwgMiwKICAgICAgICBDb2x1bW5OdW1iZXJTZXQg
PSAxIDw8IDMsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKEZ1bmN0aW9uTmFtZVNldCB8IFVybFNl
dCB8IExpbmVOdW1iZXJTZXQgfCBDb2x1bW5OdW1iZXJTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRl
PGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+
IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDYWxsRnJhbWU+IHB0cikKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9
IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENhbGxGcmFtZTsKICAgIHB1Ymxp
YzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEZ1bmN0aW9uTmFtZVNldD4mIHNldEZ1bmN0aW9u
TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIEZ1bmN0aW9uTmFtZVNldCksIHByb3BlcnR5X2Z1bmN0aW9uTmFtZV9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImZ1bmN0aW9uTmFt
ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxGdW5jdGlvbk5hbWVTZXQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVXJsU2V0PiYgc2V0VXJsKGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgVXJsU2V0KSwgcHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFVybFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMaW5l
TnVtYmVyU2V0PiYgc2V0TGluZU51bWJlcihpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTGluZU51bWJlclNldCksIHByb3BlcnR5X2xpbmVO
dW1iZXJfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJsaW5l
TnVtYmVyIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExpbmVOdW1iZXJT
ZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTnVtYmVyU2V0
PiYgc2V0Q29sdW1uTnVtYmVyKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OdW1iZXJTZXQpLCBwcm9wZXJ0eV9jb2x1bW5OdW1i
ZXJfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJjb2x1bW5O
dW1iZXIiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1uTnVtYmVy
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENhbGxGcmFtZT4mICgp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNT
ZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8UmVmUHRyPENhbGxGcmFtZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUGFzc1JlZlB0cjxDYWxsRnJhbWU+ICgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gUmVmUHRyPENhbGxGcmFtZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoK
ICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDYWxsRnJhbWU+IHJl
c3VsdCA9IENhbGxGcmFtZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0RnVuY3Rpb25OYW1lKC4u
LikKICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAqICAgICAuc2V0TGluZU51bWJlciguLi4p
CiAgICAgKiAgICAgLnNldENvbHVtbk51bWJlciguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxO
b0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IENhbGxGcmFtZSgpKSk7CiAgICB9Cn07CgovKiBDYWxs
IGZyYW1lcyBmb3IgYXNzZXJ0aW9ucyBvciBlcnJvciBtZXNzYWdlcy4gKi8KY2xhc3MgU3RhY2tU
cmFjZSA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CnByaXZhdGU6CiAgICBTdGFja1RyYWNlKCkg
eyB9CgpwdWJsaWM6CiAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpD
b25zb2xlOjpDYWxsRnJhbWU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQog
ICAgewogICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgfQoKICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0YWNrVHJhY2U+IGNyZWF0ZSgpIHsKICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFN0YWNrVHJhY2UoKSk7CiAgICB9Cn07Cgp9IC8vIENvbnNvbGUKCm5hbWVzcGFjZSBOZXR3
b3JrIHsKLyogVW5pcXVlIGxvYWRlciBpZGVudGlmaWVyLiAqLwp0eXBlZGVmIFN0cmluZyBMb2Fk
ZXJJZDsKCi8qIFVuaXF1ZSBmcmFtZSBpZGVudGlmaWVyLiAqLwp0eXBlZGVmIFN0cmluZyBGcmFt
ZUlkOwoKLyogVW5pcXVlIHJlcXVlc3QgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgUmVx
dWVzdElkOwoKLyogVGltaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgcmVxdWVzdC4gKi8KY2xhc3Mg
UmVzb3VyY2VUaW1pbmcgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51
bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFJlcXVlc3RUaW1lU2V0ID0gMSA8
PCAwLAogICAgICAgIFByb3h5U3RhcnRTZXQgPSAxIDw8IDEsCiAgICAgICAgUHJveHlFbmRTZXQg
PSAxIDw8IDIsCiAgICAgICAgRG5zU3RhcnRTZXQgPSAxIDw8IDMsCiAgICAgICAgRG5zRW5kU2V0
ID0gMSA8PCA0LAogICAgICAgIENvbm5lY3RTdGFydFNldCA9IDEgPDwgNSwKICAgICAgICBDb25u
ZWN0RW5kU2V0ID0gMSA8PCA2LAogICAgICAgIFNzbFN0YXJ0U2V0ID0gMSA8PCA3LAogICAgICAg
IFNzbEVuZFNldCA9IDEgPDwgOCwKICAgICAgICBTZW5kU3RhcnRTZXQgPSAxIDw8IDksCiAgICAg
ICAgU2VuZEVuZFNldCA9IDEgPDwgMTAsCiAgICAgICAgUmVjZWl2ZUhlYWRlcnNFbmRTZXQgPSAx
IDw8IDExLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChSZXF1ZXN0VGltZVNldCB8IFByb3h5U3Rh
cnRTZXQgfCBQcm94eUVuZFNldCB8IERuc1N0YXJ0U2V0IHwgRG5zRW5kU2V0IHwgQ29ubmVjdFN0
YXJ0U2V0IHwgQ29ubmVjdEVuZFNldCB8IFNzbFN0YXJ0U2V0IHwgU3NsRW5kU2V0IHwgU2VuZFN0
YXJ0U2V0IHwgU2VuZEVuZFNldCB8IFJlY2VpdmVIZWFkZXJzRW5kU2V0KQogICAgfTsKCiAgICB0
ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGlu
dCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8UmVzb3VyY2VUaW1p
bmc+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5v
RmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAg
ICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNl
VGltaW5nOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUmVxdWVzdFRpbWVT
ZXQ+JiBzZXRSZXF1ZXN0VGltZShkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgUmVxdWVzdFRpbWVTZXQpLCBwcm9wZXJ0eV9yZXF1ZXN0
VGltZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInJlcXVl
c3RUaW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFJlcXVlc3RUaW1l
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFByb3h5U3RhcnRTZXQ+
JiBzZXRQcm94eVN0YXJ0KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBQcm94eVN0YXJ0U2V0KSwgcHJvcGVydHlfcHJveHlTdGFydF9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInByb3h5U3RhcnQi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UHJveHlTdGFydFNldD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQcm94eUVuZFNldD4mIHNldFByb3h5
RW5kKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBQcm94eUVuZFNldCksIHByb3BlcnR5X3Byb3h5RW5kX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigicHJveHlFbmQiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8UHJveHlFbmRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgRG5zU3RhcnRTZXQ+JiBzZXREbnNTdGFydChkb3VibGUgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRG5zU3RhcnRTZXQp
LCBwcm9wZXJ0eV9kbnNTdGFydF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXROdW1iZXIoImRuc1N0YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PERuc1N0YXJ0U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERuc0Vu
ZFNldD4mIHNldERuc0VuZChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgRG5zRW5kU2V0KSwgcHJvcGVydHlfZG5zRW5kX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiZG5zRW5kIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERuc0VuZFNldD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBDb25uZWN0U3RhcnRTZXQ+JiBzZXRDb25uZWN0U3RhcnQoZG91
YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IENvbm5lY3RTdGFydFNldCksIHByb3BlcnR5X2Nvbm5lY3RTdGFydF9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNvbm5lY3RTdGFydCIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb25uZWN0U3RhcnRTZXQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29ubmVjdEVuZFNldD4mIHNldENvbm5lY3RFbmQoZG91
YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IENvbm5lY3RFbmRTZXQpLCBwcm9wZXJ0eV9jb25uZWN0RW5kX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiY29ubmVjdEVuZCIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxDb25uZWN0RW5kU2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFNzbFN0YXJ0U2V0PiYgc2V0U3NsU3RhcnQoZG91YmxlIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNzbFN0YXJ0U2V0
KSwgcHJvcGVydHlfc3NsU3RhcnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0TnVtYmVyKCJzc2xTdGFydCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxTc2xTdGFydFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTc2xF
bmRTZXQ+JiBzZXRTc2xFbmQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFNzbEVuZFNldCksIHByb3BlcnR5X3NzbEVuZF9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNzbEVuZCIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTc2xFbmRTZXQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgU2VuZFN0YXJ0U2V0PiYgc2V0U2VuZFN0YXJ0KGRvdWJsZSB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTZW5k
U3RhcnRTZXQpLCBwcm9wZXJ0eV9zZW5kU3RhcnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0TnVtYmVyKCJzZW5kU3RhcnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8U2VuZFN0YXJ0U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFNlbmRFbmRTZXQ+JiBzZXRTZW5kRW5kKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTZW5kRW5kU2V0KSwgcHJvcGVydHlf
c2VuZEVuZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNl
bmRFbmQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U2VuZEVuZFNldD4o
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSZWNlaXZlSGVhZGVyc0VuZFNl
dD4mIHNldFJlY2VpdmVIZWFkZXJzRW5kKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBSZWNlaXZlSGVhZGVyc0VuZFNldCksIHByb3Bl
cnR5X3JlY2VpdmVIZWFkZXJzRW5kX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE51bWJlcigicmVjZWl2ZUhlYWRlcnNFbmQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8UmVjZWl2ZUhlYWRlcnNFbmRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBSZWZQdHI8UmVzb3VyY2VUaW1pbmc+JiAoKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5
KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxSZXNvdXJjZVRp
bWluZz4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0
cjxSZXNvdXJjZVRpbWluZz4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8
UmVzb3VyY2VUaW1pbmc+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UmVzb3VyY2VUaW1pbmc+IHJlc3Vs
dCA9IFJlc291cmNlVGltaW5nOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRSZXF1ZXN0VGltZSgu
Li4pCiAgICAgKiAgICAgLnNldFByb3h5U3RhcnQoLi4uKQogICAgICogICAgIC5zZXRQcm94eUVu
ZCguLi4pCiAgICAgKiAgICAgLnNldERuc1N0YXJ0KC4uLikKICAgICAqICAgICAuc2V0RG5zRW5k
KC4uLikKICAgICAqICAgICAuc2V0Q29ubmVjdFN0YXJ0KC4uLikKICAgICAqICAgICAuc2V0Q29u
bmVjdEVuZCguLi4pCiAgICAgKiAgICAgLnNldFNzbFN0YXJ0KC4uLikKICAgICAqICAgICAuc2V0
U3NsRW5kKC4uLikKICAgICAqICAgICAuc2V0U2VuZFN0YXJ0KC4uLikKICAgICAqICAgICAuc2V0
U2VuZEVuZCguLi4pCiAgICAgKiAgICAgLnNldFJlY2VpdmVIZWFkZXJzRW5kKC4uLik7CiAgICAg
Ki8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAg
IHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgUmVzb3VyY2VUaW1pbmco
KSkpOwogICAgfQp9OwoKLyogSFRUUCByZXF1ZXN0IGRhdGEuICovCmNsYXNzIFJlcXVlc3QgOiBw
dWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVs
ZHNTZXQgPSAwLAogICAgICAgIFVybFNldCA9IDEgPDwgMCwKICAgICAgICBNZXRob2RTZXQgPSAx
IDw8IDEsCiAgICAgICAgSGVhZGVyc1NldCA9IDEgPDwgMiwKICAgICAgICBBbGxGaWVsZHNTZXQg
PSAoVXJsU2V0IHwgTWV0aG9kU2V0IHwgSGVhZGVyc1NldCkKICAgIH07CgogICAgdGVtcGxhdGU8
aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFJlcXVlc3Q+IHB0cikKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0
cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFJlcXVlc3Q7CiAgICBwdWJsaWM6Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVcmxTZXQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVcmxTZXQp
LCBwcm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VXJsU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1ldGhvZFNldD4mIHNldE1ldGhv
ZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIE1ldGhvZFNldCksIHByb3BlcnR5X21ldGhvZF9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1ldGhvZCIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXRob2RTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgSGVhZGVyc1NldD4mIHNldEhlYWRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIEhlYWRlcnNTZXQpLCBwcm9wZXJ0eV9oZWFkZXJzX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE9iamVjdCgiaGVhZGVycyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxIZWFkZXJzU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3Ig
UmVmUHRyPFJlcXVlc3Q+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxSZXF1ZXN0Pio+KCZtX3Jlc3VsdCk7CiAg
ICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFJlcXVlc3Q+ICgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFJlcXVlc3Q+KCp0aGlzKTsKICAgICAgICB9CiAg
ICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8
UmVxdWVzdD4gcmVzdWx0ID0gUmVxdWVzdDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VXJsKC4u
LikKICAgICAqICAgICAuc2V0TWV0aG9kKC4uLikKICAgICAqICAgICAuc2V0SGVhZGVycyguLi4p
OwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsK
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFJlcXVlc3Qo
KSkpOwogICAgfQoKICAgIHZvaWQgc2V0UG9zdERhdGEoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
IHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInBvc3REYXRhIiwgdmFsdWUpOwogICAgfQp9OwoK
LyogSFRUUCByZXNwb25zZSBkYXRhLiAqLwpjbGFzcyBSZXNwb25zZSA6IHB1YmxpYyBJbnNwZWN0
b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAg
ICAgICAgVXJsU2V0ID0gMSA8PCAwLAogICAgICAgIFN0YXR1c1NldCA9IDEgPDwgMSwKICAgICAg
ICBTdGF0dXNUZXh0U2V0ID0gMSA8PCAyLAogICAgICAgIEhlYWRlcnNTZXQgPSAxIDw8IDMsCiAg
ICAgICAgTWltZVR5cGVTZXQgPSAxIDw8IDQsCiAgICAgICAgQ29ubmVjdGlvblJldXNlZFNldCA9
IDEgPDwgNSwKICAgICAgICBDb25uZWN0aW9uSWRTZXQgPSAxIDw8IDYsCiAgICAgICAgQWxsRmll
bGRzU2V0ID0gKFVybFNldCB8IFN0YXR1c1NldCB8IFN0YXR1c1RleHRTZXQgfCBIZWFkZXJzU2V0
IHwgTWltZVR5cGVTZXQgfCBDb25uZWN0aW9uUmV1c2VkU2V0IHwgQ29ubmVjdGlvbklkU2V0KQog
ICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHBy
aXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8
UmVzcG9uc2U+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAg
ICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFJl
c3BvbnNlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVXJsU2V0PiYgc2V0
VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgVXJsU2V0KSwgcHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFVybFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBTdGF0dXNTZXQ+JiBzZXRTdGF0dXMoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0YXR1c1NldCksIHByb3BlcnR5X3N0YXR1c19h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInN0YXR1cyIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdGF0dXNTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RhdHVzVGV4dFNldD4mIHNldFN0YXR1c1RleHQo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBTdGF0dXNUZXh0U2V0KSwgcHJvcGVydHlfc3RhdHVzVGV4dF9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0YXR1c1RleHQiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RhdHVzVGV4dFNldD4oKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBIZWFkZXJzU2V0PiYgc2V0SGVhZGVycyhQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgSGVhZGVyc1NldCksIHByb3BlcnR5X2hlYWRlcnNfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJoZWFkZXJzIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhlYWRlcnNTZXQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgTWltZVR5cGVTZXQ+JiBzZXRNaW1lVHlwZShjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IE1pbWVUeXBlU2V0KSwgcHJvcGVydHlfbWltZVR5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtaW1lVHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxNaW1lVHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBDb25uZWN0aW9uUmV1c2VkU2V0PiYgc2V0Q29ubmVjdGlvblJldXNlZChib29sIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvbm5l
Y3Rpb25SZXVzZWRTZXQpLCBwcm9wZXJ0eV9jb25uZWN0aW9uUmV1c2VkX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImNvbm5lY3Rpb25SZXVzZWQiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29ubmVjdGlvblJldXNlZFNldD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb25uZWN0aW9uSWRTZXQ+JiBzZXRD
b25uZWN0aW9uSWQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIENvbm5lY3Rpb25JZFNldCksIHByb3BlcnR5X2Nvbm5lY3Rpb25JZF9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNvbm5lY3Rpb25J
ZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb25uZWN0aW9uSWRTZXQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmVzcG9uc2U+JiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxSZXNwb25zZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0
b3IgUGFzc1JlZlB0cjxSZXNwb25zZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBS
ZWZQdHI8UmVzcG9uc2U+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UmVzcG9uc2U+IHJlc3VsdCA9IFJl
c3BvbnNlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRT
dGF0dXMoLi4uKQogICAgICogICAgIC5zZXRTdGF0dXNUZXh0KC4uLikKICAgICAqICAgICAuc2V0
SGVhZGVycyguLi4pCiAgICAgKiAgICAgLnNldE1pbWVUeXBlKC4uLikKICAgICAqICAgICAuc2V0
Q29ubmVjdGlvblJldXNlZCguLi4pCiAgICAgKiAgICAgLnNldENvbm5lY3Rpb25JZCguLi4pOwog
ICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFJlc3BvbnNlKCkp
KTsKICAgIH0KCiAgICB2b2lkIHNldEhlYWRlcnNUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJoZWFkZXJzVGV4dCIsIHZhbHVlKTsKICAgIH0K
CiAgICB2b2lkIHNldFJlcXVlc3RIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2
YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInJlcXVlc3RIZWFkZXJzIiwgdmFs
dWUpOwogICAgfQoKICAgIHZvaWQgc2V0UmVxdWVzdEhlYWRlcnNUZXh0KGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJyZXF1ZXN0SGVhZGVyc1RleHQi
LCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRGcm9tRGlza0NhY2hlKGJvb2wgdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0Qm9vbGVhbigiZnJvbURpc2tDYWNoZSIsIHZhbHVlKTsKICAg
IH0KCiAgICB2b2lkIHNldFRpbWluZygvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6
OlJlc291cmNlVGltaW5nPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAg
IHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInRpbWluZyIsIHZhbHVlKTsKICAgIH0KfTsKCi8q
IFdlYlNvY2tldCByZXF1ZXN0IGRhdGEuICovCmNsYXNzIFdlYlNvY2tldFJlcXVlc3QgOiBwdWJs
aWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNT
ZXQgPSAwLAogICAgICAgIFJlcXVlc3RLZXkzU2V0ID0gMSA8PCAwLAogICAgICAgIEhlYWRlcnNT
ZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFJlcXVlc3RLZXkzU2V0IHwgSGVh
ZGVyc1NldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRl
ciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0
OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQ
YXNzUmVmUHRyPFdlYlNvY2tldFJlcXVlc3Q+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9u
X2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAg
ICAgZnJpZW5kIGNsYXNzIFdlYlNvY2tldFJlcXVlc3Q7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBSZXF1ZXN0S2V5M1NldD4mIHNldFJlcXVlc3RLZXkzKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
UmVxdWVzdEtleTNTZXQpLCBwcm9wZXJ0eV9yZXF1ZXN0S2V5M19hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInJlcXVlc3RLZXkzIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFJlcXVlc3RLZXkzU2V0PigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IEhlYWRlcnNTZXQ+JiBzZXRIZWFkZXJzKFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBIZWFkZXJzU2V0KSwgcHJvcGVydHlfaGVhZGVyc19hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImhlYWRlcnMiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8SGVhZGVyc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFJlZlB0cjxXZWJTb2NrZXRSZXF1ZXN0PiYgKCkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8V2ViU29ja2V0
UmVxdWVzdD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1Jl
ZlB0cjxXZWJTb2NrZXRSZXF1ZXN0PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJl
ZlB0cjxXZWJTb2NrZXRSZXF1ZXN0PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgog
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFdlYlNvY2tldFJlcXVl
c3Q+IHJlc3VsdCA9IFdlYlNvY2tldFJlcXVlc3Q6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFJl
cXVlc3RLZXkzKC4uLikKICAgICAqICAgICAuc2V0SGVhZGVycyguLi4pOwogICAgICovCiAgICBz
dGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4g
QnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFdlYlNvY2tldFJlcXVlc3QoKSkpOwog
ICAgfQp9OwoKLyogV2ViU29ja2V0IHJlc3BvbnNlIGRhdGEuICovCmNsYXNzIFdlYlNvY2tldFJl
c3BvbnNlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBTdGF0dXNTZXQgPSAxIDw8IDAsCiAgICAgICAg
U3RhdHVzVGV4dFNldCA9IDEgPDwgMSwKICAgICAgICBIZWFkZXJzU2V0ID0gMSA8PCAyLAogICAg
ICAgIENoYWxsZW5nZVJlc3BvbnNlU2V0ID0gMSA8PCAzLAogICAgICAgIEFsbEZpZWxkc1NldCA9
IChTdGF0dXNTZXQgfCBTdGF0dXNUZXh0U2V0IHwgSGVhZGVyc1NldCB8IENoYWxsZW5nZVJlc3Bv
bnNlU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVy
IHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7
CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBh
c3NSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9u
X2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAg
ICAgZnJpZW5kIGNsYXNzIFdlYlNvY2tldFJlc3BvbnNlOwogICAgcHVibGljOgoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgU3RhdHVzU2V0PiYgc2V0U3RhdHVzKGRvdWJsZSB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdGF0dXNTZXQpLCBwcm9w
ZXJ0eV9zdGF0dXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVy
KCJzdGF0dXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RhdHVzU2V0
PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0YXR1c1RleHRTZXQ+JiBz
ZXRTdGF0dXNUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RhdHVzVGV4dFNldCksIHByb3BlcnR5X3N0YXR1c1Rl
eHRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdGF0dXNU
ZXh0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0YXR1c1RleHRTZXQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSGVhZGVyc1NldD4mIHNldEhl
YWRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhlYWRlcnNTZXQpLCBwcm9wZXJ0eV9oZWFk
ZXJzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiaGVhZGVy
cyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIZWFkZXJzU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENoYWxsZW5nZVJlc3BvbnNlU2V0PiYg
c2V0Q2hhbGxlbmdlUmVzcG9uc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDaGFsbGVuZ2VSZXNwb25zZVNldCksIHBy
b3BlcnR5X2NoYWxsZW5nZVJlc3BvbnNlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygiY2hhbGxlbmdlUmVzcG9uc2UiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8Q2hhbGxlbmdlUmVzcG9uc2VTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+JiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxXZWJT
b2NrZXRSZXNwb25zZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3Ig
UGFzc1JlZlB0cjxXZWJTb2NrZXRSZXNwb25zZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiBSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoK
ICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8V2ViU29j
a2V0UmVzcG9uc2U+IHJlc3VsdCA9IFdlYlNvY2tldFJlc3BvbnNlOjpjcmVhdGUoKQogICAgICog
ICAgIC5zZXRTdGF0dXMoLi4uKQogICAgICogICAgIC5zZXRTdGF0dXNUZXh0KC4uLikKICAgICAq
ICAgICAuc2V0SGVhZGVycyguLi4pCiAgICAgKiAgICAgLnNldENoYWxsZW5nZVJlc3BvbnNlKC4u
Lik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAg
ewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgV2ViU29j
a2V0UmVzcG9uc2UoKSkpOwogICAgfQp9OwoKLyogSW5mb3JtYXRpb24gYWJvdXQgdGhlIGNhY2hl
ZCByZXNvdXJjZS4gKi8KY2xhc3MgQ2FjaGVkUmVzb3VyY2UgOiBwdWJsaWMgSW5zcGVjdG9yT2Jq
ZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAg
IFVybFNldCA9IDEgPDwgMCwKICAgICAgICBUeXBlU2V0ID0gMSA8PCAxLAogICAgICAgIFJlc3Bv
bnNlU2V0ID0gMSA8PCAyLAogICAgICAgIEJvZHlTaXplU2V0ID0gMSA8PCAzLAogICAgICAgIEFs
bEZpZWxkc1NldCA9IChVcmxTZXQgfCBUeXBlU2V0IHwgUmVzcG9uc2VTZXQgfCBCb2R5U2l6ZVNl
dCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAg
ICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPENhY2hlZFJlc291cmNlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVu
ZCBjbGFzcyBDYWNoZWRSZXNvdXJjZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFVybFNldD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVybFNldCksIHByb3BlcnR5X3VybF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVcmxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZUJ1aWxkZXI6OlBhZ2U6OlJl
c291cmNlVHlwZTo6RW51bSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2
YWx1ZSkpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBU
eXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
VHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSZXNwb25zZVNl
dD4mIHNldFJlc3BvbnNlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVzcG9u
c2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJlc3BvbnNlU2V0KSwgcHJvcGVydHlfcmVz
cG9uc2VfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJyZXNw
b25zZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSZXNwb25zZVNldD4o
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCb2R5U2l6ZVNldD4mIHNldEJv
ZHlTaXplKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBCb2R5U2l6ZVNldCksIHByb3BlcnR5X2JvZHlTaXplX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiYm9keVNpemUiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8Qm9keVNpemVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBSZWZQdHI8Q2FjaGVkUmVzb3VyY2U+JiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3Jl
YWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDYWNoZWRS
ZXNvdXJjZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1Jl
ZlB0cjxDYWNoZWRSZXNvdXJjZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQ
dHI8Q2FjaGVkUmVzb3VyY2U+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q2FjaGVkUmVzb3VyY2U+IHJl
c3VsdCA9IENhY2hlZFJlc291cmNlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRVcmwoLi4uKQog
ICAgICogICAgIC5zZXRUeXBlKC4uLikKICAgICAqICAgICAuc2V0UmVzcG9uc2UoLi4uKQogICAg
ICogICAgIC5zZXRCb2R5U2l6ZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0Zp
ZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4oYWRvcHRSZWYobmV3IENhY2hlZFJlc291cmNlKCkpKTsKICAgIH0KfTsKCi8qIEluZm9ybWF0
aW9uIGFib3V0IHRoZSByZXF1ZXN0IGluaXRpYXRvci4gKi8KY2xhc3MgSW5pdGlhdG9yIDogcHVi
bGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5
IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgSW5pdGlhdG9yLgogICAgc3RydWN0IFR5cGUg
ewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgIFBhcnNlciA9IDM4LAogICAgICAgICAg
ICBTY3JpcHQgPSAzOSwKICAgICAgICAgICAgT3RoZXIgPSAyNSwKICAgICAgICB9OwogICAgfTsg
Ly8gc3RydWN0IFR5cGUKCiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAg
ICAgVHlwZVNldCA9IDEgPDwgMCwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVHlwZVNldCkKICAg
IH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2
YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0
ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPElu
aXRpYXRvcj4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgSW5p
dGlhdG9yOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNl
dFR5cGUoVHlwZTo6RW51bSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2
YWx1ZSkpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBU
eXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
VHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxJbml0aWF0b3I+
JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmll
bGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFJlZlB0cjxJbml0aWF0b3I+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8SW5pdGlhdG9yPiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuIFJlZlB0cjxJbml0aWF0b3I+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAg
IC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8SW5pdGlhdG9y
PiByZXN1bHQgPSBJbml0aWF0b3I6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKTsK
ICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBJbml0aWF0b3Io
KSkpOwogICAgfQoKICAgIHZvaWQgc2V0U3RhY2tUcmFjZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkNvbnNvbGU6OlN0YWNrVHJhY2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0QXJyYXkoInN0YWNrVHJhY2UiLCB2YWx1ZSk7CiAg
ICB9CgogICAgdm9pZCBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldExpbmVOdW1i
ZXIoZG91YmxlIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE51bWJlcigibGluZU51bWJl
ciIsIHZhbHVlKTsKICAgIH0KfTsKCn0gLy8gTmV0d29yawoKI2lmIEVOQUJMRShTUUxfREFUQUJB
U0UpCm5hbWVzcGFjZSBEYXRhYmFzZSB7Ci8qIERhdGFiYXNlIG9iamVjdC4gKi8KY2xhc3MgRGF0
YWJhc2UgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAg
ICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIElkU2V0ID0gMSA8PCAwLAogICAgICAgIERvbWFp
blNldCA9IDEgPDwgMSwKICAgICAgICBOYW1lU2V0ID0gMSA8PCAyLAogICAgICAgIFZlcnNpb25T
ZXQgPSAxIDw8IDMsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKElkU2V0IHwgRG9tYWluU2V0IHwg
TmFtZVNldCB8IFZlcnNpb25TZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAg
IGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxEYXRhYmFzZT4gcHRyKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9p
bl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0K
ICAgICAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2U7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBJZFNldD4mIHNldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSWRTZXQpLCBwcm9wZXJ0eV9pZF9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImlkIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElkU2V0PigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IERvbWFpblNldD4mIHNldERvbWFpbihjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERvbWFp
blNldCksIHByb3BlcnR5X2RvbWFpbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoImRvbWFpbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxEb21haW5TZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTmFtZVNl
dD4mIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOYW1lU2V0KSwgcHJvcGVydHlfbmFtZV9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8TmFtZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBWZXJzaW9uU2V0PiYgc2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZlcnNpb25T
ZXQpLCBwcm9wZXJ0eV92ZXJzaW9uX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygidmVyc2lvbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxWZXJzaW9uU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPERhdGFi
YXNlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFs
bEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxSZWZQdHI8RGF0YWJhc2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9Cgog
ICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8RGF0YWJhc2U+ICgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gUmVmUHRyPERhdGFiYXNlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAg
ICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPERhdGFiYXNl
PiByZXN1bHQgPSBEYXRhYmFzZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0SWQoLi4uKQogICAg
ICogICAgIC5zZXREb21haW4oLi4uKQogICAgICogICAgIC5zZXROYW1lKC4uLikKICAgICAqICAg
ICAuc2V0VmVyc2lvbiguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRv
cHRSZWYobmV3IERhdGFiYXNlKCkpKTsKICAgIH0KfTsKCn0gLy8gRGF0YWJhc2UKCiNlbmRpZiAv
LyBFTkFCTEUoU1FMX0RBVEFCQVNFKQojaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCm5hbWVz
cGFjZSBJbmRleGVkREIgewovKiBPcmlnaW4gd2l0aCBkYXRhYmFzZSBuYW1lcyBhbmQgZnJhbWUg
aWRzLiAqLwpjbGFzcyBGcmFtZVdpdGhEYXRhYmFzZU5hbWVzIDogcHVibGljIEluc3BlY3Rvck9i
amVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RhdGFiYXNl
TmFtZXMnIHdoaWxlIGdlbmVyYXRpbmcgRnJhbWVXaXRoRGF0YWJhc2VOYW1lcy4KICAgIGNsYXNz
IERhdGFiYXNlTmFtZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAg
ICAgICBEYXRhYmFzZU5hbWVzKCkgeyB9CgogICAgcHVibGljOgogICAgICAgIHZvaWQgYWRkSXRl
bShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+cHVzaFN0
cmluZyh2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhYmFz
ZU5hbWVzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YWJh
c2VOYW1lcygpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRz
U2V0ID0gMCwKICAgICAgICBGcmFtZUlkU2V0ID0gMSA8PCAwLAogICAgICAgIFNlY3VyaXR5T3Jp
Z2luU2V0ID0gMSA8PCAxLAogICAgICAgIERhdGFiYXNlTmFtZXNTZXQgPSAxIDw8IDIsCiAgICAg
ICAgQWxsRmllbGRzU2V0ID0gKEZyYW1lSWRTZXQgfCBTZWN1cml0eU9yaWdpblNldCB8IERhdGFi
YXNlTmFtZXNTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1
aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jl
c3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXIoUGFzc1JlZlB0cjxGcmFtZVdpdGhEYXRhYmFzZU5hbWVzPiBwdHIpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAg
ICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBGcmFtZVdpdGhEYXRhYmFzZU5hbWVzOwogICAgcHVi
bGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRnJhbWVJZFNldD4mIHNldEZyYW1lSWQoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBGcmFtZUlkU2V0KSwgcHJvcGVydHlfZnJhbWVJZF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImZyYW1lSWQiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8RnJhbWVJZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBTZWN1cml0eU9yaWdpblNldD4mIHNldFNlY3VyaXR5T3JpZ2luKGNvbnN0IFN0
cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgU2VjdXJpdHlPcmlnaW5TZXQpLCBwcm9wZXJ0eV9zZWN1cml0eU9yaWdpbl9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInNlY3VyaXR5T3JpZ2luIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNlY3VyaXR5T3JpZ2luU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERhdGFiYXNlTmFtZXNTZXQ+JiBzZXRE
YXRhYmFzZU5hbWVzKC8qUGFzc1JlZlB0cjxEYXRhYmFzZU5hbWVzPiovIFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIERhdGFiYXNlTmFtZXNTZXQpLCBwcm9wZXJ0eV9kYXRhYmFzZU5hbWVzX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJkYXRhYmFzZU5hbWVzIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERhdGFiYXNlTmFtZXNTZXQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8RnJhbWVXaXRoRGF0YWJhc2VOYW1l
cz4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxG
aWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmUHRyPEZyYW1lV2l0aERhdGFiYXNlTmFtZXM+Kj4oJm1fcmVzdWx0KTsK
ICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8RnJhbWVXaXRoRGF0YWJhc2VO
YW1lcz4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RnJhbWVXaXRoRGF0
YWJhc2VOYW1lcz4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxGcmFtZVdpdGhEYXRhYmFzZU5hbWVzPiBy
ZXN1bHQgPSBGcmFtZVdpdGhEYXRhYmFzZU5hbWVzOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRG
cmFtZUlkKC4uLikKICAgICAqICAgICAuc2V0U2VjdXJpdHlPcmlnaW4oLi4uKQogICAgICogICAg
IC5zZXREYXRhYmFzZU5hbWVzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmll
bGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0
PihhZG9wdFJlZihuZXcgRnJhbWVXaXRoRGF0YWJhc2VOYW1lcygpKSk7CiAgICB9Cn07Cgp9IC8v
IEluZGV4ZWREQgoKI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpuYW1lc3BhY2Ug
RE9NU3RvcmFnZSB7Ci8qIERPTSBTdG9yYWdlIGVudHJ5LiAqLwpjbGFzcyBFbnRyeSA6IHB1Ymxp
YyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCiAgICAgICAgSG9zdFNldCA9IDEgPDwgMCwKICAgICAgICBJc0xvY2FsU3RvcmFnZVNl
dCA9IDEgPDwgMSwKICAgICAgICBJZFNldCA9IDEgPDwgMiwKICAgICAgICBBbGxGaWVsZHNTZXQg
PSAoSG9zdFNldCB8IElzTG9jYWxTdG9yYWdlU2V0IHwgSWRTZXQpCiAgICB9OwoKICAgIHRlbXBs
YXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNU
RVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxFbnRyeT4gcHRyKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0g
cHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgRW50cnk7CiAgICBwdWJsaWM6Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBIb3N0U2V0PiYgc2V0SG9zdChjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhvc3RT
ZXQpLCBwcm9wZXJ0eV9ob3N0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygiaG9zdCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIb3N0
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IElzTG9jYWxTdG9yYWdl
U2V0PiYgc2V0SXNMb2NhbFN0b3JhZ2UoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJc0xvY2FsU3RvcmFnZVNldCksIHByb3BlcnR5X2lz
TG9jYWxTdG9yYWdlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xl
YW4oImlzTG9jYWxTdG9yYWdlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PElzTG9jYWxTdG9yYWdlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IElkU2V0PiYgc2V0SWQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIElkU2V0KSwgcHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJpZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxJZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxFbnRyeT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEVudHJ5Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoK
ICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEVudHJ5PiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuIFJlZlB0cjxFbnRyeT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoK
ICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxFbnRyeT4gcmVzdWx0
ID0gRW50cnk6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldEhvc3QoLi4uKQogICAgICogICAgIC5z
ZXRJc0xvY2FsU3RvcmFnZSguLi4pCiAgICAgKiAgICAgLnNldElkKC4uLik7CiAgICAgKi8KICAg
IHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVy
biBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgRW50cnkoKSkpOwogICAgfQp9OwoK
fSAvLyBET01TdG9yYWdlCgpuYW1lc3BhY2UgQXBwbGljYXRpb25DYWNoZSB7Ci8qIERldGFpbGVk
IGFwcGxpY2F0aW9uIGNhY2hlIHJlc291cmNlIGluZm9ybWF0aW9uLiAqLwpjbGFzcyBBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2UgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAg
ZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFVybFNldCA9IDEgPDwgMCwK
ICAgICAgICBTaXplU2V0ID0gMSA8PCAxLAogICAgICAgIFR5cGVTZXQgPSAxIDw8IDIsCiAgICAg
ICAgQWxsRmllbGRzU2V0ID0gKFVybFNldCB8IFNpemVTZXQgfCBUeXBlU2V0KQogICAgfTsKCiAg
ICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8QXBwbGljYXRp
b25DYWNoZVJlc291cmNlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBj
bGFzcyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBVcmxTZXQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVcmxTZXQpLCBwcm9wZXJ0eV91
cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1cmwiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VXJsU2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNpemVTZXQ+JiBzZXRTaXplKGludCB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTaXplU2V0KSwgcHJv
cGVydHlfc2l6ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIo
InNpemUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U2l6ZVNldD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFR5cGVTZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxUeXBlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1Jl
ZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+ICgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4oKnRoaXMpOwogICAgICAgIH0K
ICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0
cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHJlc3VsdCA9IEFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAqICAgICAuc2V0U2l6
ZSguLi4pCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UoKSkpOwogICAg
fQp9OwoKLyogRGV0YWlsZWQgYXBwbGljYXRpb24gY2FjaGUgaW5mb3JtYXRpb24uICovCmNsYXNz
IEFwcGxpY2F0aW9uQ2FjaGUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAg
Ly8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAncmVzb3VyY2VzJyB3aGlsZSBnZW5lcmF0aW5n
IEFwcGxpY2F0aW9uQ2FjaGUuCiAgICBjbGFzcyBSZXNvdXJjZXMgOiBwdWJsaWMgSW5zcGVjdG9y
QXJyYXkgewogICAgcHJpdmF0ZToKICAgICAgICBSZXNvdXJjZXMoKSB7IH0KCiAgICBwdWJsaWM6
CiAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXBwbGljYXRp
b25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFs
dWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVzb3VyY2VzPiBjcmVh
dGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVzb3VyY2VzKCkpOwogICAg
ICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAg
IE1hbmlmZXN0VVJMU2V0ID0gMSA8PCAwLAogICAgICAgIFNpemVTZXQgPSAxIDw8IDEsCiAgICAg
ICAgQ3JlYXRpb25UaW1lU2V0ID0gMSA8PCAyLAogICAgICAgIFVwZGF0ZVRpbWVTZXQgPSAxIDw8
IDMsCiAgICAgICAgUmVzb3VyY2VzU2V0ID0gMSA8PCA0LAogICAgICAgIEFsbEZpZWxkc1NldCA9
IChNYW5pZmVzdFVSTFNldCB8IFNpemVTZXQgfCBDcmVhdGlvblRpbWVTZXQgfCBVcGRhdGVUaW1l
U2V0IHwgUmVzb3VyY2VzU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBj
bGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwg
U1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyKFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gcHRyKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3Jl
YXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAg
ICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQXBwbGljYXRpb25DYWNoZTsKICAgIHB1YmxpYzoK
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1hbmlmZXN0VVJMU2V0PiYgc2V0TWFuaWZlc3RVUkwo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBNYW5pZmVzdFVSTFNldCksIHByb3BlcnR5X21hbmlmZXN0VVJMX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWFuaWZlc3RVUkwiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWFuaWZlc3RVUkxTZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU2l6ZVNldD4mIHNldFNpemUoZG91YmxlIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNpemVT
ZXQpLCBwcm9wZXJ0eV9zaXplX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dE51bWJlcigic2l6ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTaXpl
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENyZWF0aW9uVGltZVNl
dD4mIHNldENyZWF0aW9uVGltZShkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ3JlYXRpb25UaW1lU2V0KSwgcHJvcGVydHlfY3JlYXRp
b25UaW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiY3Jl
YXRpb25UaW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENyZWF0aW9u
VGltZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVcGRhdGVUaW1l
U2V0PiYgc2V0VXBkYXRlVGltZShkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgVXBkYXRlVGltZVNldCksIHByb3BlcnR5X3VwZGF0ZVRp
bWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJ1cGRhdGVU
aW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVwZGF0ZVRpbWVTZXQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUmVzb3VyY2VzU2V0PiYgc2V0
UmVzb3VyY2VzKC8qUGFzc1JlZlB0cjxSZXNvdXJjZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgUmVzb3VyY2VzU2V0KSwgcHJvcGVydHlfcmVzb3VyY2VzX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJyZXNvdXJjZXMiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8UmVzb3VyY2VzU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5
KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxBcHBsaWNhdGlv
bkNhY2hlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVm
UHRyPEFwcGxpY2F0aW9uQ2FjaGU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVm
UHRyPEFwcGxpY2F0aW9uQ2FjaGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8QXBwbGljYXRpb25DYWNo
ZT4gcmVzdWx0ID0gQXBwbGljYXRpb25DYWNoZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0TWFu
aWZlc3RVUkwoLi4uKQogICAgICogICAgIC5zZXRTaXplKC4uLikKICAgICAqICAgICAuc2V0Q3Jl
YXRpb25UaW1lKC4uLikKICAgICAqICAgICAuc2V0VXBkYXRlVGltZSguLi4pCiAgICAgKiAgICAg
LnNldFJlc291cmNlcyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRv
cHRSZWYobmV3IEFwcGxpY2F0aW9uQ2FjaGUoKSkpOwogICAgfQp9OwoKLyogRnJhbWUgaWRlbnRp
ZmllciAtIG1hbmlmZXN0IFVSTCBwYWlyLiAqLwpjbGFzcyBGcmFtZVdpdGhNYW5pZmVzdCA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxk
c1NldCA9IDAsCiAgICAgICAgRnJhbWVJZFNldCA9IDEgPDwgMCwKICAgICAgICBNYW5pZmVzdFVS
TFNldCA9IDEgPDwgMSwKICAgICAgICBTdGF0dXNTZXQgPSAxIDw8IDIsCiAgICAgICAgQWxsRmll
bGRzU2V0ID0gKEZyYW1lSWRTZXQgfCBNYW5pZmVzdFVSTFNldCB8IFN0YXR1c1NldCkKICAgIH07
CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRl
OgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1w
bGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAg
IHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEZyYW1l
V2l0aE1hbmlmZXN0PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
ICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFz
cyBGcmFtZVdpdGhNYW5pZmVzdDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IEZyYW1lSWRTZXQ+JiBzZXRGcmFtZUlkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRnJhbWVJZFNldCksIHByb3BlcnR5
X2ZyYW1lSWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJm
cmFtZUlkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEZyYW1lSWRTZXQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWFuaWZlc3RVUkxTZXQ+JiBz
ZXRNYW5pZmVzdFVSTChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1hbmlmZXN0VVJMU2V0KSwgcHJvcGVydHlfbWFuaWZl
c3RVUkxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtYW5p
ZmVzdFVSTCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNYW5pZmVzdFVS
TFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdGF0dXNTZXQ+JiBz
ZXRTdGF0dXMoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFN0YXR1c1NldCksIHByb3BlcnR5X3N0YXR1c19hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInN0YXR1cyIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxTdGF0dXNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBSZWZQdHI8RnJhbWVXaXRoTWFuaWZlc3Q+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxGcmFtZVdpdGhNYW5p
ZmVzdD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0
cjxGcmFtZVdpdGhNYW5pZmVzdD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQ
dHI8RnJhbWVXaXRoTWFuaWZlc3Q+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8RnJhbWVXaXRoTWFuaWZl
c3Q+IHJlc3VsdCA9IEZyYW1lV2l0aE1hbmlmZXN0OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRG
cmFtZUlkKC4uLikKICAgICAqICAgICAuc2V0TWFuaWZlc3RVUkwoLi4uKQogICAgICogICAgIC5z
ZXRTdGF0dXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNy
ZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVm
KG5ldyBGcmFtZVdpdGhNYW5pZmVzdCgpKSk7CiAgICB9Cn07Cgp9IC8vIEFwcGxpY2F0aW9uQ2Fj
aGUKCm5hbWVzcGFjZSBET00gewovKiBET00gaW50ZXJhY3Rpb24gaXMgaW1wbGVtZW50ZWQgaW4g
dGVybXMgb2YgbWlycm9yIG9iamVjdHMgdGhhdCByZXByZXNlbnQgdGhlIGFjdHVhbCBET00gbm9k
ZXMuIERPTU5vZGUgaXMgYSBiYXNlIG5vZGUgbWlycm9yIHR5cGUuICovCmNsYXNzIE5vZGUgOiBw
dWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVy
dHkgbmFtZSAnY2hpbGRyZW4nIHdoaWxlIGdlbmVyYXRpbmcgTm9kZS4KICAgIGNsYXNzIENoaWxk
cmVuIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAgQ2hpbGRy
ZW4oKSB7IH0KCiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6RE9NOjpOb2RlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAg
IH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hpbGRyZW4+IGNyZWF0ZSgpIHsKICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaGlsZHJlbigpKTsKICAgICAgICB9CiAgICB9OwoK
ICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2F0dHJpYnV0ZXMnIHdoaWxlIGdlbmVy
YXRpbmcgTm9kZS4KICAgIGNsYXNzIEF0dHJpYnV0ZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkg
ewogICAgcHJpdmF0ZToKICAgICAgICBBdHRyaWJ1dGVzKCkgeyB9CgogICAgcHVibGljOgogICAg
ICAgIHZvaWQgYWRkSXRlbShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgdGhpcy0+cHVzaFN0cmluZyh2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxBdHRyaWJ1dGVzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQXR0cmlidXRlcygpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAg
IE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBOb2RlSWRTZXQgPSAxIDw8IDAsCiAgICAgICAgTm9k
ZVR5cGVTZXQgPSAxIDw8IDEsCiAgICAgICAgTm9kZU5hbWVTZXQgPSAxIDw8IDIsCiAgICAgICAg
TG9jYWxOYW1lU2V0ID0gMSA8PCAzLAogICAgICAgIE5vZGVWYWx1ZVNldCA9IDEgPDwgNCwKICAg
ICAgICBBbGxGaWVsZHNTZXQgPSAoTm9kZUlkU2V0IHwgTm9kZVR5cGVTZXQgfCBOb2RlTmFtZVNl
dCB8IExvY2FsTmFtZVNldCB8IE5vZGVWYWx1ZVNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50
IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPE5vZGU+IHB0cikKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAg
ICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIE5vZGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBOb2RlSWRTZXQ+JiBzZXROb2RlSWQoaW50IHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vZGVJZFNldCksIHByb3BlcnR5
X25vZGVJZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm5v
ZGVJZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb2RlSWRTZXQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm9kZVR5cGVTZXQ+JiBzZXROb2Rl
VHlwZShpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgTm9kZVR5cGVTZXQpLCBwcm9wZXJ0eV9ub2RlVHlwZV9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm5vZGVUeXBlIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPE5vZGVUeXBlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE5vZGVOYW1lU2V0PiYgc2V0Tm9kZU5hbWUoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb2RlTmFt
ZVNldCksIHByb3BlcnR5X25vZGVOYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygibm9kZU5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8Tm9kZU5hbWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
TG9jYWxOYW1lU2V0PiYgc2V0TG9jYWxOYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTG9jYWxOYW1lU2V0KSwgcHJv
cGVydHlfbG9jYWxOYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygibG9jYWxOYW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExv
Y2FsTmFtZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb2RlVmFs
dWVTZXQ+JiBzZXROb2RlVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb2RlVmFsdWVTZXQpLCBwcm9wZXJ0eV9u
b2RlVmFsdWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJu
b2RlVmFsdWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm9kZVZhbHVl
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPE5vZGU+JiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxOb2RlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQ
YXNzUmVmUHRyPE5vZGU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPE5v
ZGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29u
c3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gTm9kZTo6Y3JlYXRlKCkKICAg
ICAqICAgICAuc2V0Tm9kZUlkKC4uLikKICAgICAqICAgICAuc2V0Tm9kZVR5cGUoLi4uKQogICAg
ICogICAgIC5zZXROb2RlTmFtZSguLi4pCiAgICAgKiAgICAgLnNldExvY2FsTmFtZSguLi4pCiAg
ICAgKiAgICAgLnNldE5vZGVWYWx1ZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxO
b0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oYWRvcHRSZWYobmV3IE5vZGUoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0Q2hpbGROb2Rl
Q291bnQoaW50IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE51bWJlcigiY2hpbGROb2Rl
Q291bnQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRDaGlsZHJlbigvKlBhc3NSZWZQdHI8
Q2hpbGRyZW4+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICB7CiAgICAg
ICAgdGhpcy0+c2V0QXJyYXkoImNoaWxkcmVuIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0
QXR0cmlidXRlcygvKlBhc3NSZWZQdHI8QXR0cmlidXRlcz4qLyBQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRBcnJheSgiYXR0cmlidXRlcyIs
IHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldERvY3VtZW50VVJMKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJkb2N1bWVudFVSTCIsIHZhbHVlKTsK
ICAgIH0KCiAgICB2b2lkIHNldFB1YmxpY0lkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAg
ICAgICAgdGhpcy0+c2V0U3RyaW5nKCJwdWJsaWNJZCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lk
IHNldFN5c3RlbUlkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0
U3RyaW5nKCJzeXN0ZW1JZCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldEludGVybmFsU3Vi
c2V0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJp
bnRlcm5hbFN1YnNldCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFhtbFZlcnNpb24oY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInhtbFZlcnNp
b24iLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwogICAgfQoKICAg
IHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRTdHJpbmcoInZhbHVlIiwgdmFsdWUpOwogICAgfQogICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0
OjpzZXRWYWx1ZTsKCn07CgovKiBET00gaW50ZXJhY3Rpb24gaXMgaW1wbGVtZW50ZWQgaW4gdGVy
bXMgb2YgbWlycm9yIG9iamVjdHMgdGhhdCByZXByZXNlbnQgdGhlIGFjdHVhbCBET00gbm9kZXMu
IERPTU5vZGUgaXMgYSBiYXNlIG5vZGUgbWlycm9yIHR5cGUuICovCmNsYXNzIEV2ZW50TGlzdGVu
ZXIgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAg
Tm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFR5cGVTZXQgPSAxIDw8IDAsCiAgICAgICAgVXNlQ2Fw
dHVyZVNldCA9IDEgPDwgMSwKICAgICAgICBJc0F0dHJpYnV0ZVNldCA9IDEgPDwgMiwKICAgICAg
ICBOb2RlSWRTZXQgPSAxIDw8IDMsCiAgICAgICAgSGFuZGxlckJvZHlTZXQgPSAxIDw8IDQsCiAg
ICAgICAgQWxsRmllbGRzU2V0ID0gKFR5cGVTZXQgfCBVc2VDYXB0dXJlU2V0IHwgSXNBdHRyaWJ1
dGVTZXQgfCBOb2RlSWRTZXQgfCBIYW5kbGVyQm9keVNldCkKICAgIH07CgogICAgdGVtcGxhdGU8
aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IHB0cikK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3Vs
dCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEV2ZW50TGlzdGVuZXI7CiAg
ICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFR5cGVTZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxUeXBlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVz
ZUNhcHR1cmVTZXQ+JiBzZXRVc2VDYXB0dXJlKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVXNlQ2FwdHVyZVNldCksIHByb3BlcnR5X3Vz
ZUNhcHR1cmVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigi
dXNlQ2FwdHVyZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVc2VDYXB0
dXJlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IElzQXR0cmlidXRl
U2V0PiYgc2V0SXNBdHRyaWJ1dGUoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJc0F0dHJpYnV0ZVNldCksIHByb3BlcnR5X2lzQXR0cmli
dXRlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImlzQXR0
cmlidXRlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElzQXR0cmlidXRl
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vZGVJZFNldD4mIHNl
dE5vZGVJZChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgTm9kZUlkU2V0KSwgcHJvcGVydHlfbm9kZUlkX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigibm9kZUlkIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPE5vZGVJZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBIYW5kbGVyQm9keVNldD4mIHNldEhhbmRsZXJCb2R5KGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSGFuZGxl
ckJvZHlTZXQpLCBwcm9wZXJ0eV9oYW5kbGVyQm9keV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoImhhbmRsZXJCb2R5IiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPEhhbmRsZXJCb2R5U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUmVmUHRyPEV2ZW50TGlzdGVuZXI+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxFdmVudExpc3RlbmVy
Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEV2ZW50
TGlzdGVuZXI+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gcmVzdWx0ID0gRXZl
bnRMaXN0ZW5lcjo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VHlwZSguLi4pCiAgICAgKiAgICAg
LnNldFVzZUNhcHR1cmUoLi4uKQogICAgICogICAgIC5zZXRJc0F0dHJpYnV0ZSguLi4pCiAgICAg
KiAgICAgLnNldE5vZGVJZCguLi4pCiAgICAgKiAgICAgLnNldEhhbmRsZXJCb2R5KC4uLik7CiAg
ICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAg
ICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgRXZlbnRMaXN0ZW5l
cigpKSk7CiAgICB9CgogICAgdm9pZCBzZXRMb2NhdGlvbigvKlBhc3NSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJsb2NhdGlvbiIsIHZhbHVlKTsKICAg
IH0KfTsKCi8qIEEgc3RydWN0dXJlIGhvbGRpbmcgYW4gUkdCQSBjb2xvci4gKi8KLy8gVHlwZSBv
cmlnaW5hbGx5IHdhcyBuYW1lZCAnUkdCQScuCmNsYXNzIFJnYmEgOiBwdWJsaWMgSW5zcGVjdG9y
T2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAg
ICAgIFJTZXQgPSAxIDw8IDAsCiAgICAgICAgR1NldCA9IDEgPDwgMSwKICAgICAgICBCU2V0ID0g
MSA8PCAyLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChSU2V0IHwgR1NldCB8IEJTZXQpCiAgICB9
OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0
ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAg
ICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwg
U1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZ2Jh
PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAg
bV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBSZ2JhOwogICAg
cHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUlNldD4mIHNldFIoaW50IHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJTZXQpLCBwcm9w
ZXJ0eV9yX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiciIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSU2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEdTZXQ+JiBzZXRHKGludCB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBHU2V0KSwgcHJvcGVydHlfZ19h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImciLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8R1NldD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBCU2V0PiYgc2V0QihpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQlNldCksIHByb3BlcnR5X2JfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJiIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPEJTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBSZWZQdHI8UmdiYT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJnYmE+Kj4oJm1fcmVzdWx0KTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8UmdiYT4gKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiBSZWZQdHI8UmdiYT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAg
LyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxSZ2JhPiByZXN1
bHQgPSBSZ2JhOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRSKC4uLikKICAgICAqICAgICAuc2V0
RyguLi4pCiAgICAgKiAgICAgLnNldEIoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KGFkb3B0UmVmKG5ldyBSZ2JhKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldEEoZG91Ymxl
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE51bWJlcigiYSIsIHZhbHVlKTsKICAgIH0K
fTsKCi8qIENvbmZpZ3VyYXRpb24gZGF0YSBmb3IgdGhlIGhpZ2hsaWdodGluZyBvZiBwYWdlIGVs
ZW1lbnRzLiAqLwpjbGFzcyBIaWdobGlnaHRDb25maWcgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0
IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIEFs
bEZpZWxkc1NldCA9IDAKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3Mg
QnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1f
cmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcihQYXNzUmVmUHRyPEhpZ2hsaWdodENvbmZpZz4gcHRyKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9p
bl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0K
ICAgICAgICBmcmllbmQgY2xhc3MgSGlnaGxpZ2h0Q29uZmlnOwogICAgcHVibGljOgoKICAgICAg
ICBvcGVyYXRvciBSZWZQdHI8SGlnaGxpZ2h0Q29uZmlnPiYgKCkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8SGlnaGxp
Z2h0Q29uZmlnPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNz
UmVmUHRyPEhpZ2hsaWdodENvbmZpZz4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBS
ZWZQdHI8SGlnaGxpZ2h0Q29uZmlnPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgog
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEhpZ2hsaWdodENvbmZp
Zz4gcmVzdWx0ID0gSGlnaGxpZ2h0Q29uZmlnOjpjcmVhdGUoKTsKICAgICAqLwogICAgc3RhdGlj
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBIaWdobGlnaHRDb25maWcoKSkpOwogICAgfQoK
ICAgIHZvaWQgc2V0U2hvd0luZm8oYm9vbCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRC
b29sZWFuKCJzaG93SW5mbyIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldENvbnRlbnRDb2xv
cigvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6UmdiYT4qLyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJjb250ZW50
Q29sb3IiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRQYWRkaW5nQ29sb3IoLypQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpET006OlJnYmE+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgicGFkZGluZ0NvbG9yIiwgdmFs
dWUpOwogICAgfQoKICAgIHZvaWQgc2V0Qm9yZGVyQ29sb3IoLypQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpET006OlJnYmE+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAg
ewogICAgICAgIHRoaXMtPnNldE9iamVjdCgiYm9yZGVyQ29sb3IiLCB2YWx1ZSk7CiAgICB9Cgog
ICAgdm9pZCBzZXRNYXJnaW5Db2xvcigvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6Umdi
YT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhp
cy0+c2V0T2JqZWN0KCJtYXJnaW5Db2xvciIsIHZhbHVlKTsKICAgIH0KfTsKCn0gLy8gRE9NCgpu
YW1lc3BhY2UgQ1NTIHsKLyogVGhpcyBvYmplY3QgaWRlbnRpZmllcyBhIENTUyBzdHlsZSBpbiBh
IHVuaXF1ZSB3YXkuICovCmNsYXNzIENTU1N0eWxlSWQgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0
IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFN0
eWxlU2hlZXRJZFNldCA9IDEgPDwgMCwKICAgICAgICBPcmRpbmFsU2V0ID0gMSA8PCAxLAogICAg
ICAgIEFsbEZpZWxkc1NldCA9IChTdHlsZVNoZWV0SWRTZXQgfCBPcmRpbmFsU2V0KQogICAgfTsK
CiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6
CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBs
YXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNU
RVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q1NTU3R5
bGVJZD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAg
ICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTU3R5
bGVJZDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0eWxlU2hlZXRJZFNl
dD4mIHNldFN0eWxlU2hlZXRJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0eWxlU2hlZXRJZFNldCksIHByb3BlcnR5
X3N0eWxlU2hlZXRJZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoInN0eWxlU2hlZXRJZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxT
dHlsZVNoZWV0SWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT3Jk
aW5hbFNldD4mIHNldE9yZGluYWwoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIE9yZGluYWxTZXQpLCBwcm9wZXJ0eV9vcmRpbmFsX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigib3JkaW5hbCIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPcmRpbmFsU2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1N0eWxlSWQ+JiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NT
dHlsZUlkPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVm
UHRyPENTU1N0eWxlSWQ+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENT
U1N0eWxlSWQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTU3R5bGVJZD4gcmVzdWx0ID0gQ1NTU3R5
bGVJZDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3R5bGVTaGVldElkKC4uLikKICAgICAqICAg
ICAuc2V0T3JkaW5hbCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRv
cHRSZWYobmV3IENTU1N0eWxlSWQoKSkpOwogICAgfQp9OwoKLyogVGhpcyBvYmplY3QgaWRlbnRp
ZmllcyBhIENTUyBydWxlIGluIGEgdW5pcXVlIHdheS4gKi8KY2xhc3MgQ1NTUnVsZUlkIDogcHVi
bGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRz
U2V0ID0gMCwKICAgICAgICBTdHlsZVNoZWV0SWRTZXQgPSAxIDw8IDAsCiAgICAgICAgT3JkaW5h
bFNldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU3R5bGVTaGVldElkU2V0IHwg
T3JkaW5hbFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVp
bGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVz
dWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBj
YXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cihQYXNzUmVmUHRyPENTU1J1bGVJZD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBm
cmllbmQgY2xhc3MgQ1NTUnVsZUlkOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgU3R5bGVTaGVldElkU2V0PiYgc2V0U3R5bGVTaGVldElkKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3R5bGVTaGVl
dElkU2V0KSwgcHJvcGVydHlfc3R5bGVTaGVldElkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygic3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFN0eWxlU2hlZXRJZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBPcmRpbmFsU2V0PiYgc2V0T3JkaW5hbChpbnQgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT3JkaW5hbFNldCksIHByb3Bl
cnR5X29yZGluYWxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVy
KCJvcmRpbmFsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9yZGluYWxT
ZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTUnVsZUlkPiYgKCkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1Nl
dCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxSZWZQdHI8Q1NTUnVsZUlkPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBQYXNzUmVmUHRyPENTU1J1bGVJZD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiBSZWZQdHI8Q1NTUnVsZUlkPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgog
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU1J1bGVJZD4gcmVz
dWx0ID0gQ1NTUnVsZUlkOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRTdHlsZVNoZWV0SWQoLi4u
KQogICAgICogICAgIC5zZXRPcmRpbmFsKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVy
PE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihhZG9wdFJlZihuZXcgQ1NTUnVsZUlkKCkpKTsKICAgIH0KfTsKCi8qIENTUyBydWxl
IGNvbGxlY3Rpb24gZm9yIGEgc2luZ2xlIHBzZXVkbyBzdHlsZS4gKi8KY2xhc3MgUHNldWRvSWRS
dWxlcyA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRl
ciBwcm9wZXJ0eSBuYW1lICdydWxlcycgd2hpbGUgZ2VuZXJhdGluZyBQc2V1ZG9JZFJ1bGVzLgog
ICAgY2xhc3MgUnVsZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAg
ICAgICBSdWxlcygpIHsgfQoKICAgIHB1YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1
ZSk7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSdWxlcz4gY3JlYXRlKCkg
ewogICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJ1bGVzKCkpOwogICAgICAgIH0KICAg
IH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFBzZXVkb0lk
U2V0ID0gMSA8PCAwLAogICAgICAgIFJ1bGVzU2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxk
c1NldCA9IChQc2V1ZG9JZFNldCB8IFJ1bGVzU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWls
ZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8UHNldWRvSWRSdWxlcz4gcHRyKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0g
cHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgUHNldWRvSWRSdWxlczsKICAgIHB1
YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBzZXVkb0lkU2V0PiYgc2V0UHNldWRvSWQo
aW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFBzZXVkb0lkU2V0KSwgcHJvcGVydHlfcHNldWRvSWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJwc2V1ZG9JZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxQc2V1ZG9JZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBSdWxlc1NldD4mIHNldFJ1bGVzKC8qUGFzc1JlZlB0cjxSdWxlcz4qLyBQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBSdWxlc1NldCksIHByb3BlcnR5X3J1bGVzX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJydWxlcyIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxSdWxlc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJh
dG9yIFJlZlB0cjxQc2V1ZG9JZFJ1bGVzPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UHNldWRvSWRSdWxlcz4q
PigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxQc2V1
ZG9JZFJ1bGVzPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxQc2V1ZG9J
ZFJ1bGVzPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFBzZXVkb0lkUnVsZXM+IHJlc3VsdCA9IFBzZXVk
b0lkUnVsZXM6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFBzZXVkb0lkKC4uLikKICAgICAqICAg
ICAuc2V0UnVsZXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0
UmVmKG5ldyBQc2V1ZG9JZFJ1bGVzKCkpKTsKICAgIH0KfTsKCi8qIENTUyBydWxlIGNvbGxlY3Rp
b24gZm9yIGEgc2luZ2xlIHBzZXVkbyBzdHlsZS4gKi8KY2xhc3MgSW5oZXJpdGVkU3R5bGVFbnRy
eSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBw
cm9wZXJ0eSBuYW1lICdtYXRjaGVkQ1NTUnVsZXMnIHdoaWxlIGdlbmVyYXRpbmcgSW5oZXJpdGVk
U3R5bGVFbnRyeS4KICAgIGNsYXNzIE1hdGNoZWRDU1NSdWxlcyA6IHB1YmxpYyBJbnNwZWN0b3JB
cnJheSB7CiAgICBwcml2YXRlOgogICAgICAgIE1hdGNoZWRDU1NSdWxlcygpIHsgfQoKICAgIHB1
YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6
OkNTU1J1bGU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxNYXRjaGVkQ1NTUnVsZXM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBNYXRjaGVkQ1NTUnVsZXMoKSk7CiAgICAgICAgfQogICAgfTsK
CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgTWF0Y2hlZENTU1J1
bGVzU2V0ID0gMSA8PCAwLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChNYXRjaGVkQ1NTUnVsZXNT
ZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewog
ICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAg
ICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRl
KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVy
PFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1Jl
ZlB0cjxJbmhlcml0ZWRTdHlsZUVudHJ5PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9p
bml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAg
IGZyaWVuZCBjbGFzcyBJbmhlcml0ZWRTdHlsZUVudHJ5OwogICAgcHVibGljOgoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgTWF0Y2hlZENTU1J1bGVzU2V0PiYgc2V0TWF0Y2hlZENTU1J1bGVzKC8q
UGFzc1JlZlB0cjxNYXRjaGVkQ1NTUnVsZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4g
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWF0
Y2hlZENTU1J1bGVzU2V0KSwgcHJvcGVydHlfbWF0Y2hlZENTU1J1bGVzX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJtYXRjaGVkQ1NTUnVsZXMiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWF0Y2hlZENTU1J1bGVzU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEluaGVyaXRlZFN0eWxlRW50cnk+JiAoKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0
LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFJlZlB0cjxJbmhlcml0ZWRTdHlsZUVudHJ5Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoK
ICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEluaGVyaXRlZFN0eWxlRW50cnk+ICgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEluaGVyaXRlZFN0eWxlRW50cnk+KCp0aGlz
KTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6
CiAgICAgKiBSZWZQdHI8SW5oZXJpdGVkU3R5bGVFbnRyeT4gcmVzdWx0ID0gSW5oZXJpdGVkU3R5
bGVFbnRyeTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0TWF0Y2hlZENTU1J1bGVzKC4uLik7CiAg
ICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAg
ICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgSW5oZXJpdGVkU3R5
bGVFbnRyeSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRJbmxpbmVTdHlsZSgvKlBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgiaW5saW5lU3R5bGUiLCB2YWx1
ZSk7CiAgICB9Cn07CgovKiBDU1Mgc3R5bGUgaW5mb3JtYXRpb24gZm9yIGEgRE9NIHN0eWxlIGF0
dHJpYnV0ZS4gKi8KY2xhc3MgQ1NTU3R5bGVBdHRyaWJ1dGUgOiBwdWJsaWMgSW5zcGVjdG9yT2Jq
ZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAg
IE5hbWVTZXQgPSAxIDw8IDAsCiAgICAgICAgU3R5bGVTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxs
RmllbGRzU2V0ID0gKE5hbWVTZXQgfCBTdHlsZVNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50
IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENTU1N0eWxlQXR0cmlidXRlPiBwdHIp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1Nl
dCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1
bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDU1NTdHlsZUF0dHJpYnV0
ZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5hbWVTZXQ+JiBzZXROYW1l
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgTmFtZVNldCksIHByb3BlcnR5X25hbWVfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPE5hbWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgU3R5bGVTZXQ+JiBzZXRTdHlsZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NT
U3R5bGU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0eWxlU2V0KSwgcHJvcGVydHlfc3R5
bGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJzdHlsZSIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHlsZVNldD4oKTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NTdHlsZUF0dHJpYnV0ZT4mICgpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmUHRyPENTU1N0eWxlQXR0cmlidXRlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1N0eWxlQXR0cmlidXRlPiAoKQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuIFJlZlB0cjxDU1NTdHlsZUF0dHJpYnV0ZT4oKnRoaXMpOwogICAgICAg
IH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJl
ZlB0cjxDU1NTdHlsZUF0dHJpYnV0ZT4gcmVzdWx0ID0gQ1NTU3R5bGVBdHRyaWJ1dGU6OmNyZWF0
ZSgpCiAgICAgKiAgICAgLnNldE5hbWUoLi4uKQogICAgICogICAgIC5zZXRTdHlsZSguLi4pOwog
ICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IENTU1N0eWxlQXR0
cmlidXRlKCkpKTsKICAgIH0KfTsKCi8qIENTUyBzdHlsZXNoZWV0IG1ldGFpbmZvcm1hdGlvbi4g
Ki8KY2xhc3MgQ1NTU3R5bGVTaGVldEhlYWRlciA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qgewpw
dWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgU3R5bGVT
aGVldElkU2V0ID0gMSA8PCAwLAogICAgICAgIFNvdXJjZVVSTFNldCA9IDEgPDwgMSwKICAgICAg
ICBUaXRsZVNldCA9IDEgPDwgMiwKICAgICAgICBEaXNhYmxlZFNldCA9IDEgPDwgMywKICAgICAg
ICBBbGxGaWVsZHNTZXQgPSAoU3R5bGVTaGVldElkU2V0IHwgU291cmNlVVJMU2V0IHwgVGl0bGVT
ZXQgfCBEaXNhYmxlZFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xh
c3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcihQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+IHB0cikKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAg
ICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxlU2hlZXRIZWFkZXI7CiAgICBwdWJs
aWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHlsZVNoZWV0SWRTZXQ+JiBzZXRTdHlsZVNo
ZWV0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBTdHlsZVNoZWV0SWRTZXQpLCBwcm9wZXJ0eV9zdHlsZVNoZWV0SWRf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdHlsZVNoZWV0
SWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3R5bGVTaGVldElkU2V0
PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNvdXJjZVVSTFNldD4mIHNl
dFNvdXJjZVVSTChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFNvdXJjZVVSTFNldCksIHByb3BlcnR5X3NvdXJjZVVSTF9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInNvdXJjZVVSTCIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTb3VyY2VVUkxTZXQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGl0bGVTZXQ+JiBzZXRUaXRsZShjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFRpdGxlU2V0KSwgcHJvcGVydHlfdGl0bGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0aXRsZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxUaXRsZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBEaXNhYmxlZFNldD4mIHNldERpc2FibGVkKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRGlzYWJsZWRTZXQpLCBwcm9wZXJ0eV9kaXNh
YmxlZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJkaXNh
YmxlZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxEaXNhYmxlZFNldD4o
KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NTdHlsZVNoZWV0SGVhZGVy
PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8Q1NTU3R5bGVTaGVldEhlYWRlcj4qPigmbV9yZXN1bHQpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0SGVhZGVyPiAo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDU1NTdHlsZVNoZWV0SGVhZGVy
PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgogICAgICogUmVmUHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+IHJlc3VsdCA9IENTU1N0
eWxlU2hlZXRIZWFkZXI6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFN0eWxlU2hlZXRJZCguLi4p
CiAgICAgKiAgICAgLnNldFNvdXJjZVVSTCguLi4pCiAgICAgKiAgICAgLnNldFRpdGxlKC4uLikK
ICAgICAqICAgICAuc2V0RGlzYWJsZWQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KGFkb3B0UmVmKG5ldyBDU1NTdHlsZVNoZWV0SGVhZGVyKCkpKTsKICAgIH0KfTsKCi8q
IENTUyBzdHlsZXNoZWV0IGNvbnRlbnRzLiAqLwpjbGFzcyBDU1NTdHlsZVNoZWV0Qm9keSA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0
eSBuYW1lICdydWxlcycgd2hpbGUgZ2VuZXJhdGluZyBDU1NTdHlsZVNoZWV0Qm9keS4KICAgIGNs
YXNzIFJ1bGVzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAg
UnVsZXMoKSB7IH0KCiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwog
ICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UnVsZXM+IGNyZWF0ZSgpIHsKICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSdWxlcygpKTsKICAgICAgICB9CiAgICB9OwoK
ICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBTdHlsZVNoZWV0SWRT
ZXQgPSAxIDw8IDAsCiAgICAgICAgUnVsZXNTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRz
U2V0ID0gKFN0eWxlU2hlZXRJZFNldCB8IFJ1bGVzU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxp
bnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+IHB0
cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRz
U2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jl
c3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxlU2hlZXRC
b2R5OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3R5bGVTaGVldElkU2V0
PiYgc2V0U3R5bGVTaGVldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3R5bGVTaGVldElkU2V0KSwgcHJvcGVydHlf
c3R5bGVTaGVldElkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
Zygic3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0
eWxlU2hlZXRJZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSdWxl
c1NldD4mIHNldFJ1bGVzKC8qUGFzc1JlZlB0cjxSdWxlcz4qLyBQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBSdWxlc1NldCksIHByb3BlcnR5X3J1bGVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldEFycmF5KCJydWxlcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxSdWxlc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxD
U1NTdHlsZVNoZWV0Qm9keT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENTU1N0eWxlU2hlZXRCb2R5Pio+KCZt
X3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1N0eWxl
U2hlZXRCb2R5PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDU1NTdHls
ZVNoZWV0Qm9keT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDU1NTdHlsZVNoZWV0Qm9keT4gcmVzdWx0
ID0gQ1NTU3R5bGVTaGVldEJvZHk6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFN0eWxlU2hlZXRJ
ZCguLi4pCiAgICAgKiAgICAgLnNldFJ1bGVzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5v
RmllbGRzU2V0PihhZG9wdFJlZihuZXcgQ1NTU3R5bGVTaGVldEJvZHkoKSkpOwogICAgfQoKICAg
IHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dFN0cmluZygidGV4dCIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIENTUyBydWxlIHJlcHJlc2VudGF0
aW9uLiAqLwpjbGFzcyBDU1NSdWxlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoK
ICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ29yaWdpbicgd2hpbGUgZ2VuZXJhdGlu
ZyBDU1NSdWxlLgogICAgc3RydWN0IE9yaWdpbiB7CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAg
ICAgICAgVXNlciA9IDQwLAogICAgICAgICAgICBVc2VyX2FnZW50ID0gNDEsCiAgICAgICAgICAg
IEluc3BlY3RvciA9IDQyLAogICAgICAgICAgICBSZWd1bGFyID0gNDMsCiAgICAgICAgfTsKICAg
IH07IC8vIHN0cnVjdCBPcmlnaW4KCiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdt
ZWRpYScgd2hpbGUgZ2VuZXJhdGluZyBDU1NSdWxlLgogICAgY2xhc3MgTWVkaWEgOiBwdWJsaWMg
SW5zcGVjdG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAgICAgICBNZWRpYSgpIHsgfQoKICAgIHB1
YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6
OkNTU01lZGlhPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8TWVkaWE+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBNZWRpYSgpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAg
IE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBTZWxlY3RvclRleHRTZXQgPSAxIDw8IDAsCiAgICAg
ICAgU291cmNlTGluZVNldCA9IDEgPDwgMSwKICAgICAgICBPcmlnaW5TZXQgPSAxIDw8IDIsCiAg
ICAgICAgU3R5bGVTZXQgPSAxIDw8IDMsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFNlbGVjdG9y
VGV4dFNldCB8IFNvdXJjZUxpbmVTZXQgfCBPcmlnaW5TZXQgfCBTdHlsZVNldCkKICAgIH07Cgog
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgog
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0
ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENTU1J1bGU+
IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmll
bGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBt
X3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU1J1bGU7CiAg
ICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTZWxlY3RvclRleHRTZXQ+JiBzZXRT
ZWxlY3RvclRleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTZWxlY3RvclRleHRTZXQpLCBwcm9wZXJ0eV9zZWxlY3Rv
clRleHRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzZWxl
Y3RvclRleHQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U2VsZWN0b3JU
ZXh0U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNvdXJjZUxpbmVT
ZXQ+JiBzZXRTb3VyY2VMaW5lKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBTb3VyY2VMaW5lU2V0KSwgcHJvcGVydHlfc291cmNlTGluZV9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNvdXJjZUxpbmUi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U291cmNlTGluZVNldD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPcmlnaW5TZXQ+JiBzZXRPcmlnaW4o
T3JpZ2luOjpFbnVtIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIE9yaWdpblNldCksIHByb3BlcnR5X29yaWdpbl9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm9yaWdpbiIsIGdldEVudW1Db25zdGFudFZhbHVl
KHZhbHVlKSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T3JpZ2luU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE9yaWdpblNldD4mIHNldE9yaWdpbihjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE9yaWdpblNldCksIHByb3BlcnR5X29yaWdpbl9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm9yaWdpbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxPcmlnaW5TZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgU3R5bGVTZXQ+JiBzZXRTdHlsZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6
Q1NTU3R5bGU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0eWxlU2V0KSwgcHJvcGVydHlf
c3R5bGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJzdHls
ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHlsZVNldD4oKTsKICAg
ICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NSdWxlPiYgKCkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8
Q1NTUnVsZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1Jl
ZlB0cjxDU1NSdWxlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDU1NS
dWxlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNv
bnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU1J1bGU+IHJlc3VsdCA9IENTU1J1bGU6OmNyZWF0
ZSgpCiAgICAgKiAgICAgLnNldFNlbGVjdG9yVGV4dCguLi4pCiAgICAgKiAgICAgLnNldFNvdXJj
ZUxpbmUoLi4uKQogICAgICogICAgIC5zZXRPcmlnaW4oLi4uKQogICAgICogICAgIC5zZXRTdHls
ZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkK
ICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IENT
U1J1bGUoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0UnVsZUlkKC8qUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6Q1NTOjpDU1NSdWxlSWQ+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVl
KQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgicnVsZUlkIiwgdmFsdWUpOwogICAgfQoK
ICAgIHZvaWQgc2V0U291cmNlVVJMKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAg
dGhpcy0+c2V0U3RyaW5nKCJzb3VyY2VVUkwiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRT
ZWxlY3RvclJhbmdlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTb3VyY2VSYW5nZT4q
LyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0T2JqZWN0KCJzZWxlY3RvclJhbmdlIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0TWVk
aWEoLypQYXNzUmVmUHRyPE1lZGlhPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVl
KQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJtZWRpYSIsIHZhbHVlKTsKICAgIH0KfTsK
Ci8qIFRleHQgcmFuZ2Ugd2l0aGluIGEgcmVzb3VyY2UuICovCmNsYXNzIFNvdXJjZVJhbmdlIDog
cHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmll
bGRzU2V0ID0gMCwKICAgICAgICBTdGFydFNldCA9IDEgPDwgMCwKICAgICAgICBFbmRTZXQgPSAx
IDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFN0YXJ0U2V0IHwgRW5kU2V0KQogICAgfTsK
CiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6
CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBs
YXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNU
RVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8U291cmNl
UmFuZ2U+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAg
ICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFNvdXJj
ZVJhbmdlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RhcnRTZXQ+JiBz
ZXRTdGFydChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgU3RhcnRTZXQpLCBwcm9wZXJ0eV9zdGFydF9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInN0YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFN0YXJ0U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IEVuZFNldD4mIHNldEVuZChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgRW5kU2V0KSwgcHJvcGVydHlfZW5kX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiZW5kIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPEVuZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9y
IFJlZlB0cjxTb3VyY2VSYW5nZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNvdXJjZVJhbmdlPio+KCZtX3Jl
c3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFNvdXJjZVJhbmdl
PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxTb3VyY2VSYW5nZT4oKnRo
aXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKICAgICAqIFJlZlB0cjxTb3VyY2VSYW5nZT4gcmVzdWx0ID0gU291cmNlUmFuZ2U6OmNyZWF0
ZSgpCiAgICAgKiAgICAgLnNldFN0YXJ0KC4uLikKICAgICAqICAgICAuc2V0RW5kKC4uLik7CiAg
ICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAg
ICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgU291cmNlUmFuZ2Uo
KSkpOwogICAgfQp9OwoKY2xhc3MgQ1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5IDogcHVibGljIElu
c3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKICAgICAgICBOYW1lU2V0ID0gMSA8PCAwLAogICAgICAgIFZhbHVlU2V0ID0gMSA8PCAxLAog
ICAgICAgIEFsbEZpZWxkc1NldCA9IChOYW1lU2V0IHwgVmFsdWVTZXQpCiAgICB9OwoKICAgIHRl
bXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50
IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NDb21wdXRlZFN0
eWxlUHJvcGVydHk+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwog
ICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNz
IENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IE5hbWVTZXQ+JiBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTmFtZVNldCksIHByb3BlcnR5X25h
bWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJuYW1lIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5hbWVTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVTZXQ+JiBzZXRWYWx1ZShjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFZhbHVlU2V0KSwgcHJvcGVydHlfdmFsdWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxWYWx1ZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1ND
b21wdXRlZFN0eWxlUHJvcGVydHk+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlUHJv
cGVydHk+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQ
dHI8Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+KCp0aGlzKTsKICAgICAgICB9CiAg
ICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8
Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiByZXN1bHQgPSBDU1NDb21wdXRlZFN0eWxlUHJvcGVy
dHk6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE5hbWUoLi4uKQogICAgICogICAgIC5zZXRWYWx1
ZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkK
ICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IENT
U0NvbXB1dGVkU3R5bGVQcm9wZXJ0eSgpKSk7CiAgICB9Cn07CgovKiBDU1Mgc3R5bGUgcmVwcmVz
ZW50YXRpb24uICovCmNsYXNzIENTU1N0eWxlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1
YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2Nzc1Byb3BlcnRpZXMnIHdo
aWxlIGdlbmVyYXRpbmcgQ1NTU3R5bGUuCiAgICBjbGFzcyBDc3NQcm9wZXJ0aWVzIDogcHVibGlj
IEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAgQ3NzUHJvcGVydGllcygpIHsg
fQoKICAgIHB1YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpDU1M6OkNTU1Byb3BlcnR5PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAg
IH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3NzUHJvcGVydGllcz4gY3JlYXRlKCkgewog
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENzc1Byb3BlcnRpZXMoKSk7CiAgICAgICAg
fQogICAgfTsKCiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdzaG9ydGhhbmRFbnRy
aWVzJyB3aGlsZSBnZW5lcmF0aW5nIENTU1N0eWxlLgogICAgY2xhc3MgU2hvcnRoYW5kRW50cmll
cyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICBwcml2YXRlOgogICAgICAgIFNob3J0aGFu
ZEVudHJpZXMoKSB7IH0KCiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBhZGRJdGVtKFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1
c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hv
cnRoYW5kRW50cmllcz4gY3JlYXRlKCkgewogICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFNob3J0aGFuZEVudHJpZXMoKSk7CiAgICAgICAgfQogICAgfTsKCiAgICBlbnVtIHsKICAgICAg
ICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgQ3NzUHJvcGVydGllc1NldCA9IDEgPDwgMCwKICAg
ICAgICBTaG9ydGhhbmRFbnRyaWVzU2V0ID0gMSA8PCAxLAogICAgICAgIFdpZHRoU2V0ID0gMSA8
PCAyLAogICAgICAgIEhlaWdodFNldCA9IDEgPDwgMywKICAgICAgICBBbGxGaWVsZHNTZXQgPSAo
Q3NzUHJvcGVydGllc1NldCB8IFNob3J0aGFuZEVudHJpZXNTZXQgfCBXaWR0aFNldCB8IEhlaWdo
dFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7
CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoK
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNz
UmVmUHRyPENTU1N0eWxlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBj
bGFzcyBDU1NTdHlsZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENzc1By
b3BlcnRpZXNTZXQ+JiBzZXRDc3NQcm9wZXJ0aWVzKC8qUGFzc1JlZlB0cjxDc3NQcm9wZXJ0aWVz
PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENzc1Byb3BlcnRpZXNTZXQpLCBwcm9wZXJ0eV9j
c3NQcm9wZXJ0aWVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5
KCJjc3NQcm9wZXJ0aWVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENz
c1Byb3BlcnRpZXNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU2hv
cnRoYW5kRW50cmllc1NldD4mIHNldFNob3J0aGFuZEVudHJpZXMoLypQYXNzUmVmUHRyPFNob3J0
aGFuZEVudHJpZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU2hvcnRoYW5kRW50cmllc1Nl
dCksIHByb3BlcnR5X3Nob3J0aGFuZEVudHJpZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0QXJyYXkoInNob3J0aGFuZEVudHJpZXMiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8U2hvcnRoYW5kRW50cmllc1NldD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBXaWR0aFNldD4mIHNldFdpZHRoKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgV2lkdGhT
ZXQpLCBwcm9wZXJ0eV93aWR0aF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoIndpZHRoIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFdp
ZHRoU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEhlaWdodFNldD4m
IHNldEhlaWdodChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIEhlaWdodFNldCksIHByb3BlcnR5X2hlaWdodF9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImhlaWdodCIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIZWlnaHRTZXQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTU3R5bGU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5
KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NTdHlsZT4q
PigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NT
dHlsZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NTU3R5bGU+KCp0
aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CiAgICAgKiBSZWZQdHI8Q1NTU3R5bGU+IHJlc3VsdCA9IENTU1N0eWxlOjpjcmVhdGUoKQog
ICAgICogICAgIC5zZXRDc3NQcm9wZXJ0aWVzKC4uLikKICAgICAqICAgICAuc2V0U2hvcnRoYW5k
RW50cmllcyguLi4pCiAgICAgKiAgICAgLnNldFdpZHRoKC4uLikKICAgICAqICAgICAuc2V0SGVp
Z2h0KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUo
KQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcg
Q1NTU3R5bGUoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0U3R5bGVJZCgvKlBhc3NSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGVJZD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
dmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJzdHlsZUlkIiwgdmFsdWUpOwog
ICAgfQoKICAgIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAg
ICAgIHRoaXMtPnNldFN0cmluZygiY3NzVGV4dCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNl
dFJhbmdlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTb3VyY2VSYW5nZT4qLyBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2Jq
ZWN0KCJyYW5nZSIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIENTUyBzdHlsZSBlZmZlY3RpdmUgdmlz
dWFsIGRpbWVuc2lvbnMgYW5kIHNvdXJjZSBvZmZzZXRzLiAqLwpjbGFzcyBDU1NQcm9wZXJ0eSA6
IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9w
ZXJ0eSBuYW1lICdzdGF0dXMnIHdoaWxlIGdlbmVyYXRpbmcgQ1NTUHJvcGVydHkuCiAgICBzdHJ1
Y3QgU3RhdHVzIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBBY3RpdmUgPSA0NCwK
ICAgICAgICAgICAgSW5hY3RpdmUgPSA0NSwKICAgICAgICAgICAgRGlzYWJsZWQgPSA0NiwKICAg
ICAgICAgICAgU3R5bGUgPSA0NywKICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0IFN0YXR1cwoK
ICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBOYW1lU2V0ID0gMSA8
PCAwLAogICAgICAgIFZhbHVlU2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChO
YW1lU2V0IHwgVmFsdWVTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNs
YXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NQcm9wZXJ0eT4gcHRyKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9p
bl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0K
ICAgICAgICBmcmllbmQgY2xhc3MgQ1NTUHJvcGVydHk7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBOYW1lU2V0PiYgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5hbWVTZXQpLCBwcm9w
ZXJ0eV9uYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
bmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOYW1lU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlU2V0PiYgc2V0VmFsdWUoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBWYWx1ZVNldCksIHByb3BlcnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygidmFsdWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8VmFsdWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQ
dHI8Q1NTUHJvcGVydHk+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NQcm9wZXJ0eT4qPigmbV9yZXN1bHQp
OwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NQcm9wZXJ0eT4gKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NTUHJvcGVydHk+KCp0aGlzKTsK
ICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAg
ICAgKiBSZWZQdHI8Q1NTUHJvcGVydHk+IHJlc3VsdCA9IENTU1Byb3BlcnR5OjpjcmVhdGUoKQog
ICAgICogICAgIC5zZXROYW1lKC4uLikKICAgICAqICAgICAuc2V0VmFsdWUoLi4uKTsKICAgICAq
LwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBDU1NQcm9wZXJ0eSgpKSk7
CiAgICB9CgogICAgdm9pZCBzZXRQcmlvcml0eShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewog
ICAgICAgIHRoaXMtPnNldFN0cmluZygicHJpb3JpdHkiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9p
ZCBzZXRJbXBsaWNpdChib29sIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4o
ImltcGxpY2l0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygidGV4dCIsIHZhbHVlKTsKICAg
IH0KCiAgICB2b2lkIHNldFBhcnNlZE9rKGJvb2wgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0Qm9vbGVhbigicGFyc2VkT2siLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTdGF0dXMo
U3RhdHVzOjpFbnVtIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic3RhdHVz
IiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgIH0KCiAgICB2b2lkIHNldFN0YXR1
cyhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic3Rh
dHVzIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U2hvcnRoYW5kTmFtZShjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIs
IHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFJhbmdlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRl
cjo6Q1NTOjpTb3VyY2VSYW5nZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUp
CiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJyYW5nZSIsIHZhbHVlKTsKICAgIH0KfTsK
Ci8qIENTUyBtZWRpYSBxdWVyeSBkZXNjcmlwdG9yLiAqLwpjbGFzcyBDU1NNZWRpYSA6IHB1Ymxp
YyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBu
YW1lICdzb3VyY2UnIHdoaWxlIGdlbmVyYXRpbmcgQ1NTTWVkaWEuCiAgICBzdHJ1Y3QgU291cmNl
IHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBNZWRpYVJ1bGUgPSA0OCwKICAgICAg
ICAgICAgSW1wb3J0UnVsZSA9IDQ5LAogICAgICAgICAgICBTdHlsZXNoZWV0ID0gNTAsCiAgICAg
ICAgfTsKICAgIH07IC8vIHN0cnVjdCBTb3VyY2UKCiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxk
c1NldCA9IDAsCiAgICAgICAgVGV4dFNldCA9IDEgPDwgMCwKICAgICAgICBBbGxGaWVsZHNTZXQg
PSAoVGV4dFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVp
bGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVz
dWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBj
YXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cihQYXNzUmVmUHRyPENTU01lZGlhPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZy
aWVuZCBjbGFzcyBDU1NNZWRpYTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFRleHRTZXQ+JiBzZXRUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVGV4dFNldCksIHByb3BlcnR5X3RleHRfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0ZXh0IiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRleHRTZXQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTTWVkaWE+JiAoKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5
KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NNZWRpYT4q
PigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NN
ZWRpYT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NTTWVkaWE+KCp0
aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CiAgICAgKiBSZWZQdHI8Q1NTTWVkaWE+IHJlc3VsdCA9IENTU01lZGlhOjpjcmVhdGUoKQog
ICAgICogICAgIC5zZXRUZXh0KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmll
bGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0
PihhZG9wdFJlZihuZXcgQ1NTTWVkaWEoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0U291cmNlKFNv
dXJjZTo6RW51bSB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInNvdXJjZSIs
IGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICB9CgogICAgdm9pZCBzZXRTb3VyY2Uo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInNvdXJj
ZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFNvdXJjZVVSTChjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic291cmNlVVJMIiwgdmFsdWUpOwog
ICAgfQoKICAgIHZvaWQgc2V0U291cmNlTGluZShpbnQgdmFsdWUpCiAgICB7CiAgICAgICAgdGhp
cy0+c2V0TnVtYmVyKCJzb3VyY2VMaW5lIiwgdmFsdWUpOwogICAgfQp9OwoKLyogQ1NTIHNlbGVj
dG9yIHByb2ZpbGUgZW50cnkuICovCmNsYXNzIFNlbGVjdG9yUHJvZmlsZUVudHJ5IDogcHVibGlj
IEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKICAgICAgICBTZWxlY3RvclNldCA9IDEgPDwgMCwKICAgICAgICBVcmxTZXQgPSAxIDw8
IDEsCiAgICAgICAgTGluZU51bWJlclNldCA9IDEgPDwgMiwKICAgICAgICBUaW1lU2V0ID0gMSA8
PCAzLAogICAgICAgIEhpdENvdW50U2V0ID0gMSA8PCA0LAogICAgICAgIE1hdGNoQ291bnRTZXQg
PSAxIDw8IDUsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFNlbGVjdG9yU2V0IHwgVXJsU2V0IHwg
TGluZU51bWJlclNldCB8IFRpbWVTZXQgfCBIaXRDb3VudFNldCB8IE1hdGNoQ291bnRTZXQpCiAg
ICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJp
dmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAg
dGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRF
IHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxT
ZWxlY3RvclByb2ZpbGVFbnRyeT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmll
bmQgY2xhc3MgU2VsZWN0b3JQcm9maWxlRW50cnk7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBTZWxlY3RvclNldD4mIHNldFNlbGVjdG9yKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU2VsZWN0b3JT
ZXQpLCBwcm9wZXJ0eV9zZWxlY3Rvcl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoInNlbGVjdG9yIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFNlbGVjdG9yU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVy
bFNldD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVybFNldCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVcmxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgTGluZU51bWJlclNldD4mIHNldExpbmVOdW1iZXIoaW50IHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExpbmVOdW1iZXJTZXQp
LCBwcm9wZXJ0eV9saW5lTnVtYmVyX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE51bWJlcigibGluZU51bWJlciIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxMaW5lTnVtYmVyU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFRpbWVTZXQ+JiBzZXRUaW1lKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUaW1lU2V0KSwgcHJvcGVydHlfdGltZV9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInRpbWUiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGltZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBIaXRDb3VudFNldD4mIHNldEhpdENvdW50KGludCB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIaXRDb3VudFNldCksIHBy
b3BlcnR5X2hpdENvdW50X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51
bWJlcigiaGl0Q291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SGl0
Q291bnRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWF0Y2hDb3Vu
dFNldD4mIHNldE1hdGNoQ291bnQoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIE1hdGNoQ291bnRTZXQpLCBwcm9wZXJ0eV9tYXRjaENvdW50
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigibWF0Y2hDb3Vu
dCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNYXRjaENvdW50U2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFNlbGVjdG9yUHJvZmlsZUVudHJ5
PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8U2VsZWN0b3JQcm9maWxlRW50cnk+Kj4oJm1fcmVzdWx0KTsKICAg
ICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8U2VsZWN0b3JQcm9maWxlRW50cnk+
ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFNlbGVjdG9yUHJvZmlsZUVu
dHJ5PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNv
bnN0cnVjdG9yOgogICAgICogUmVmUHRyPFNlbGVjdG9yUHJvZmlsZUVudHJ5PiByZXN1bHQgPSBT
ZWxlY3RvclByb2ZpbGVFbnRyeTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U2VsZWN0b3IoLi4u
KQogICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRMaW5lTnVtYmVyKC4uLikK
ICAgICAqICAgICAuc2V0VGltZSguLi4pCiAgICAgKiAgICAgLnNldEhpdENvdW50KC4uLikKICAg
ICAqICAgICAuc2V0TWF0Y2hDb3VudCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxO
b0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oYWRvcHRSZWYobmV3IFNlbGVjdG9yUHJvZmlsZUVudHJ5KCkpKTsKICAgIH0KfTsKCmNs
YXNzIFNlbGVjdG9yUHJvZmlsZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAg
ICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkYXRhJyB3aGlsZSBnZW5lcmF0aW5nIFNl
bGVjdG9yUHJvZmlsZS4KICAgIGNsYXNzIERhdGEgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewog
ICAgcHJpdmF0ZToKICAgICAgICBEYXRhKCkgeyB9CgogICAgcHVibGljOgogICAgICAgIHZvaWQg
YWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50
cnk+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxEYXRhPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgRGF0YSgpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRz
U2V0ID0gMCwKICAgICAgICBUb3RhbFRpbWVTZXQgPSAxIDw8IDAsCiAgICAgICAgRGF0YVNldCA9
IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVG90YWxUaW1lU2V0IHwgRGF0YVNldCkK
ICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBw
cml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAg
ICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQog
ICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRy
PFNlbGVjdG9yUHJvZmlsZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0
ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQg
Y2xhc3MgU2VsZWN0b3JQcm9maWxlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgVG90YWxUaW1lU2V0PiYgc2V0VG90YWxUaW1lKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUb3RhbFRpbWVTZXQpLCBwcm9wZXJ0
eV90b3RhbFRpbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVy
KCJ0b3RhbFRpbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VG90YWxU
aW1lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERhdGFTZXQ+JiBz
ZXREYXRhKC8qUGFzc1JlZlB0cjxEYXRhPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERhdGFT
ZXQpLCBwcm9wZXJ0eV9kYXRhX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dEFycmF5KCJkYXRhIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERhdGFT
ZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8U2VsZWN0b3JQcm9maWxl
PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8U2VsZWN0b3JQcm9maWxlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAg
fQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFNlbGVjdG9yUHJvZmlsZT4gKCkKICAgICAg
ICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8U2VsZWN0b3JQcm9maWxlPigqdGhpcyk7CiAg
ICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAg
ICogUmVmUHRyPFNlbGVjdG9yUHJvZmlsZT4gcmVzdWx0ID0gU2VsZWN0b3JQcm9maWxlOjpjcmVh
dGUoKQogICAgICogICAgIC5zZXRUb3RhbFRpbWUoLi4uKQogICAgICogICAgIC5zZXREYXRhKC4u
Lik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAg
ewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgU2VsZWN0
b3JQcm9maWxlKCkpKTsKICAgIH0KfTsKCn0gLy8gQ1NTCgpuYW1lc3BhY2UgVGltZWxpbmUgewov
KiBUaW1lbGluZSByZWNvcmQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlY29yZGVk
IGFjdGl2aXR5LiAqLwpjbGFzcyBUaW1lbGluZUV2ZW50IDogcHVibGljIEluc3BlY3Rvck9iamVj
dCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2NoaWxkcmVuJyB3
aGlsZSBnZW5lcmF0aW5nIFRpbWVsaW5lRXZlbnQuCiAgICBjbGFzcyBDaGlsZHJlbiA6IHB1Ymxp
YyBJbnNwZWN0b3JBcnJheSB7CiAgICBwcml2YXRlOgogICAgICAgIENoaWxkcmVuKCkgeyB9Cgog
ICAgcHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAg
ICAgIH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hpbGRyZW4+IGNyZWF0ZSgpIHsKICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaGlsZHJlbigpKTsKICAgICAgICB9CiAgICB9
OwoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBUeXBlU2V0ID0g
MSA8PCAwLAogICAgICAgIERhdGFTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0g
KFR5cGVTZXQgfCBEYXRhU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBj
bGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwg
U1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyKFBhc3NSZWZQdHI8VGltZWxpbmVFdmVudD4gcHRyKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRl
ZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAg
IH0KICAgICAgICBmcmllbmQgY2xhc3MgVGltZWxpbmVFdmVudDsKICAgIHB1YmxpYzoKCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNldCks
IHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRGF0YVNldD4mIHNldERhdGEo
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIERhdGFTZXQpLCBwcm9wZXJ0eV9kYXRhX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiZGF0YSIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxEYXRhU2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUmVmUHRyPFRpbWVsaW5lRXZlbnQ+JiAoKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5
KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxUaW1lbGluZUV2
ZW50Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRy
PFRpbWVsaW5lRXZlbnQ+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFRp
bWVsaW5lRXZlbnQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50
aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8VGltZWxpbmVFdmVudD4gcmVzdWx0ID0g
VGltZWxpbmVFdmVudDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VHlwZSguLi4pCiAgICAgKiAg
ICAgLnNldERhdGEoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0
UmVmKG5ldyBUaW1lbGluZUV2ZW50KCkpKTsKICAgIH0KCiAgICB2b2lkIHNldENoaWxkcmVuKC8q
UGFzc1JlZlB0cjxDaGlsZHJlbj4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkK
ICAgIHsKICAgICAgICB0aGlzLT5zZXRBcnJheSgiY2hpbGRyZW4iLCB2YWx1ZSk7CiAgICB9Cn07
Cgp9IC8vIFRpbWVsaW5lCgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCm5hbWVzcGFj
ZSBEZWJ1Z2dlciB7Ci8qIEJyZWFrcG9pbnQgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcg
QnJlYWtwb2ludElkOwoKLyogVW5pcXVlIHNjcmlwdCBpZGVudGlmaWVyLiAqLwp0eXBlZGVmIFN0
cmluZyBTY3JpcHRJZDsKCi8qIENhbGwgZnJhbWUgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJp
bmcgQ2FsbEZyYW1lSWQ7CgovKiBMb2NhdGlvbiBpbiB0aGUgc291cmNlIGNvZGUuICovCmNsYXNz
IExvY2F0aW9uIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewog
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBTY3JpcHRJZFNldCA9IDEgPDwgMCwKICAg
ICAgICBMaW5lTnVtYmVyU2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChTY3Jp
cHRJZFNldCB8IExpbmVOdW1iZXJTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4K
ICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxMb2NhdGlvbj4gcHRyKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRl
ZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAg
IH0KICAgICAgICBmcmllbmQgY2xhc3MgTG9jYXRpb247CiAgICBwdWJsaWM6CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBTY3JpcHRJZFNldD4mIHNldFNjcmlwdElkKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU2NyaXB0
SWRTZXQpLCBwcm9wZXJ0eV9zY3JpcHRJZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoInNjcmlwdElkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFNjcmlwdElkU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IExpbmVOdW1iZXJTZXQ+JiBzZXRMaW5lTnVtYmVyKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBMaW5lTnVtYmVyU2V0KSwgcHJvcGVydHlf
bGluZU51bWJlcl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIo
ImxpbmVOdW1iZXIiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TGluZU51
bWJlclNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxMb2NhdGlvbj4m
ICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVs
ZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmUHRyPExvY2F0aW9uPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBQYXNzUmVmUHRyPExvY2F0aW9uPiAoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuIFJlZlB0cjxMb2NhdGlvbj4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoK
ICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxMb2NhdGlvbj4gcmVz
dWx0ID0gTG9jYXRpb246OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFNjcmlwdElkKC4uLikKICAg
ICAqICAgICAuc2V0TGluZU51bWJlciguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxO
b0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oYWRvcHRSZWYobmV3IExvY2F0aW9uKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldENvbHVt
bk51bWJlcihpbnQgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJjb2x1bW5O
dW1iZXIiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBKYXZhU2NyaXB0IGNhbGwgZnJhbWUuIEFycmF5
IG9mIGNhbGwgZnJhbWVzIGZvcm0gdGhlIGNhbGwgc3RhY2suICovCmNsYXNzIENhbGxGcmFtZSA6
IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9w
ZXJ0eSBuYW1lICdzY29wZUNoYWluJyB3aGlsZSBnZW5lcmF0aW5nIENhbGxGcmFtZS4KICAgIGNs
YXNzIFNjb3BlQ2hhaW4gOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAg
ICAgICBTY29wZUNoYWluKCkgeyB9CgogICAgcHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbSgv
KlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpTY29wZT4qLyBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNoT2Jq
ZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjb3BlQ2hh
aW4+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY29wZUNoYWlu
KCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAw
LAogICAgICAgIENhbGxGcmFtZUlkU2V0ID0gMSA8PCAwLAogICAgICAgIEZ1bmN0aW9uTmFtZVNl
dCA9IDEgPDwgMSwKICAgICAgICBMb2NhdGlvblNldCA9IDEgPDwgMiwKICAgICAgICBTY29wZUNo
YWluU2V0ID0gMSA8PCAzLAogICAgICAgIFRoaXNTZXQgPSAxIDw8IDQsCiAgICAgICAgQWxsRmll
bGRzU2V0ID0gKENhbGxGcmFtZUlkU2V0IHwgRnVuY3Rpb25OYW1lU2V0IHwgTG9jYXRpb25TZXQg
fCBTY29wZUNoYWluU2V0IHwgVGhpc1NldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRF
PgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxT
VEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENhbGxGcmFtZT4gcHRyKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3Jl
YXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAg
ICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ2FsbEZyYW1lOwogICAgcHVibGljOgoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQ2FsbEZyYW1lSWRTZXQ+JiBzZXRDYWxsRnJhbWVJZChjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIENhbGxGcmFtZUlkU2V0KSwgcHJvcGVydHlfY2FsbEZyYW1lSWRfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJjYWxsRnJhbWVJZCIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDYWxsRnJhbWVJZFNldD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBGdW5jdGlvbk5hbWVTZXQ+JiBzZXRGdW5jdGlvbk5hbWUo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBGdW5jdGlvbk5hbWVTZXQpLCBwcm9wZXJ0eV9mdW5jdGlvbk5hbWVfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJmdW5jdGlvbk5hbWUiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RnVuY3Rpb25OYW1lU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExvY2F0aW9uU2V0PiYgc2V0TG9jYXRp
b24oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+Ki8gUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIExvY2F0aW9uU2V0KSwgcHJvcGVydHlfbG9jYXRpb25fYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJsb2NhdGlvbiIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMb2NhdGlvblNldD4oKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTY29wZUNoYWluU2V0PiYgc2V0U2NvcGVDaGFpbigv
KlBhc3NSZWZQdHI8U2NvcGVDaGFpbj4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTY29wZUNo
YWluU2V0KSwgcHJvcGVydHlfc2NvcGVDaGFpbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRBcnJheSgic2NvcGVDaGFpbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxTY29wZUNoYWluU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFRoaXNTZXQ+JiBzZXRUaGlzKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUaGlzU2V0KSwgcHJv
cGVydHlfdGhpc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3Qo
InRoaXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGhpc1NldD4oKTsK
ICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDYWxsRnJhbWU+JiAoKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJl
ZlB0cjxDYWxsRnJhbWU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9y
IFBhc3NSZWZQdHI8Q2FsbEZyYW1lPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJl
ZlB0cjxDYWxsRnJhbWU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q2FsbEZyYW1lPiByZXN1bHQgPSBD
YWxsRnJhbWU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldENhbGxGcmFtZUlkKC4uLikKICAgICAq
ICAgICAuc2V0RnVuY3Rpb25OYW1lKC4uLikKICAgICAqICAgICAuc2V0TG9jYXRpb24oLi4uKQog
ICAgICogICAgIC5zZXRTY29wZUNoYWluKC4uLikKICAgICAqICAgICAuc2V0VGhpcyguLi4pOwog
ICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IENhbGxGcmFtZSgp
KSk7CiAgICB9Cn07CgovKiBTY29wZSBkZXNjcmlwdGlvbi4gKi8KY2xhc3MgU2NvcGUgOiBwdWJs
aWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkg
bmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGluZyBTY29wZS4KICAgIHN0cnVjdCBUeXBlIHsKICAg
ICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBHbG9iYWwgPSA1MSwKICAgICAgICAgICAgTG9j
YWwgPSA1MiwKICAgICAgICAgICAgV2l0aCA9IDUzLAogICAgICAgICAgICBDbG9zdXJlID0gNTQs
CiAgICAgICAgICAgIENhdGNoID0gNTUsCiAgICAgICAgfTsKICAgIH07IC8vIHN0cnVjdCBUeXBl
CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFR5cGVTZXQgPSAx
IDw8IDAsCiAgICAgICAgT2JqZWN0U2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9
IChUeXBlU2V0IHwgT2JqZWN0U2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAg
ICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8U2NvcGU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAg
ICAgICAgZnJpZW5kIGNsYXNzIFNjb3BlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZTo6RW51bSB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCBnZXRF
bnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5
cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNl
dFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBPYmplY3RTZXQ+JiBzZXRPYmplY3QoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9iamVjdFNl
dCksIHByb3BlcnR5X29iamVjdF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRPYmplY3QoIm9iamVjdCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxP
YmplY3RTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8U2NvcGU+JiAo
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRz
U2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PFJlZlB0cjxTY29wZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUGFzc1JlZlB0cjxTY29wZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBS
ZWZQdHI8U2NvcGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50
aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8U2NvcGU+IHJlc3VsdCA9IFNjb3BlOjpj
cmVhdGUoKQogICAgICogICAgIC5zZXRUeXBlKC4uLikKICAgICAqICAgICAuc2V0T2JqZWN0KC4u
Lik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAg
ewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgU2NvcGUo
KSkpOwogICAgfQp9OwoKfSAvLyBEZWJ1Z2dlcgoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCm5hbWVzcGFjZSBET01E
ZWJ1Z2dlciB7Ci8qIERPTSBicmVha3BvaW50IHR5cGUuICovCnN0cnVjdCBET01CcmVha3BvaW50
VHlwZSB7CiAgICBlbnVtIEVudW0gewogICAgICAgIFN1YnRyZWVfbW9kaWZpZWQgPSA1NiwKICAg
ICAgICBBdHRyaWJ1dGVfbW9kaWZpZWQgPSA1NywKICAgICAgICBOb2RlX3JlbW92ZWQgPSA1OCwK
ICAgIH07Cn07IC8vIHN0cnVjdCBET01CcmVha3BvaW50VHlwZQoKfSAvLyBET01EZWJ1Z2dlcgoK
I2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCm5hbWVzcGFjZSBQcm9maWxlciB7Cn0gLy8gUHJvZmlsZXIKCiNlbmRpZiAv
LyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCn0gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVy
CgpjbGFzcyBJbnNwZWN0b3JGcm9udGVuZCB7CnB1YmxpYzoKICAgIEluc3BlY3RvckZyb250ZW5k
KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCopOwoKCiAgICBjbGFzcyBJbnNwZWN0b3IgewogICAg
cHVibGljOgogICAgICAgIEluc3BlY3RvcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgZXZhbHVhdGVGb3JUZXN0SW5Gcm9u
dGVuZChpbnQgdGVzdENhbGxJZCwgY29uc3QgU3RyaW5nJiBzY3JpcHQpOwogICAgICAgIHZvaWQg
aW5zcGVjdCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4q
LyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0LCBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gaGludHMpOwogICAgICAgIHZvaWQgZGlkQ3JlYXRlV29ya2VyKGludCBpZCwgY29u
c3QgU3RyaW5nJiB1cmwsIGJvb2wgaXNTaGFyZWQpOwogICAgICAgIHZvaWQgZGlkRGVzdHJveVdv
cmtlcihpbnQgaWQpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAg
ICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
KSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OwogICAgfTsKCiAgICBJbnNwZWN0b3IqIGluc3BlY3RvcigpIHsgcmV0dXJuICZtX2luc3BlY3Rv
cjsgfQoKICAgIGNsYXNzIE1lbW9yeSB7CiAgICBwdWJsaWM6CiAgICAgICAgTWVtb3J5KEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAg
dm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwg
PSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIE1lbW9yeSog
bWVtb3J5KCkgeyByZXR1cm4gJm1fbWVtb3J5OyB9CgogICAgY2xhc3MgUGFnZSB7CiAgICBwdWJs
aWM6CiAgICAgICAgUGFnZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgZG9tQ29udGVudEV2ZW50RmlyZWQoZG91YmxlIHRp
bWVzdGFtcCk7CiAgICAgICAgdm9pZCBsb2FkRXZlbnRGaXJlZChkb3VibGUgdGltZXN0YW1wKTsK
ICAgICAgICB2b2lkIGZyYW1lTmF2aWdhdGVkKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UGFn
ZTo6RnJhbWU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGZyYW1lKTsKICAgICAgICB2
b2lkIGZyYW1lRGV0YWNoZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkKTsKICAgICAgICB2b2lkIHNl
dEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
Z2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgUGFnZSogcGFnZSgpIHsg
cmV0dXJuICZtX3BhZ2U7IH0KCiAgICBjbGFzcyBSdW50aW1lIHsKICAgIHB1YmxpYzoKICAgICAg
ICBSdW50aW1lKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkgeyB9CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0
dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9
OwoKICAgIFJ1bnRpbWUqIHJ1bnRpbWUoKSB7IHJldHVybiAmbV9ydW50aW1lOyB9CgogICAgY2xh
c3MgQ29uc29sZSB7CiAgICBwdWJsaWM6CiAgICAgICAgQ29uc29sZShJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgbWVzc2Fn
ZUFkZGVkKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U+
Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpOwogICAgICAgIHZvaWQgbWVz
c2FnZVJlcGVhdENvdW50VXBkYXRlZChpbnQgY291bnQpOwogICAgICAgIHZvaWQgbWVzc2FnZXND
bGVhcmVkKCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsg
cmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAg
IEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAg
ICB9OwoKICAgIENvbnNvbGUqIGNvbnNvbGUoKSB7IHJldHVybiAmbV9jb25zb2xlOyB9CgogICAg
Y2xhc3MgTmV0d29yayB7CiAgICBwdWJsaWM6CiAgICAgICAgTmV0d29yayhJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgcmVx
dWVzdFdpbGxCZVNlbnQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJh
bWVJZCwgY29uc3QgU3RyaW5nJiBsb2FkZXJJZCwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwg
LypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0PiovIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0LCBkb3VibGUgdGltZXN0YW1wLCAvKlBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkluaXRpYXRvcj4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gaW5pdGlhdG9yLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OlN0YWNr
VHJhY2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gc3RhY2tUcmFjZSwgLypQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXNwb25zZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVkaXJlY3RSZXNwb25zZSk7CiAgICAgICAgdm9pZCByZXF1ZXN0U2VydmVkRnJv
bUNhY2hlKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkKTsKICAgICAgICB2b2lkIHJlc3BvbnNlUmVj
ZWl2ZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29u
c3QgU3RyaW5nJiBsb2FkZXJJZCwgZG91YmxlIHRpbWVzdGFtcCwgLypUeXBlQnVpbGRlcjo6UGFn
ZTo6UmVzb3VyY2VUeXBlOjpFbnVtKi8gY29uc3QgU3RyaW5nJiB0eXBlLCAvKlBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXNwb25zZSk7CiAgICAgICAgdm9pZCBkYXRhUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiBy
ZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIGludCBkYXRhTGVuZ3RoLCBpbnQgZW5jb2RlZERh
dGFMZW5ndGgpOwogICAgICAgIHZvaWQgbG9hZGluZ0ZpbmlzaGVkKGNvbnN0IFN0cmluZyYgcmVx
dWVzdElkLCBkb3VibGUgdGltZXN0YW1wKTsKICAgICAgICB2b2lkIGxvYWRpbmdGYWlsZWQoY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIGNvbnN0IFN0cmluZyYgZXJy
b3JUZXh0LCBjb25zdCBib29sKiBjb25zdCBjYW5jZWxlZCk7CiAgICAgICAgdm9pZCByZXF1ZXN0
U2VydmVkRnJvbU1lbW9yeUNhY2hlKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgbG9hZGVySWQsIGNvbnN0IFN0cmluZyYgZG9jdW1l
bnRVUkwsIGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29y
azo6SW5pdGlhdG9yPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbml0aWF0b3IsIC8q
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6Q2FjaGVkUmVzb3VyY2U+Ki8gUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc291cmNlKTsKICAgICAgICB2b2lkIHdlYlNvY2tldFdp
bGxTZW5kSGFuZHNoYWtlUmVxdWVzdChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRp
bWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXF1
ZXN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0KTsKICAgICAgICB2b2lk
IHdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0
SWQsIGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6
V2ViU29ja2V0UmVzcG9uc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNl
KTsKICAgICAgICB2b2lkIHdlYlNvY2tldENyZWF0ZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgdXJsKTsKICAgICAgICB2b2lkIHdlYlNvY2tldENsb3NlZChjb25zdCBT
dHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCk7CiAgICAgICAgdm9pZCBzZXRJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIE5ldHdvcmsqIG5ldHdvcmsoKSB7
IHJldHVybiAmbV9uZXR3b3JrOyB9CgojaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKICAgIGNsYXNz
IERhdGFiYXNlIHsKICAgIHB1YmxpYzoKICAgICAgICBEYXRhYmFzZShJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgYWRkRGF0
YWJhc2UoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RGF0YWJhc2U+Ki8gUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGFiYXNlKTsKICAgICAgICAvLyBOYW1lZCBhZnRl
ciBwYXJhbWV0ZXIgbmFtZSAnY29sdW1uTmFtZXMnIHdoaWxlIGdlbmVyYXRpbmcgZXZlbnQgc3Fs
VHJhbnNhY3Rpb25TdWNjZWVkZWQuCiAgICAgICAgY2xhc3MgQ29sdW1uTmFtZXMgOiBwdWJsaWMg
SW5zcGVjdG9yQXJyYXkgewogICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgIENvbHVtbk5hbWVz
KCkgeyB9CgogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgdm9pZCBhZGRJdGVtKGNvbnN0IFN0
cmluZyYgdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnB1c2hTdHJp
bmcodmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
b2x1bW5OYW1lcz4gY3JlYXRlKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDb2x1bW5OYW1lcygpKTsKICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIC8vIE5h
bWVkIGFmdGVyIHBhcmFtZXRlciBuYW1lICd2YWx1ZXMnIHdoaWxlIGdlbmVyYXRpbmcgZXZlbnQg
c3FsVHJhbnNhY3Rpb25TdWNjZWVkZWQuCiAgICAgICAgY2xhc3MgVmFsdWVzIDogcHVibGljIElu
c3BlY3RvckFycmF5IHsKICAgICAgICBwcml2YXRlOgogICAgICAgICAgICBWYWx1ZXMoKSB7IH0K
CiAgICAgICAgcHVibGljOgogICAgICAgICAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnB1
c2hWYWx1ZSh2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFZhbHVlcz4gY3JlYXRlKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBWYWx1ZXMoKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICB2b2lkIHNxbFRy
YW5zYWN0aW9uU3VjY2VlZGVkKGludCB0cmFuc2FjdGlvbklkLCAvKlBhc3NSZWZQdHI8Q29sdW1u
TmFtZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY29sdW1uTmFtZXMsIC8qUGFzc1Jl
ZlB0cjxWYWx1ZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWVzKTsKICAgICAg
ICB2b2lkIHNxbFRyYW5zYWN0aW9uRmFpbGVkKGludCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gc3FsRXJyb3IpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQog
ICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBEYXRhYmFzZSogZGF0YWJhc2UoKSB7IHJldHVy
biAmbV9kYXRhYmFzZTsgfQoKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCiNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgIGNsYXNzIEluZGV4ZWREQiB7CiAgICBwdWJsaWM6CiAg
ICAgICAgSW5kZXhlZERCKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBkYXRhYmFzZU5hbWVzTG9hZGVkKC8qUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6SW5kZXhlZERCOjpGcmFtZVdpdGhEYXRhYmFzZU5hbWVzPiovIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBmcmFtZVdpdGhEYXRhYmFzZU5hbWVzKTsKICAgICAgICB2
b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9
IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgSW5kZXhlZERC
KiBpbmRleGVkZGIoKSB7IHJldHVybiAmbV9pbmRleGVkZGI7IH0KCiNlbmRpZiAvLyBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKICAgIGNsYXNzIERPTVN0b3JhZ2UgewogICAgcHVibGljOgogICAg
ICAgIERPTVN0b3JhZ2UoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKSB7IH0KICAgICAgICB2b2lkIGFkZERPTVN0b3JhZ2UoLypQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpET01TdG9yYWdlOjpFbnRyeT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
c3RvcmFnZSk7CiAgICAgICAgdm9pZCB1cGRhdGVET01TdG9yYWdlKGludCBzdG9yYWdlSWQpOwog
ICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBE
T01TdG9yYWdlKiBkb21zdG9yYWdlKCkgeyByZXR1cm4gJm1fZG9tc3RvcmFnZTsgfQoKICAgIGNs
YXNzIEFwcGxpY2F0aW9uQ2FjaGUgewogICAgcHVibGljOgogICAgICAgIEFwcGxpY2F0aW9uQ2Fj
aGUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDog
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0K
ICAgICAgICB2b2lkIGFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRhdGVkKGNvbnN0IFN0cmluZyYg
ZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVSTCwgaW50IHN0YXR1cyk7CiAgICAgICAg
dm9pZCBuZXR3b3JrU3RhdGVVcGRhdGVkKGJvb2wgaXNOb3dPbmxpbmUpOwogICAgICAgIHZvaWQg
c2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBBcHBsaWNhdGlvbkNh
Y2hlKiBhcHBsaWNhdGlvbmNhY2hlKCkgeyByZXR1cm4gJm1fYXBwbGljYXRpb25jYWNoZTsgfQoK
I2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgIGNsYXNzIEZpbGVTeXN0ZW0gewogICAgcHVibGlj
OgogICAgICAgIEZpbGVTeXN0ZW0oSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQog
ICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6
CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsKICAgIH07CgogICAgRmlsZVN5c3RlbSogZmlsZXN5c3RlbSgpIHsgcmV0dXJuICZtX2Zp
bGVzeXN0ZW07IH0KCiNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCiAgICBjbGFzcyBET00g
ewogICAgcHVibGljOgogICAgICAgIERPTShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgZG9jdW1lbnRVcGRhdGVkKCk7CiAg
ICAgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyIG5hbWUgJ25vZGVzJyB3aGlsZSBnZW5lcmF0
aW5nIGV2ZW50IHNldENoaWxkTm9kZXMuCiAgICAgICAgY2xhc3MgTm9kZXMgOiBwdWJsaWMgSW5z
cGVjdG9yQXJyYXkgewogICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgIE5vZGVzKCkgeyB9Cgog
ICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6RE9NOjpOb2RlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7CiAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5vZGVzPiBjcmVhdGUo
KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE5vZGVzKCkpOwogICAgICAg
ICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgdm9pZCBzZXRDaGlsZE5vZGVzKGludCBwYXJlbnRJ
ZCwgLypQYXNzUmVmUHRyPE5vZGVzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG5vZGVz
KTsKICAgICAgICB2b2lkIGF0dHJpYnV0ZU1vZGlmaWVkKGludCBub2RlSWQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgICAgdm9pZCBhdHRyaWJ1dGVSZW1v
dmVkKGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgICAgLy8gTmFtZWQgYWZ0
ZXIgcGFyYW1ldGVyIG5hbWUgJ25vZGVJZHMnIHdoaWxlIGdlbmVyYXRpbmcgZXZlbnQgaW5saW5l
U3R5bGVJbnZhbGlkYXRlZC4KICAgICAgICBjbGFzcyBOb2RlSWRzIDogcHVibGljIEluc3BlY3Rv
ckFycmF5IHsKICAgICAgICBwcml2YXRlOgogICAgICAgICAgICBOb2RlSWRzKCkgeyB9CgogICAg
ICAgIHB1YmxpYzoKICAgICAgICAgICAgdm9pZCBhZGRJdGVtKGludCB2YWx1ZSkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgdGhpcy0+cHVzaE51bWJlcih2YWx1ZSk7CiAgICAgICAgICAg
IH0KCiAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5vZGVJZHM+IGNyZWF0ZSgpIHsKICAg
ICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTm9kZUlkcygpKTsKICAgICAgICAgICAg
fQogICAgICAgIH07CgogICAgICAgIHZvaWQgaW5saW5lU3R5bGVJbnZhbGlkYXRlZCgvKlBhc3NS
ZWZQdHI8Tm9kZUlkcz4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBub2RlSWRzKTsKICAg
ICAgICB2b2lkIGNoYXJhY3RlckRhdGFNb2RpZmllZChpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcm
IGNoYXJhY3RlckRhdGEpOwogICAgICAgIHZvaWQgY2hpbGROb2RlQ291bnRVcGRhdGVkKGludCBu
b2RlSWQsIGludCBjaGlsZE5vZGVDb3VudCk7CiAgICAgICAgdm9pZCBjaGlsZE5vZGVJbnNlcnRl
ZChpbnQgcGFyZW50Tm9kZUlkLCBpbnQgcHJldmlvdXNOb2RlSWQsIC8qUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6RE9NOjpOb2RlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBub2RlKTsK
ICAgICAgICB2b2lkIGNoaWxkTm9kZVJlbW92ZWQoaW50IHBhcmVudE5vZGVJZCwgaW50IG5vZGVJ
ZCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJu
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoK
ICAgIERPTSogZG9tKCkgeyByZXR1cm4gJm1fZG9tOyB9CgogICAgY2xhc3MgQ1NTIHsKICAgIHB1
YmxpYzoKICAgICAgICBDU1MoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIG1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkKCk7CiAg
ICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIENT
UyogY3NzKCkgeyByZXR1cm4gJm1fY3NzOyB9CgogICAgY2xhc3MgVGltZWxpbmUgewogICAgcHVi
bGljOgogICAgICAgIFRpbWVsaW5lKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBldmVudFJlY29yZGVkKC8qUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+Ki8gUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlY29yZCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
IHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7
IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2
YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWw7CiAgICB9OwoKICAgIFRpbWVsaW5lKiB0aW1lbGluZSgpIHsgcmV0dXJuICZtX3Rp
bWVsaW5lOyB9CgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICBjbGFzcyBEZWJ1
Z2dlciB7CiAgICBwdWJsaWM6CiAgICAgICAgRGVidWdnZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGdsb2JhbE9iamVj
dENsZWFyZWQoKTsKICAgICAgICB2b2lkIHNjcmlwdFBhcnNlZChjb25zdCBTdHJpbmcmIHNjcmlw
dElkLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IHN0YXJ0TGluZSwgaW50IHN0YXJ0Q29sdW1uLCBp
bnQgZW5kTGluZSwgaW50IGVuZENvbHVtbiwgY29uc3QgYm9vbCogY29uc3QgaXNDb250ZW50U2Ny
aXB0LCBjb25zdCBTdHJpbmcmIHNvdXJjZU1hcFVSTCk7CiAgICAgICAgdm9pZCBzY3JpcHRGYWls
ZWRUb1BhcnNlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHNjcmlwdFNvdXJjZSwg
aW50IHN0YXJ0TGluZSwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2Up
OwogICAgICAgIHZvaWQgYnJlYWtwb2ludFJlc29sdmVkKGNvbnN0IFN0cmluZyYgYnJlYWtwb2lu
dElkLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4qLyBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbG9jYXRpb24pOwogICAgICAgIC8vIE5hbWVkIGFmdGVy
IHBhcmFtZXRlciBuYW1lICdjYWxsRnJhbWVzJyB3aGlsZSBnZW5lcmF0aW5nIGV2ZW50IHBhdXNl
ZC4KICAgICAgICBjbGFzcyBDYWxsRnJhbWVzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAg
ICAgICBwcml2YXRlOgogICAgICAgICAgICBDYWxsRnJhbWVzKCkgeyB9CgogICAgICAgIHB1Ymxp
YzoKICAgICAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVi
dWdnZXI6OkNhbGxGcmFtZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAg
ICAgICAgICB9CgogICAgICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYWxsRnJhbWVzPiBjcmVh
dGUoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbGxGcmFtZXMoKSk7
CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0
ZXIgbmFtZSAncmVhc29uJyB3aGlsZSBnZW5lcmF0aW5nIGV2ZW50IHBhdXNlZC4KICAgICAgICBz
dHJ1Y3QgUmVhc29uIHsKICAgICAgICAgICAgZW51bSBFbnVtIHsKICAgICAgICAgICAgICAgIFhI
UiA9IDUsCiAgICAgICAgICAgICAgICBET00gPSA1OSwKICAgICAgICAgICAgICAgIEV2ZW50TGlz
dGVuZXIgPSA2MCwKICAgICAgICAgICAgICAgIEV4Y2VwdGlvbiA9IDYxLAogICAgICAgICAgICAg
ICAgT3RoZXIgPSAyNSwKICAgICAgICAgICAgfTsKICAgICAgICB9OyAvLyBzdHJ1Y3QgUmVhc29u
CgogICAgICAgIHZvaWQgcGF1c2VkKC8qUGFzc1JlZlB0cjxDYWxsRnJhbWVzPiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IGNhbGxGcmFtZXMsIC8qUmVhc29uOjpFbnVtKi8gY29uc3QgU3Ry
aW5nJiByZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKTsKICAgICAgICB2
b2lkIHJlc3VtZWQoKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAg
ICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAg
ICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsKICAgIH07CgogICAgRGVidWdnZXIqIGRlYnVnZ2VyKCkgeyByZXR1cm4gJm1fZGVidWdnZXI7
IH0KCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKQogICAgY2xhc3MgRE9NRGVidWdnZXIgewogICAgcHVibGljOgogICAg
ICAgIERPTURlYnVnZ2VyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAg
ICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgp
IHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAg
ICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7
CiAgICB9OwoKICAgIERPTURlYnVnZ2VyKiBkb21kZWJ1Z2dlcigpIHsgcmV0dXJuICZtX2RvbWRl
YnVnZ2VyOyB9CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIGNsYXNzIFByb2ZpbGVyIHsKICAgIHB1YmxpYzoK
ICAgICAgICBQcm9maWxlcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgYWRkUHJvZmlsZUhlYWRlcihQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gaGVhZGVyKTsKICAgICAgICB2b2lkIGFkZEhlYXBTbmFwc2hvdENodW5r
KGludCB1aWQsIGNvbnN0IFN0cmluZyYgY2h1bmspOwogICAgICAgIHZvaWQgZmluaXNoSGVhcFNu
YXBzaG90KGludCB1aWQpOwogICAgICAgIHZvaWQgc2V0UmVjb3JkaW5nUHJvZmlsZShib29sIGlz
UHJvZmlsaW5nKTsKICAgICAgICB2b2lkIHJlc2V0UHJvZmlsZXMoKTsKICAgICAgICB2b2lkIHJl
cG9ydEhlYXBTbmFwc2hvdFByb2dyZXNzKGludCBkb25lLCBpbnQgdG90YWwpOwogICAgICAgIHZv
aWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0g
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBQcm9maWxlciog
cHJvZmlsZXIoKSB7IHJldHVybiAmbV9wcm9maWxlcjsgfQoKI2VuZGlmIC8vIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKFdPUktFUlMpCiAgICBjbGFzcyBXb3JrZXIgewog
ICAgcHVibGljOgogICAgICAgIFdvcmtlcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgd29ya2VyQ3JlYXRlZChpbnQgd29y
a2VySWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGluc3BlY3RvckNvbm5lY3RlZCk7CiAgICAg
ICAgdm9pZCB3b3JrZXJUZXJtaW5hdGVkKGludCB3b3JrZXJJZCk7CiAgICAgICAgdm9pZCBkaXNw
YXRjaE1lc3NhZ2VGcm9tV29ya2VyKGludCB3b3JrZXJJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1lc3NhZ2UpOwogICAgICAgIHZvaWQgZGlzY29ubmVjdGVkRnJvbVdvcmtlcigpOwog
ICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBX
b3JrZXIqIHdvcmtlcigpIHsgcmV0dXJuICZtX3dvcmtlcjsgfQoKI2VuZGlmIC8vIEVOQUJMRShX
T1JLRVJTKQoKcHJpdmF0ZToKICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWw7CiAgICBJbnNwZWN0b3IgbV9pbnNwZWN0b3I7CiAgICBNZW1vcnkg
bV9tZW1vcnk7CiAgICBQYWdlIG1fcGFnZTsKICAgIFJ1bnRpbWUgbV9ydW50aW1lOwogICAgQ29u
c29sZSBtX2NvbnNvbGU7CiAgICBOZXR3b3JrIG1fbmV0d29yazsKI2lmIEVOQUJMRShTUUxfREFU
QUJBU0UpCiAgICBEYXRhYmFzZSBtX2RhdGFiYXNlOwojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRB
QkFTRSkKI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgSW5kZXhlZERCIG1faW5kZXhl
ZGRiOwojZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICBET01TdG9yYWdlIG1f
ZG9tc3RvcmFnZTsKICAgIEFwcGxpY2F0aW9uQ2FjaGUgbV9hcHBsaWNhdGlvbmNhY2hlOwojaWYg
RU5BQkxFKEZJTEVfU1lTVEVNKQogICAgRmlsZVN5c3RlbSBtX2ZpbGVzeXN0ZW07CiNlbmRpZiAv
LyBFTkFCTEUoRklMRV9TWVNURU0pCiAgICBET00gbV9kb207CiAgICBDU1MgbV9jc3M7CiAgICBU
aW1lbGluZSBtX3RpbWVsaW5lOwojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICBE
ZWJ1Z2dlciBtX2RlYnVnZ2VyOwojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIp
CiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIERPTURlYnVnZ2VyIG1fZG9tZGVi
dWdnZXI7CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQogICAgUHJvZmlsZXIgbV9wcm9maWxlcjsKI2VuZGlmIC8vIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKFdPUktFUlMpCiAgICBXb3JrZXIg
bV93b3JrZXI7CiNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKfTsKCiNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SKQoKfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQojZW5kaWYgLy8gIWRlZmluZWQoSW5z
cGVjdG9yRnJvbnRlbmRfaCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>122634</attachid>
            <date>2012-01-16 07:33:02 -0800</date>
            <delta_ts>2012-01-16 07:33:02 -0800</delta_ts>
            <desc>New InspectorFrontend.h</desc>
            <filename>InspectorFrontend.h</filename>
            <type>text/plain</type>
            <size>161501</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckZyb250ZW5kX2gKI2RlZmluZSBJbnNw
ZWN0b3JGcm9udGVuZF9oCgojaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNsdWRlIDxQ
bGF0Zm9ybVN0cmluZy5oPgojaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KCm5hbWVzcGFjZSBX
ZWJDb3JlIHsKCmNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKCi8vIEJvdGggSW5zcGVj
dG9yT2JqZWN0IGFuZCBJbnNwZWN0b3JBcnJheSBtYXkgb3IgbWF5IG5vdCBiZSBkZWNsYXJlZCBh
dCB0aGlzIHBvaW50IGFzIGRlZmluZWQgYnkgRU5BQkxFRF9JTlNQRUNUT1IuCi8vIERvdWJsZS1j
aGVjayB3ZSBoYXZlIHRoZW0gYXQgbGVhc3QgYXMgZm9yd2FyZCBkZWNsYXJhdGlvbi4KY2xhc3Mg
SW5zcGVjdG9yQXJyYXk7CmNsYXNzIEluc3BlY3Rvck9iamVjdDsKCnR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwoKI2lmIEVOQUJMRShJTlNQRUNUT1IpCgpuYW1lc3BhY2UgVHlwZUJ1aWxkZXIg
ewovLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KbmFtZXNwYWNlIENvbnNvbGUgewpjbGFzcyBTdGFj
a1RyYWNlOwp9IC8vIENvbnNvbGUKCm5hbWVzcGFjZSBDU1MgewpjbGFzcyBDU1NSdWxlOwpjbGFz
cyBTb3VyY2VSYW5nZTsKY2xhc3MgQ1NTU3R5bGU7CmNsYXNzIENTU1Byb3BlcnR5OwpjbGFzcyBD
U1NNZWRpYTsKfSAvLyBDU1MKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKbmFtZXNw
YWNlIERlYnVnZ2VyIHsKY2xhc3MgTG9jYXRpb247CmNsYXNzIFNjb3BlOwp9IC8vIERlYnVnZ2Vy
CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi8vIEVuZCBvZiBmb3J3YXJk
IGRlY2xhcmF0aW9ucy4KCi8vIFR5cGVkZWZzLgpuYW1lc3BhY2UgUGFnZSB7Ci8qIFVuaXF1ZSBz
Y3JpcHQgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgU2NyaXB0SWRlbnRpZmllcjsKCn0g
Ly8gUGFnZQoKbmFtZXNwYWNlIFJ1bnRpbWUgewovKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIu
ICovCnR5cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVjdElkOwoKfSAvLyBSdW50aW1lCgpuYW1lc3Bh
Y2UgTmV0d29yayB7Ci8qIFVuaXF1ZSBsb2FkZXIgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJp
bmcgTG9hZGVySWQ7CgovKiBVbmlxdWUgZnJhbWUgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJp
bmcgRnJhbWVJZDsKCi8qIFVuaXF1ZSByZXF1ZXN0IGlkZW50aWZpZXIuICovCnR5cGVkZWYgU3Ry
aW5nIFJlcXVlc3RJZDsKCn0gLy8gTmV0d29yawoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQpuYW1lc3BhY2UgRGVidWdnZXIgewovKiBCcmVha3BvaW50IGlkZW50aWZpZXIuICovCnR5
cGVkZWYgU3RyaW5nIEJyZWFrcG9pbnRJZDsKCi8qIFVuaXF1ZSBzY3JpcHQgaWRlbnRpZmllci4g
Ki8KdHlwZWRlZiBTdHJpbmcgU2NyaXB0SWQ7CgovKiBDYWxsIGZyYW1lIGlkZW50aWZpZXIuICov
CnR5cGVkZWYgU3RyaW5nIENhbGxGcmFtZUlkOwoKfSAvLyBEZWJ1Z2dlcgoKI2VuZGlmIC8vIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQovLyBFbmQgb2YgdHlwZWRlZnMuCgoKClN0cmluZyBn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CgpuYW1lc3BhY2UgTWVtb3J5IHsKLyogTnVt
YmVyIG9mIG5vZGVzIHdpdGggZ2l2ZW4gbmFtZS4gKi8KY2xhc3MgTm9kZUNvdW50IDogcHVibGlj
IEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKICAgICAgICBOb2RlTmFtZVNldCA9IDEgPDwgMCwKICAgICAgICBDb3VudFNldCA9IDEg
PDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTm9kZU5hbWVTZXQgfCBDb3VudFNldCkKICAg
IH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2
YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0
ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPE5v
ZGVDb3VudD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgTm9k
ZUNvdW50OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm9kZU5hbWVTZXQ+
JiBzZXROb2RlTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vZGVOYW1lU2V0KSwgcHJvcGVydHlfbm9kZU5hbWVf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub2RlTmFtZSIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb2RlTmFtZVNldD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb3VudFNldD4mIHNldENvdW50KGludCB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb3Vu
dFNldCksIHByb3BlcnR5X2NvdW50X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE51bWJlcigiY291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
Q291bnRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Tm9kZUNvdW50
PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8Tm9kZUNvdW50Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPE5vZGVDb3VudD4gKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiBSZWZQdHI8Tm9kZUNvdW50PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAg
ICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPE5vZGVDb3Vu
dD4gcmVzdWx0ID0gTm9kZUNvdW50OjpjcmVhdGUoKQogICAgICogICAgIC5zZXROb2RlTmFtZSgu
Li4pCiAgICAgKiAgICAgLnNldENvdW50KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVy
PE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihhZG9wdFJlZihuZXcgTm9kZUNvdW50KCkpKTsKICAgIH0KfTsKCi8qIE51bWJlciBv
ZiBKUyBldmVudCBsaXN0ZW5lcnMgYnkgZXZlbnQgdHlwZS4gKi8KY2xhc3MgTGlzdGVuZXJDb3Vu
dCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCiAgICAgICAgVHlwZVNldCA9IDEgPDwgMCwKICAgICAgICBDb3VudFNl
dCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVHlwZVNldCB8IENvdW50U2V0KQog
ICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHBy
aXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8
TGlzdGVuZXJDb3VudD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xh
c3MgTGlzdGVuZXJDb3VudDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5
cGVTZXQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQ291bnRTZXQ+JiBzZXRDb3VudChpbnQgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ291bnRTZXQpLCBwcm9wZXJ0
eV9jb3VudF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNv
dW50IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvdW50U2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPExpc3RlbmVyQ291bnQ+JiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxMaXN0ZW5lckNvdW50Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBQYXNzUmVmUHRyPExpc3RlbmVyQ291bnQ+ICgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPExpc3RlbmVyQ291bnQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoK
ICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8TGlzdGVu
ZXJDb3VudD4gcmVzdWx0ID0gTGlzdGVuZXJDb3VudDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0
VHlwZSguLi4pCiAgICAgKiAgICAgLnNldENvdW50KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgTGlzdGVuZXJDb3VudCgpKSk7CiAgICB9Cn07Cgpj
bGFzcyBET01Hcm91cCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBO
YW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdub2RlQ291bnQnIHdoaWxlIGdlbmVyYXRpbmcgRE9N
R3JvdXAuCiAgICBjbGFzcyBOb2RlQ291bnQgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAg
cHJpdmF0ZToKICAgICAgICBOb2RlQ291bnQoKSB7IH0KCiAgICBwdWJsaWM6CiAgICAgICAgdm9p
ZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TWVtb3J5OjpOb2RlQ291bnQ+Ki8g
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
dGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxOb2RlQ291bnQ+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBOb2RlQ291bnQoKSk7CiAgICAgICAgfQogICAgfTsKCiAgICAvLyBOYW1lZCBhZnRlciBwcm9w
ZXJ0eSBuYW1lICdsaXN0ZW5lckNvdW50JyB3aGlsZSBnZW5lcmF0aW5nIERPTUdyb3VwLgogICAg
Y2xhc3MgTGlzdGVuZXJDb3VudCA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICBwcml2YXRl
OgogICAgICAgIExpc3RlbmVyQ291bnQoKSB7IH0KCiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBh
ZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TWVtb3J5OjpMaXN0ZW5lckNvdW50Piov
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8TGlzdGVuZXJDb3VudD4gY3JlYXRlKCkgewogICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IExpc3RlbmVyQ291bnQoKSk7CiAgICAgICAgfQogICAgfTsKCiAgICBlbnVtIHsKICAg
ICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgU2l6ZVNldCA9IDEgPDwgMCwKICAgICAgICBU
aXRsZVNldCA9IDEgPDwgMSwKICAgICAgICBOb2RlQ291bnRTZXQgPSAxIDw8IDIsCiAgICAgICAg
TGlzdGVuZXJDb3VudFNldCA9IDEgPDwgMywKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU2l6ZVNl
dCB8IFRpdGxlU2V0IHwgTm9kZUNvdW50U2V0IHwgTGlzdGVuZXJDb3VudFNldCkKICAgIH07Cgog
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgog
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0
ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPERPTUdyb3Vw
PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAg
bV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBET01Hcm91cDsK
ICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNpemVTZXQ+JiBzZXRTaXplKGlu
dCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBT
aXplU2V0KSwgcHJvcGVydHlfc2l6ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXROdW1iZXIoInNpemUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
U2l6ZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaXRsZVNldD4m
IHNldFRpdGxlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgVGl0bGVTZXQpLCBwcm9wZXJ0eV90aXRsZV9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInRpdGxlIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpdGxlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IE5vZGVDb3VudFNldD4mIHNldE5vZGVDb3VudCgvKlBhc3NSZWZQdHI8
Tm9kZUNvdW50PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vZGVDb3VudFNldCksIHByb3Bl
cnR5X25vZGVDb3VudF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJh
eSgibm9kZUNvdW50IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vZGVD
b3VudFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMaXN0ZW5lckNv
dW50U2V0PiYgc2V0TGlzdGVuZXJDb3VudCgvKlBhc3NSZWZQdHI8TGlzdGVuZXJDb3VudD4qLyBQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBMaXN0ZW5lckNvdW50U2V0KSwgcHJvcGVydHlfbGlzdGVu
ZXJDb3VudF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgibGlz
dGVuZXJDb3VudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMaXN0ZW5l
ckNvdW50U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPERPTUdyb3Vw
PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8RE9NR3JvdXA+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8RE9NR3JvdXA+ICgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPERPTUdyb3VwPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAv
KgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPERPTUdyb3VwPiBy
ZXN1bHQgPSBET01Hcm91cDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U2l6ZSguLi4pCiAgICAg
KiAgICAgLnNldFRpdGxlKC4uLikKICAgICAqICAgICAuc2V0Tm9kZUNvdW50KC4uLikKICAgICAq
ICAgICAuc2V0TGlzdGVuZXJDb3VudCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxO
b0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oYWRvcHRSZWYobmV3IERPTUdyb3VwKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldERvY3Vt
ZW50VVJJKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5n
KCJkb2N1bWVudFVSSSIsIHZhbHVlKTsKICAgIH0KfTsKCn0gLy8gTWVtb3J5CgpuYW1lc3BhY2Ug
UGFnZSB7Ci8qIFJlc291cmNlIHR5cGUgYXMgaXQgd2FzIHBlcmNlaXZlZCBieSB0aGUgcmVuZGVy
aW5nIGVuZ2luZS4gKi8Kc3RydWN0IFJlc291cmNlVHlwZSB7CiAgICBlbnVtIEVudW0gewogICAg
ICAgIERvY3VtZW50ID0gMCwKICAgICAgICBTdHlsZXNoZWV0ID0gMSwKICAgICAgICBJbWFnZSA9
IDIsCiAgICAgICAgRm9udCA9IDMsCiAgICAgICAgU2NyaXB0ID0gNCwKICAgICAgICBYSFIgPSA1
LAogICAgICAgIFdlYlNvY2tldCA9IDYsCiAgICAgICAgT3RoZXIgPSA3LAogICAgfTsKfTsgLy8g
c3RydWN0IFJlc291cmNlVHlwZQoKLyogSW5mb3JtYXRpb24gYWJvdXQgdGhlIEZyYW1lIG9uIHRo
ZSBwYWdlLiAqLwpjbGFzcyBGcmFtZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6
CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgSWRTZXQgPSAxIDw8
IDAsCiAgICAgICAgTG9hZGVySWRTZXQgPSAxIDw8IDEsCiAgICAgICAgVXJsU2V0ID0gMSA8PCAy
LAogICAgICAgIE1pbWVUeXBlU2V0ID0gMSA8PCAzLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChJ
ZFNldCB8IExvYWRlcklkU2V0IHwgVXJsU2V0IHwgTWltZVR5cGVTZXQpCiAgICB9OwoKICAgIHRl
bXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50
IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxGcmFtZT4gcHRyKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQs
IGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0
ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgRnJhbWU7CiAgICBwdWJsaWM6
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJZFNldD4mIHNldElkKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSWRTZXQp
LCBwcm9wZXJ0eV9pZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoImlkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElkU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExvYWRlcklkU2V0PiYgc2V0TG9hZGVy
SWQoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6TG9hZGVySWQmKi8gY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBM
b2FkZXJJZFNldCksIHByb3BlcnR5X2xvYWRlcklkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygibG9hZGVySWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8TG9hZGVySWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgVXJsU2V0PiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVXJsU2V0KSwgcHJvcGVydHlfdXJsX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVybFNldD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBNaW1lVHlwZVNldD4mIHNldE1pbWVUeXBlKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
TWltZVR5cGVTZXQpLCBwcm9wZXJ0eV9taW1lVHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1pbWVUeXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPE1pbWVUeXBlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3Ig
UmVmUHRyPEZyYW1lPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RnJhbWU+Kj4oJm1fcmVzdWx0KTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8RnJhbWU+ICgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gUmVmUHRyPEZyYW1lPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAg
ICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEZyYW1lPiBy
ZXN1bHQgPSBGcmFtZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0SWQoLi4uKQogICAgICogICAg
IC5zZXRMb2FkZXJJZCguLi4pCiAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgKiAgICAgLnNl
dE1pbWVUeXBlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJl
ZihuZXcgRnJhbWUoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0UGFyZW50SWQoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInBhcmVudElkIiwgdmFsdWUp
OwogICAgfQoKICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAg
ICAgIHRoaXMtPnNldFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFNl
Y3VyaXR5T3JpZ2luKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0
U3RyaW5nKCJzZWN1cml0eU9yaWdpbiIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIEluZm9ybWF0aW9u
IGFib3V0IHRoZSBGcmFtZSBoaWVyYXJjaHkgYWxvbmcgd2l0aCB0aGVpciBjYWNoZWQgcmVzb3Vy
Y2VzLiAqLwpjbGFzcyBGcmFtZVJlc291cmNlVHJlZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qg
ewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdyZXNvdXJjZXMnIHdo
aWxlIGdlbmVyYXRpbmcgRnJhbWVSZXNvdXJjZVRyZWUuCiAgICBjbGFzcyBSZXNvdXJjZXMgOiBw
dWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAgICAgICBSZXNvdXJjZXMoKSB7
IH0KCiAgICBwdWJsaWM6CiAgICAgICAgY2xhc3MgSXRlbSA6IHB1YmxpYyBJbnNwZWN0b3JPYmpl
Y3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgZW51bSB7CiAgICAgICAgICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCiAgICAgICAgICAgICAgICBVcmxTZXQgPSAxIDw8IDAsCiAgICAgICAg
ICAgICAgICBUeXBlU2V0ID0gMSA8PCAxLAogICAgICAgICAgICAgICAgTWltZVR5cGVTZXQgPSAx
IDw8IDIsCiAgICAgICAgICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVXJsU2V0IHwgVHlwZVNldCB8
IE1pbWVUeXBlU2V0KQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgdGVtcGxhdGU8aW50IFNU
QVRFPgogICAgICAgICAgICBjbGFzcyBCdWlsZGVyIHsKICAgICAgICAgICAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICAg
ICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0
ZSgpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxJdGVtPiBwdHIpCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9G
aWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAg
ICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICBmcmllbmQgY2xhc3MgSXRlbTsKICAgICAgICAgICAgcHVibGljOgogICAgICAgIAogICAgICAg
ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVybFNldD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBVcmxTZXQpLCBwcm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVybFNldD4oKTsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAKICAgICAgICAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShU
eXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBlOjpFbnVtIHZhbHVlKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0
KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygidHlwZSIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0PigpOwogICAgICAgICAgICAg
ICAgfQogICAgICAgIAogICAgICAgICAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBz
ZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQpLCBwcm9wZXJ0eV90eXBl
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0
eXBlIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHlwZVNl
dD4oKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBNaW1lVHlwZVNldD4mIHNldE1pbWVUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIE1pbWVUeXBlU2V0KSwgcHJvcGVydHlfbWltZVR5cGVfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1pbWVUeXBlIiwgdmFsdWUpOwogICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWltZVR5cGVTZXQ+KCk7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgCiAgICAgICAgICAgICAgICBvcGVyYXRvciBSZWZQdHI8SXRlbT4m
ICgpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEl0ZW0+Kj4oJm1fcmVzdWx0
KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRy
PEl0ZW0+ICgpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJl
ZlB0cjxJdGVtPigqdGhpcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CgogICAg
ICAgICAgICAvKgogICAgICAgICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgICAg
ICAgICAqIFJlZlB0cjxJdGVtPiByZXN1bHQgPSBJdGVtOjpjcmVhdGUoKQogICAgICAgICAgICAg
KiAgICAgLnNldFVybCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0VHlwZSguLi4pCiAgICAg
ICAgICAgICAqICAgICAuc2V0TWltZVR5cGUoLi4uKTsKICAgICAgICAgICAgICovCiAgICAgICAg
ICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IEl0
ZW0oKSkpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgdm9pZCBhZGRJdGVtKC8q
UGFzc1JlZlB0cjxJdGVtPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVzb3VyY2VzPiBjcmVhdGUoKSB7CiAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgUmVzb3VyY2VzKCkpOwogICAgICAgIH0KICAgIH07CgogICAg
Ly8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnY2hpbGRGcmFtZXMnIHdoaWxlIGdlbmVyYXRp
bmcgRnJhbWVSZXNvdXJjZVRyZWUuCiAgICBjbGFzcyBDaGlsZEZyYW1lcyA6IHB1YmxpYyBJbnNw
ZWN0b3JBcnJheSB7CiAgICBwcml2YXRlOgogICAgICAgIENoaWxkRnJhbWVzKCkgeyB9CgogICAg
cHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlBh
Z2U6OkZyYW1lUmVzb3VyY2VUcmVlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAg
IH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hpbGRGcmFtZXM+IGNyZWF0ZSgpIHsKICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaGlsZEZyYW1lcygpKTsKICAgICAgICB9CiAg
ICB9OwoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBGcmFtZVNl
dCA9IDEgPDwgMCwKICAgICAgICBSZXNvdXJjZXNTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmll
bGRzU2V0ID0gKEZyYW1lU2V0IHwgUmVzb3VyY2VzU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxp
bnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RnJhbWVSZXNvdXJjZVRyZWU+IHB0
cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRz
U2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jl
c3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEZyYW1lUmVzb3VyY2VU
cmVlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRnJhbWVTZXQ+JiBzZXRG
cmFtZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lPiovIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBGcmFtZVNldCksIHByb3BlcnR5X2ZyYW1lX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiZnJhbWUiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8RnJhbWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgUmVzb3VyY2VzU2V0PiYgc2V0UmVzb3VyY2VzKC8qUGFzc1JlZlB0cjxSZXNvdXJj
ZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUmVzb3VyY2VzU2V0KSwgcHJvcGVydHlfcmVz
b3VyY2VzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJyZXNv
dXJjZXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UmVzb3VyY2VzU2V0
PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEZyYW1lUmVzb3VyY2VUcmVl
PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8RnJhbWVSZXNvdXJjZVRyZWU+Kj4oJm1fcmVzdWx0KTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8RnJhbWVSZXNvdXJjZVRyZWU+ICgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEZyYW1lUmVzb3VyY2VUcmVlPigqdGhp
cyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgogICAgICogUmVmUHRyPEZyYW1lUmVzb3VyY2VUcmVlPiByZXN1bHQgPSBGcmFtZVJlc291cmNl
VHJlZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0RnJhbWUoLi4uKQogICAgICogICAgIC5zZXRS
ZXNvdXJjZXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNy
ZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVm
KG5ldyBGcmFtZVJlc291cmNlVHJlZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRDaGlsZEZyYW1l
cygvKlBhc3NSZWZQdHI8Q2hpbGRGcmFtZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4g
dmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0QXJyYXkoImNoaWxkRnJhbWVzIiwgdmFsdWUp
OwogICAgfQp9OwoKLyogU2VhcmNoIG1hdGNoIGZvciByZXNvdXJjZS4gKi8KY2xhc3MgU2VhcmNo
TWF0Y2ggOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAg
ICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIExpbmVOdW1iZXJTZXQgPSAxIDw8IDAsCiAgICAg
ICAgTGluZUNvbnRlbnRTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKExpbmVO
dW1iZXJTZXQgfCBMaW5lQ29udGVudFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRF
PgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxT
VEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFNlYXJjaE1hdGNoPiBwdHIpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9j
cmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAg
ICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBTZWFyY2hNYXRjaDsKICAgIHB1YmxpYzoKCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IExpbmVOdW1iZXJTZXQ+JiBzZXRMaW5lTnVtYmVyKGRvdWJs
ZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBM
aW5lTnVtYmVyU2V0KSwgcHJvcGVydHlfbGluZU51bWJlcl9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImxpbmVOdW1iZXIiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8TGluZU51bWJlclNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBMaW5lQ29udGVudFNldD4mIHNldExpbmVDb250ZW50KGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
TGluZUNvbnRlbnRTZXQpLCBwcm9wZXJ0eV9saW5lQ29udGVudF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImxpbmVDb250ZW50IiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPExpbmVDb250ZW50U2V0PigpOwogICAgICAgIH0KCiAgICAg
ICAgb3BlcmF0b3IgUmVmUHRyPFNlYXJjaE1hdGNoPiYgKCkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8U2VhcmNoTWF0
Y2g+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8
U2VhcmNoTWF0Y2g+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFNlYXJj
aE1hdGNoPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFNlYXJjaE1hdGNoPiByZXN1bHQgPSBTZWFyY2hN
YXRjaDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0TGluZU51bWJlciguLi4pCiAgICAgKiAgICAg
LnNldExpbmVDb250ZW50KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRz
U2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0Pihh
ZG9wdFJlZihuZXcgU2VhcmNoTWF0Y2goKSkpOwogICAgfQp9OwoKLyogU2VhcmNoIHJlc3VsdCBm
b3IgcmVzb3VyY2UuICovCmNsYXNzIFNlYXJjaFJlc3VsdCA6IHB1YmxpYyBJbnNwZWN0b3JPYmpl
Y3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAg
VXJsU2V0ID0gMSA8PCAwLAogICAgICAgIEZyYW1lSWRTZXQgPSAxIDw8IDEsCiAgICAgICAgTWF0
Y2hlc0NvdW50U2V0ID0gMSA8PCAyLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChVcmxTZXQgfCBG
cmFtZUlkU2V0IHwgTWF0Y2hlc0NvdW50U2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8U2VhcmNoUmVzdWx0PiBwdHIpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7
CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBTZWFyY2hSZXN1bHQ7CiAgICBwdWJsaWM6
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVcmxTZXQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVcmxT
ZXQpLCBwcm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VXJsU2V0
PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEZyYW1lSWRTZXQ+JiBzZXRG
cmFtZUlkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkZyYW1lSWQmKi8gY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBGcmFtZUlkU2V0KSwgcHJvcGVydHlfZnJhbWVJZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoImZyYW1lSWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8RnJhbWVJZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBNYXRjaGVzQ291bnRTZXQ+JiBzZXRNYXRjaGVzQ291bnQoZG91YmxlIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1hdGNoZXNDb3VudFNl
dCksIHByb3BlcnR5X21hdGNoZXNDb3VudF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXROdW1iZXIoIm1hdGNoZXNDb3VudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxNYXRjaGVzQ291bnRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBSZWZQdHI8U2VhcmNoUmVzdWx0PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8U2VhcmNoUmVzdWx0Pio+KCZt
X3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFNlYXJjaFJl
c3VsdD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8U2VhcmNoUmVzdWx0
PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgogICAgICogUmVmUHRyPFNlYXJjaFJlc3VsdD4gcmVzdWx0ID0gU2VhcmNoUmVzdWx0
OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRGcmFtZUlk
KC4uLikKICAgICAqICAgICAuc2V0TWF0Y2hlc0NvdW50KC4uLik7CiAgICAgKi8KICAgIHN0YXRp
YyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWls
ZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgU2VhcmNoUmVzdWx0KCkpKTsKICAgIH0KfTsK
Ci8qIENvb2tpZSBvYmplY3QgKi8KY2xhc3MgQ29va2llIDogcHVibGljIEluc3BlY3Rvck9iamVj
dCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBO
YW1lU2V0ID0gMSA8PCAwLAogICAgICAgIFZhbHVlU2V0ID0gMSA8PCAxLAogICAgICAgIERvbWFp
blNldCA9IDEgPDwgMiwKICAgICAgICBQYXRoU2V0ID0gMSA8PCAzLAogICAgICAgIEV4cGlyZXNT
ZXQgPSAxIDw8IDQsCiAgICAgICAgU2l6ZVNldCA9IDEgPDwgNSwKICAgICAgICBIdHRwT25seVNl
dCA9IDEgPDwgNiwKICAgICAgICBTZWN1cmVTZXQgPSAxIDw8IDcsCiAgICAgICAgU2Vzc2lvblNl
dCA9IDEgPDwgOCwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTmFtZVNldCB8IFZhbHVlU2V0IHwg
RG9tYWluU2V0IHwgUGF0aFNldCB8IEV4cGlyZXNTZXQgfCBTaXplU2V0IHwgSHR0cE9ubHlTZXQg
fCBTZWN1cmVTZXQgfCBTZXNzaW9uU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNU
QVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q29va2llPiBwdHIpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAg
fQogICAgICAgIGZyaWVuZCBjbGFzcyBDb29raWU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBOYW1lU2V0PiYgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5hbWVTZXQpLCBwcm9wZXJ0
eV9uYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibmFt
ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOYW1lU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlU2V0PiYgc2V0VmFsdWUoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBWYWx1ZVNldCksIHByb3BlcnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygidmFsdWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8VmFsdWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
RG9tYWluU2V0PiYgc2V0RG9tYWluKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRG9tYWluU2V0KSwgcHJvcGVydHlfZG9t
YWluX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZG9tYWlu
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERvbWFpblNldD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXRoU2V0PiYgc2V0UGF0aChjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFBhdGhTZXQpLCBwcm9wZXJ0eV9wYXRoX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygicGF0aCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxQYXRoU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEV4cGly
ZXNTZXQ+JiBzZXRFeHBpcmVzKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBFeHBpcmVzU2V0KSwgcHJvcGVydHlfZXhwaXJlc19hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImV4cGlyZXMiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RXhwaXJlc1NldD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTaXplU2V0PiYgc2V0U2l6ZShpbnQgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU2l6ZVNldCksIHByb3Bl
cnR5X3NpemVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJz
aXplIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNpemVTZXQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSHR0cE9ubHlTZXQ+JiBzZXRIdHRwT25s
eShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIEh0dHBPbmx5U2V0KSwgcHJvcGVydHlfaHR0cE9ubHlfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigiaHR0cE9ubHkiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8SHR0cE9ubHlTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgU2VjdXJlU2V0PiYgc2V0U2VjdXJlKGJvb2wgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU2VjdXJlU2V0KSwgcHJvcGVydHlf
c2VjdXJlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oInNl
Y3VyZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTZWN1cmVTZXQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU2Vzc2lvblNldD4mIHNldFNlc3Np
b24oYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBTZXNzaW9uU2V0KSwgcHJvcGVydHlfc2Vzc2lvbl9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJzZXNzaW9uIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFNlc3Npb25TZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBSZWZQdHI8Q29va2llPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q29va2llPio+KCZtX3Jlc3VsdCk7CiAg
ICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENvb2tpZT4gKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q29va2llPigqdGhpcyk7CiAgICAgICAgfQogICAg
fTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENv
b2tpZT4gcmVzdWx0ID0gQ29va2llOjpjcmVhdGUoKQogICAgICogICAgIC5zZXROYW1lKC4uLikK
ICAgICAqICAgICAuc2V0VmFsdWUoLi4uKQogICAgICogICAgIC5zZXREb21haW4oLi4uKQogICAg
ICogICAgIC5zZXRQYXRoKC4uLikKICAgICAqICAgICAuc2V0RXhwaXJlcyguLi4pCiAgICAgKiAg
ICAgLnNldFNpemUoLi4uKQogICAgICogICAgIC5zZXRIdHRwT25seSguLi4pCiAgICAgKiAgICAg
LnNldFNlY3VyZSguLi4pCiAgICAgKiAgICAgLnNldFNlc3Npb24oLi4uKTsKICAgICAqLwogICAg
c3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBDb29raWUoKSkpOwogICAgfQp9OwoK
fSAvLyBQYWdlCgpuYW1lc3BhY2UgUnVudGltZSB7Ci8qIE1pcnJvciBvYmplY3QgcmVmZXJlbmNp
bmcgb3JpZ2luYWwgSmF2YVNjcmlwdCBvYmplY3QuICovCmNsYXNzIFJlbW90ZU9iamVjdCA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0
eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIFJlbW90ZU9iamVjdC4KICAgIHN0cnVjdCBU
eXBlIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBPYmplY3QgPSA4LAogICAgICAg
ICAgICBGdW5jdGlvbiA9IDksCiAgICAgICAgICAgIFVuZGVmaW5lZCA9IDEwLAogICAgICAgICAg
ICBTdHJpbmcgPSAxMSwKICAgICAgICAgICAgTnVtYmVyID0gMTIsCiAgICAgICAgICAgIEJvb2xl
YW4gPSAxMywKICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0IFR5cGUKCiAgICAvLyBOYW1lZCBh
ZnRlciBwcm9wZXJ0eSBuYW1lICdzdWJ0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIFJlbW90ZU9iamVj
dC4KICAgIHN0cnVjdCBTdWJ0eXBlIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBB
cnJheSA9IDE0LAogICAgICAgICAgICBOdWxsID0gMTUsCiAgICAgICAgICAgIE5vZGUgPSAxNiwK
ICAgICAgICAgICAgUmVnZXhwID0gMTcsCiAgICAgICAgICAgIERhdGUgPSAxOCwKICAgICAgICB9
OwogICAgfTsgLy8gc3RydWN0IFN1YnR5cGUKCiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCiAgICAgICAgVHlwZVNldCA9IDEgPDwgMCwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAo
VHlwZVNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRl
ciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0
OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQ
YXNzUmVmUHRyPFJlbW90ZU9iamVjdD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBm
cmllbmQgY2xhc3MgUmVtb3RlT2JqZWN0OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZTo6RW51bSB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCBnZXRF
bnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5
cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNl
dFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9y
IFJlZlB0cjxSZW1vdGVPYmplY3Q+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxSZW1vdGVPYmplY3Q+Kj4oJm1f
cmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8UmVtb3RlT2Jq
ZWN0PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZW1vdGVPYmplY3Q+
KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6CiAgICAgKiBSZWZQdHI8UmVtb3RlT2JqZWN0PiByZXN1bHQgPSBSZW1vdGVPYmplY3Q6
OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBSZW1vdGVPYmplY3QoKSkpOwogICAgfQoKICAgIHZv
aWQgc2V0U3VidHlwZShTdWJ0eXBlOjpFbnVtIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dFN0cmluZygic3VidHlwZSIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICB9Cgog
ICAgdm9pZCBzZXRTdWJ0eXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhp
cy0+c2V0U3RyaW5nKCJzdWJ0eXBlIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0Q2xhc3NO
YW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJj
bGFzc05hbWUiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRWYWx1ZShQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRWYWx1ZSgidmFsdWUi
LCB2YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3JPYmplY3Q6OnNldFZhbHVlOwoKCiAg
ICB2b2lkIHNldERlc2NyaXB0aW9uKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAg
dGhpcy0+c2V0U3RyaW5nKCJkZXNjcmlwdGlvbiIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNl
dE9iamVjdElkKC8qY29uc3QgVHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiov
IGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJvYmpl
Y3RJZCIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIE9iamVjdCBwcm9wZXJ0eSBkZXNjcmlwdG9yLiAq
LwpjbGFzcyBQcm9wZXJ0eURlc2NyaXB0b3IgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVi
bGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIE5hbWVTZXQg
PSAxIDw8IDAsCiAgICAgICAgV3JpdGFibGVTZXQgPSAxIDw8IDEsCiAgICAgICAgQ29uZmlndXJh
YmxlU2V0ID0gMSA8PCAyLAogICAgICAgIEVudW1lcmFibGVTZXQgPSAxIDw8IDMsCiAgICAgICAg
QWxsRmllbGRzU2V0ID0gKE5hbWVTZXQgfCBXcml0YWJsZVNldCB8IENvbmZpZ3VyYWJsZVNldCB8
IEVudW1lcmFibGVTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNz
IEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBt
X3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
PiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXIoUGFzc1JlZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+IHB0cikKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0
ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAg
ICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFByb3BlcnR5RGVzY3JpcHRvcjsKICAgIHB1YmxpYzoK
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5hbWVTZXQ+JiBzZXROYW1lKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTmFt
ZVNldCksIHByb3BlcnR5X25hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5h
bWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgV3JpdGFibGVTZXQ+
JiBzZXRXcml0YWJsZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFdyaXRhYmxlU2V0KSwgcHJvcGVydHlfd3JpdGFibGVfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigid3JpdGFibGUiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8V3JpdGFibGVTZXQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29uZmlndXJhYmxlU2V0PiYgc2V0Q29uZmlndXJhYmxl
KGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgQ29uZmlndXJhYmxlU2V0KSwgcHJvcGVydHlfY29uZmlndXJhYmxlX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImNvbmZpZ3VyYWJsZSIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb25maWd1cmFibGVTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRW51bWVyYWJsZVNldD4mIHNldEVudW1lcmFibGUo
Ym9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBFbnVtZXJhYmxlU2V0KSwgcHJvcGVydHlfZW51bWVyYWJsZV9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJlbnVtZXJhYmxlIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPEVudW1lcmFibGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBSZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9yPiYgKCkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UHJv
cGVydHlEZXNjcmlwdG9yPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBQYXNzUmVmUHRyPFByb3BlcnR5RGVzY3JpcHRvcj4gKCkKICAgICAgICB7CiAgICAgICAgICAg
IHJldHVybiBSZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9yPigqdGhpcyk7CiAgICAgICAgfQogICAg
fTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFBy
b3BlcnR5RGVzY3JpcHRvcj4gcmVzdWx0ID0gUHJvcGVydHlEZXNjcmlwdG9yOjpjcmVhdGUoKQog
ICAgICogICAgIC5zZXROYW1lKC4uLikKICAgICAqICAgICAuc2V0V3JpdGFibGUoLi4uKQogICAg
ICogICAgIC5zZXRDb25maWd1cmFibGUoLi4uKQogICAgICogICAgIC5zZXRFbnVtZXJhYmxlKC4u
Lik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAg
ewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgUHJvcGVy
dHlEZXNjcmlwdG9yKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFZhbHVlKC8qUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInZhbHVlIiwgdmFs
dWUpOwogICAgfQogICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0OjpzZXRWYWx1ZTsKCgogICAgdm9p
ZCBzZXRHZXQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldE9iamVjdCgiZ2V0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U2V0KC8qUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInNldCIs
IHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFdhc1Rocm93bihib29sIHZhbHVlKQogICAgewog
ICAgICAgIHRoaXMtPnNldEJvb2xlYW4oIndhc1Rocm93biIsIHZhbHVlKTsKICAgIH0KfTsKCi8q
IFJlcHJlc2VudHMgZnVuY3Rpb24gY2FsbCBhcmd1bWVudC4gRWl0aGVyIHJlbW90ZSBvYmplY3Qg
aWQgPGNvZGU+b2JqZWN0SWQ8L2NvZGU+IG9yIHByaW1pdGl2ZSA8Y29kZT52YWx1ZTwvY29kZT4g
b3IgbmVpdGhlciBvZiAoZm9yIHVuZGVmaW5lZCkgdGhlbSBzaG91bGQgYmUgc3BlY2lmaWVkLiAq
LwpjbGFzcyBDYWxsQXJndW1lbnQgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgog
ICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIEFsbEZpZWxkc1NldCA9
IDAKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAg
ICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPENhbGxBcmd1bWVudD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0
ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQg
Y2xhc3MgQ2FsbEFyZ3VtZW50OwogICAgcHVibGljOgoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8
Q2FsbEFyZ3VtZW50PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q2FsbEFyZ3VtZW50Pio+KCZtX3Jlc3VsdCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENhbGxBcmd1bWVudD4gKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q2FsbEFyZ3VtZW50PigqdGhpcyk7
CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgog
ICAgICogUmVmUHRyPENhbGxBcmd1bWVudD4gcmVzdWx0ID0gQ2FsbEFyZ3VtZW50OjpjcmVhdGUo
KTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7
CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBDYWxsQXJn
dW1lbnQoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0VmFsdWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0VmFsdWUoInZhbHVlIiwgdmFsdWUp
OwogICAgfQogICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0OjpzZXRWYWx1ZTsKCgogICAgdm9pZCBz
ZXRPYmplY3RJZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhp
cy0+c2V0T2JqZWN0KCJvYmplY3RJZCIsIHZhbHVlKTsKICAgIH0KfTsKCn0gLy8gUnVudGltZQoK
bmFtZXNwYWNlIENvbnNvbGUgewovKiBDb25zb2xlIG1lc3NhZ2UuICovCmNsYXNzIENvbnNvbGVN
ZXNzYWdlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFm
dGVyIHByb3BlcnR5IG5hbWUgJ3NvdXJjZScgd2hpbGUgZ2VuZXJhdGluZyBDb25zb2xlTWVzc2Fn
ZS4KICAgIHN0cnVjdCBTb3VyY2UgewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgIEh0
bWwgPSAxOSwKICAgICAgICAgICAgV21sID0gMjAsCiAgICAgICAgICAgIFhtbCA9IDIxLAogICAg
ICAgICAgICBKYXZhc2NyaXB0ID0gMjIsCiAgICAgICAgICAgIE5ldHdvcmsgPSAyMywKICAgICAg
ICAgICAgQ29uc29sZV9hcGkgPSAyNCwKICAgICAgICAgICAgT3RoZXIgPSAyNSwKICAgICAgICB9
OwogICAgfTsgLy8gc3RydWN0IFNvdXJjZQoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5h
bWUgJ2xldmVsJyB3aGlsZSBnZW5lcmF0aW5nIENvbnNvbGVNZXNzYWdlLgogICAgc3RydWN0IExl
dmVsIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBUaXAgPSAyNiwKICAgICAgICAg
ICAgTG9nID0gMjcsCiAgICAgICAgICAgIFdhcm5pbmcgPSAyOCwKICAgICAgICAgICAgRXJyb3Ig
PSAyOSwKICAgICAgICAgICAgRGVidWcgPSAzMCwKICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0
IExldmVsCgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2Vu
ZXJhdGluZyBDb25zb2xlTWVzc2FnZS4KICAgIHN0cnVjdCBUeXBlIHsKICAgICAgICBlbnVtIEVu
dW0gewogICAgICAgICAgICBMb2cgPSAyNywKICAgICAgICAgICAgRGlyID0gMzEsCiAgICAgICAg
ICAgIERpcnhtbCA9IDMyLAogICAgICAgICAgICBUcmFjZSA9IDMzLAogICAgICAgICAgICBTdGFy
dEdyb3VwID0gMzQsCiAgICAgICAgICAgIFN0YXJ0R3JvdXBDb2xsYXBzZWQgPSAzNSwKICAgICAg
ICAgICAgRW5kR3JvdXAgPSAzNiwKICAgICAgICAgICAgQXNzZXJ0ID0gMzcsCiAgICAgICAgfTsK
ICAgIH07IC8vIHN0cnVjdCBUeXBlCgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAn
cGFyYW1ldGVycycgd2hpbGUgZ2VuZXJhdGluZyBDb25zb2xlTWVzc2FnZS4KICAgIGNsYXNzIFBh
cmFtZXRlcnMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAgICAgICBQ
YXJhbWV0ZXJzKCkgeyB9CgogICAgcHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NS
ZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4qLyBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNoT2Jq
ZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBhcmFtZXRl
cnM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQYXJhbWV0ZXJz
KCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAw
LAogICAgICAgIFNvdXJjZVNldCA9IDEgPDwgMCwKICAgICAgICBMZXZlbFNldCA9IDEgPDwgMSwK
ICAgICAgICBUZXh0U2V0ID0gMSA8PCAyLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChTb3VyY2VT
ZXQgfCBMZXZlbFNldCB8IFRleHRTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4K
ICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDb25zb2xlTWVzc2FnZT4gcHRyKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwog
ICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ29uc29sZU1lc3NhZ2U7CiAgICBwdWJsaWM6
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTb3VyY2VTZXQ+JiBzZXRTb3VyY2UoU291cmNlOjpF
bnVtIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFNvdXJjZVNldCksIHByb3BlcnR5X3NvdXJjZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoInNvdXJjZSIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U291cmNlU2V0PigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFNvdXJjZVNldD4mIHNldFNvdXJjZShjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNv
dXJjZVNldCksIHByb3BlcnR5X3NvdXJjZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoInNvdXJjZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxTb3VyY2VTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTGV2
ZWxTZXQ+JiBzZXRMZXZlbChMZXZlbDo6RW51bSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBMZXZlbFNldCksIHByb3BlcnR5X2xldmVsX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibGV2ZWwiLCBnZXRFbnVt
Q29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExldmVs
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExldmVsU2V0PiYgc2V0
TGV2ZWwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBMZXZlbFNldCksIHByb3BlcnR5X2xldmVsX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibGV2ZWwiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8TGV2ZWxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgVGV4dFNldD4mIHNldFRleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUZXh0U2V0KSwgcHJvcGVy
dHlfdGV4dF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInRl
eHQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGV4dFNldD4oKTsKICAg
ICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDb25zb2xlTWVzc2FnZT4mICgpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmUHRyPENvbnNvbGVNZXNzYWdlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBQYXNzUmVmUHRyPENvbnNvbGVNZXNzYWdlPiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuIFJlZlB0cjxDb25zb2xlTWVzc2FnZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07
CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDb25z
b2xlTWVzc2FnZT4gcmVzdWx0ID0gQ29uc29sZU1lc3NhZ2U6OmNyZWF0ZSgpCiAgICAgKiAgICAg
LnNldFNvdXJjZSguLi4pCiAgICAgKiAgICAgLnNldExldmVsKC4uLikKICAgICAqICAgICAuc2V0
VGV4dCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRl
KCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3
IENvbnNvbGVNZXNzYWdlKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFR5cGUoVHlwZTo6RW51bSB2
YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInR5cGUiLCBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZSh2YWx1ZSkpOwogICAgfQoKICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgIH0K
CiAgICB2b2lkIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0TGluZShpbnQgdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJsaW5lIiwgdmFsdWUpOwogICAgfQoK
ICAgIHZvaWQgc2V0UmVwZWF0Q291bnQoaW50IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dE51bWJlcigicmVwZWF0Q291bnQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRQYXJhbWV0
ZXJzKC8qUGFzc1JlZlB0cjxQYXJhbWV0ZXJzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJwYXJhbWV0ZXJzIiwgdmFsdWUp
OwogICAgfQoKICAgIHZvaWQgc2V0U3RhY2tUcmFjZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
OkNvbnNvbGU6OlN0YWNrVHJhY2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUp
CiAgICB7CiAgICAgICAgdGhpcy0+c2V0QXJyYXkoInN0YWNrVHJhY2UiLCB2YWx1ZSk7CiAgICB9
CgogICAgdm9pZCBzZXROZXR3b3JrUmVxdWVzdElkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdv
cms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldFN0cmluZygibmV0d29ya1JlcXVlc3RJZCIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIFN0YWNr
IGVudHJ5IGZvciBjb25zb2xlIGVycm9ycyBhbmQgYXNzZXJ0aW9ucy4gKi8KY2xhc3MgQ2FsbEZy
YW1lIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAg
IE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBGdW5jdGlvbk5hbWVTZXQgPSAxIDw8IDAsCiAgICAg
ICAgVXJsU2V0ID0gMSA8PCAxLAogICAgICAgIExpbmVOdW1iZXJTZXQgPSAxIDw8IDIsCiAgICAg
ICAgQ29sdW1uTnVtYmVyU2V0ID0gMSA8PCAzLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChGdW5j
dGlvbk5hbWVTZXQgfCBVcmxTZXQgfCBMaW5lTnVtYmVyU2V0IHwgQ29sdW1uTnVtYmVyU2V0KQog
ICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHBy
aXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8
Q2FsbEZyYW1lPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAg
ICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBD
YWxsRnJhbWU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBGdW5jdGlvbk5h
bWVTZXQ+JiBzZXRGdW5jdGlvbk5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBGdW5jdGlvbk5hbWVTZXQpLCBwcm9w
ZXJ0eV9mdW5jdGlvbk5hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJmdW5jdGlvbk5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8RnVuY3Rpb25OYW1lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFVybFNldD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVybFNldCksIHByb3BlcnR5X3VybF9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVcmxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgTGluZU51bWJlclNldD4mIHNldExpbmVOdW1iZXIoaW50IHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExpbmVOdW1iZXJT
ZXQpLCBwcm9wZXJ0eV9saW5lTnVtYmVyX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldE51bWJlcigibGluZU51bWJlciIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxMaW5lTnVtYmVyU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IENvbHVtbk51bWJlclNldD4mIHNldENvbHVtbk51bWJlcihpbnQgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29sdW1uTnVtYmVyU2V0KSwg
cHJvcGVydHlfY29sdW1uTnVtYmVyX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE51bWJlcigiY29sdW1uTnVtYmVyIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPENvbHVtbk51bWJlclNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJl
ZlB0cjxDYWxsRnJhbWU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDYWxsRnJhbWU+Kj4oJm1fcmVzdWx0KTsK
ICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q2FsbEZyYW1lPiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDYWxsRnJhbWU+KCp0aGlzKTsKICAgICAg
ICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBS
ZWZQdHI8Q2FsbEZyYW1lPiByZXN1bHQgPSBDYWxsRnJhbWU6OmNyZWF0ZSgpCiAgICAgKiAgICAg
LnNldEZ1bmN0aW9uTmFtZSguLi4pCiAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgKiAgICAg
LnNldExpbmVOdW1iZXIoLi4uKQogICAgICogICAgIC5zZXRDb2x1bW5OdW1iZXIoLi4uKTsKICAg
ICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBDYWxsRnJhbWUoKSkp
OwogICAgfQp9OwoKLyogQ2FsbCBmcmFtZXMgZm9yIGFzc2VydGlvbnMgb3IgZXJyb3IgbWVzc2Fn
ZXMuICovCmNsYXNzIFN0YWNrVHJhY2UgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewpwcml2YXRl
OgogICAgU3RhY2tUcmFjZSgpIHsgfQoKcHVibGljOgogICAgdm9pZCBhZGRJdGVtKC8qUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q2FsbEZyYW1lPiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsK
ICAgIH0KCiAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdGFja1RyYWNlPiBjcmVhdGUoKSB7CiAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdGFja1RyYWNlKCkpOwogICAgfQp9OwoKfSAvLyBDb25z
b2xlCgpuYW1lc3BhY2UgTmV0d29yayB7Ci8qIFRpbWluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIHJl
cXVlc3QuICovCmNsYXNzIFJlc291cmNlVGltaW5nIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7
CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBSZXF1
ZXN0VGltZVNldCA9IDEgPDwgMCwKICAgICAgICBQcm94eVN0YXJ0U2V0ID0gMSA8PCAxLAogICAg
ICAgIFByb3h5RW5kU2V0ID0gMSA8PCAyLAogICAgICAgIERuc1N0YXJ0U2V0ID0gMSA8PCAzLAog
ICAgICAgIERuc0VuZFNldCA9IDEgPDwgNCwKICAgICAgICBDb25uZWN0U3RhcnRTZXQgPSAxIDw8
IDUsCiAgICAgICAgQ29ubmVjdEVuZFNldCA9IDEgPDwgNiwKICAgICAgICBTc2xTdGFydFNldCA9
IDEgPDwgNywKICAgICAgICBTc2xFbmRTZXQgPSAxIDw8IDgsCiAgICAgICAgU2VuZFN0YXJ0U2V0
ID0gMSA8PCA5LAogICAgICAgIFNlbmRFbmRTZXQgPSAxIDw8IDEwLAogICAgICAgIFJlY2VpdmVI
ZWFkZXJzRW5kU2V0ID0gMSA8PCAxMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoUmVxdWVzdFRp
bWVTZXQgfCBQcm94eVN0YXJ0U2V0IHwgUHJveHlFbmRTZXQgfCBEbnNTdGFydFNldCB8IERuc0Vu
ZFNldCB8IENvbm5lY3RTdGFydFNldCB8IENvbm5lY3RFbmRTZXQgfCBTc2xTdGFydFNldCB8IFNz
bEVuZFNldCB8IFNlbmRTdGFydFNldCB8IFNlbmRFbmRTZXQgfCBSZWNlaXZlSGVhZGVyc0VuZFNl
dCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAg
ICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPFJlc291cmNlVGltaW5nPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVu
ZCBjbGFzcyBSZXNvdXJjZVRpbWluZzsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFJlcXVlc3RUaW1lU2V0PiYgc2V0UmVxdWVzdFRpbWUoZG91YmxlIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJlcXVlc3RUaW1lU2V0KSwg
cHJvcGVydHlfcmVxdWVzdFRpbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0TnVtYmVyKCJyZXF1ZXN0VGltZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxSZXF1ZXN0VGltZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBQcm94eVN0YXJ0U2V0PiYgc2V0UHJveHlTdGFydChkb3VibGUgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUHJveHlTdGFydFNldCksIHByb3Bl
cnR5X3Byb3h5U3RhcnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVt
YmVyKCJwcm94eVN0YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBy
b3h5U3RhcnRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUHJveHlF
bmRTZXQ+JiBzZXRQcm94eUVuZChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgUHJveHlFbmRTZXQpLCBwcm9wZXJ0eV9wcm94eUVuZF9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInByb3h5RW5kIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFByb3h5RW5kU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERuc1N0YXJ0U2V0PiYgc2V0RG5zU3RhcnQo
ZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIERuc1N0YXJ0U2V0KSwgcHJvcGVydHlfZG5zU3RhcnRfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJkbnNTdGFydCIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxEbnNTdGFydFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBEbnNFbmRTZXQ+JiBzZXREbnNFbmQoZG91YmxlIHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERuc0VuZFNldCksIHByb3BlcnR5
X2Ruc0VuZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImRu
c0VuZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxEbnNFbmRTZXQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29ubmVjdFN0YXJ0U2V0PiYgc2V0
Q29ubmVjdFN0YXJ0KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBDb25uZWN0U3RhcnRTZXQpLCBwcm9wZXJ0eV9jb25uZWN0U3RhcnRf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJjb25uZWN0U3Rh
cnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29ubmVjdFN0YXJ0U2V0
PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbm5lY3RFbmRTZXQ+JiBz
ZXRDb25uZWN0RW5kKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBDb25uZWN0RW5kU2V0KSwgcHJvcGVydHlfY29ubmVjdEVuZF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNvbm5lY3RFbmQiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29ubmVjdEVuZFNldD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTc2xTdGFydFNldD4mIHNldFNzbFN0YXJ0
KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBTc2xTdGFydFNldCksIHByb3BlcnR5X3NzbFN0YXJ0X2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic3NsU3RhcnQiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8U3NsU3RhcnRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgU3NsRW5kU2V0PiYgc2V0U3NsRW5kKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTc2xFbmRTZXQpLCBwcm9wZXJ0
eV9zc2xFbmRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJz
c2xFbmQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3NsRW5kU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNlbmRTdGFydFNldD4mIHNldFNl
bmRTdGFydChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgU2VuZFN0YXJ0U2V0KSwgcHJvcGVydHlfc2VuZFN0YXJ0X2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic2VuZFN0YXJ0IiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNlbmRTdGFydFNldD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTZW5kRW5kU2V0PiYgc2V0U2VuZEVuZChkb3VibGUgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU2VuZEVu
ZFNldCksIHByb3BlcnR5X3NlbmRFbmRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0TnVtYmVyKCJzZW5kRW5kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFNlbmRFbmRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUmVj
ZWl2ZUhlYWRlcnNFbmRTZXQ+JiBzZXRSZWNlaXZlSGVhZGVyc0VuZChkb3VibGUgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUmVjZWl2ZUhlYWRl
cnNFbmRTZXQpLCBwcm9wZXJ0eV9yZWNlaXZlSGVhZGVyc0VuZF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInJlY2VpdmVIZWFkZXJzRW5kIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFJlY2VpdmVIZWFkZXJzRW5kU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFJlc291cmNlVGltaW5nPiYgKCkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxS
ZWZQdHI8UmVzb3VyY2VUaW1pbmc+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFBhc3NSZWZQdHI8UmVzb3VyY2VUaW1pbmc+ICgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPFJlc291cmNlVGltaW5nPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsK
CiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFJlc291
cmNlVGltaW5nPiByZXN1bHQgPSBSZXNvdXJjZVRpbWluZzo6Y3JlYXRlKCkKICAgICAqICAgICAu
c2V0UmVxdWVzdFRpbWUoLi4uKQogICAgICogICAgIC5zZXRQcm94eVN0YXJ0KC4uLikKICAgICAq
ICAgICAuc2V0UHJveHlFbmQoLi4uKQogICAgICogICAgIC5zZXREbnNTdGFydCguLi4pCiAgICAg
KiAgICAgLnNldERuc0VuZCguLi4pCiAgICAgKiAgICAgLnNldENvbm5lY3RTdGFydCguLi4pCiAg
ICAgKiAgICAgLnNldENvbm5lY3RFbmQoLi4uKQogICAgICogICAgIC5zZXRTc2xTdGFydCguLi4p
CiAgICAgKiAgICAgLnNldFNzbEVuZCguLi4pCiAgICAgKiAgICAgLnNldFNlbmRTdGFydCguLi4p
CiAgICAgKiAgICAgLnNldFNlbmRFbmQoLi4uKQogICAgICogICAgIC5zZXRSZWNlaXZlSGVhZGVy
c0VuZCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRl
KCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3
IFJlc291cmNlVGltaW5nKCkpKTsKICAgIH0KfTsKCi8qIEhUVFAgcmVxdWVzdCBkYXRhLiAqLwpj
bGFzcyBSZXF1ZXN0IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0g
ewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBVcmxTZXQgPSAxIDw8IDAsCiAgICAg
ICAgTWV0aG9kU2V0ID0gMSA8PCAxLAogICAgICAgIEhlYWRlcnNTZXQgPSAxIDw8IDIsCiAgICAg
ICAgQWxsRmllbGRzU2V0ID0gKFVybFNldCB8IE1ldGhvZFNldCB8IEhlYWRlcnNTZXQpCiAgICB9
OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0
ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAg
ICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwg
U1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZXF1
ZXN0PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBO
b0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAg
ICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBSZXF1ZXN0
OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVXJsU2V0PiYgc2V0VXJsKGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgVXJsU2V0KSwgcHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFVybFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXRo
b2RTZXQ+JiBzZXRNZXRob2QoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXRob2RTZXQpLCBwcm9wZXJ0eV9tZXRob2Rf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXRob2QiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWV0aG9kU2V0PigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEhlYWRlcnNTZXQ+JiBzZXRIZWFkZXJzKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBIZWFkZXJzU2V0KSwgcHJvcGVydHlfaGVhZGVyc19hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImhlYWRlcnMiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SGVhZGVyc1NldD4oKTsKICAgICAgICB9Cgog
ICAgICAgIG9wZXJhdG9yIFJlZlB0cjxSZXF1ZXN0PiYgKCkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UmVxdWVzdD4q
PigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxSZXF1
ZXN0PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZXF1ZXN0PigqdGhp
cyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgogICAgICogUmVmUHRyPFJlcXVlc3Q+IHJlc3VsdCA9IFJlcXVlc3Q6OmNyZWF0ZSgpCiAgICAg
KiAgICAgLnNldFVybCguLi4pCiAgICAgKiAgICAgLnNldE1ldGhvZCguLi4pCiAgICAgKiAgICAg
LnNldEhlYWRlcnMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0
UmVmKG5ldyBSZXF1ZXN0KCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFBvc3REYXRhKGNvbnN0IFN0
cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJwb3N0RGF0YSIsIHZh
bHVlKTsKICAgIH0KfTsKCi8qIEhUVFAgcmVzcG9uc2UgZGF0YS4gKi8KY2xhc3MgUmVzcG9uc2Ug
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9G
aWVsZHNTZXQgPSAwLAogICAgICAgIFVybFNldCA9IDEgPDwgMCwKICAgICAgICBTdGF0dXNTZXQg
PSAxIDw8IDEsCiAgICAgICAgU3RhdHVzVGV4dFNldCA9IDEgPDwgMiwKICAgICAgICBIZWFkZXJz
U2V0ID0gMSA8PCAzLAogICAgICAgIE1pbWVUeXBlU2V0ID0gMSA8PCA0LAogICAgICAgIENvbm5l
Y3Rpb25SZXVzZWRTZXQgPSAxIDw8IDUsCiAgICAgICAgQ29ubmVjdGlvbklkU2V0ID0gMSA8PCA2
LAogICAgICAgIEFsbEZpZWxkc1NldCA9IChVcmxTZXQgfCBTdGF0dXNTZXQgfCBTdGF0dXNUZXh0
U2V0IHwgSGVhZGVyc1NldCB8IE1pbWVUeXBlU2V0IHwgQ29ubmVjdGlvblJldXNlZFNldCB8IENv
bm5lY3Rpb25JZFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3Mg
QnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1f
cmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcihQYXNzUmVmUHRyPFJlc3BvbnNlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9p
bml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAg
IGZyaWVuZCBjbGFzcyBSZXNwb25zZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFVybFNldD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVybFNldCksIHByb3BlcnR5X3VybF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVcmxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgU3RhdHVzU2V0PiYgc2V0U3RhdHVzKGRvdWJsZSB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdGF0dXNTZXQpLCBw
cm9wZXJ0eV9zdGF0dXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVt
YmVyKCJzdGF0dXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RhdHVz
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0YXR1c1RleHRTZXQ+
JiBzZXRTdGF0dXNUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RhdHVzVGV4dFNldCksIHByb3BlcnR5X3N0YXR1
c1RleHRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdGF0
dXNUZXh0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0YXR1c1RleHRT
ZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSGVhZGVyc1NldD4mIHNl
dEhlYWRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhlYWRlcnNTZXQpLCBwcm9wZXJ0eV9o
ZWFkZXJzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiaGVh
ZGVycyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIZWFkZXJzU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1pbWVUeXBlU2V0PiYgc2V0TWlt
ZVR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBNaW1lVHlwZVNldCksIHByb3BlcnR5X21pbWVUeXBlX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWltZVR5cGUiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWltZVR5cGVTZXQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29ubmVjdGlvblJldXNlZFNldD4mIHNldENvbm5lY3Rp
b25SZXVzZWQoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBDb25uZWN0aW9uUmV1c2VkU2V0KSwgcHJvcGVydHlfY29ubmVjdGlvblJldXNl
ZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJjb25uZWN0
aW9uUmV1c2VkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvbm5lY3Rp
b25SZXVzZWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29ubmVj
dGlvbklkU2V0PiYgc2V0Q29ubmVjdGlvbklkKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb25uZWN0aW9uSWRTZXQpLCBwcm9wZXJ0
eV9jb25uZWN0aW9uSWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVt
YmVyKCJjb25uZWN0aW9uSWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
Q29ubmVjdGlvbklkU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFJl
c3BvbnNlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UmVzcG9uc2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9
CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8UmVzcG9uc2U+ICgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gUmVmUHRyPFJlc3BvbnNlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsK
CiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFJlc3Bv
bnNlPiByZXN1bHQgPSBSZXNwb25zZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VXJsKC4uLikK
ICAgICAqICAgICAuc2V0U3RhdHVzKC4uLikKICAgICAqICAgICAuc2V0U3RhdHVzVGV4dCguLi4p
CiAgICAgKiAgICAgLnNldEhlYWRlcnMoLi4uKQogICAgICogICAgIC5zZXRNaW1lVHlwZSguLi4p
CiAgICAgKiAgICAgLnNldENvbm5lY3Rpb25SZXVzZWQoLi4uKQogICAgICogICAgIC5zZXRDb25u
ZWN0aW9uSWQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNy
ZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVm
KG5ldyBSZXNwb25zZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRIZWFkZXJzVGV4dChjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygiaGVhZGVyc1RleHQi
LCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRSZXF1ZXN0SGVhZGVycyhQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJyZXF1
ZXN0SGVhZGVycyIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFJlcXVlc3RIZWFkZXJzVGV4
dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygicmVx
dWVzdEhlYWRlcnNUZXh0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0RnJvbURpc2tDYWNo
ZShib29sIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4oImZyb21EaXNrQ2Fj
aGUiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRUaW1pbmcoLypQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpOZXR3b3JrOjpSZXNvdXJjZVRpbWluZz4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJ0aW1pbmciLCB2YWx1
ZSk7CiAgICB9Cn07CgovKiBXZWJTb2NrZXQgcmVxdWVzdCBkYXRhLiAqLwpjbGFzcyBXZWJTb2Nr
ZXRSZXF1ZXN0IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewog
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBSZXF1ZXN0S2V5M1NldCA9IDEgPDwgMCwK
ICAgICAgICBIZWFkZXJzU2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChSZXF1
ZXN0S2V5M1NldCB8IEhlYWRlcnNTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4K
ICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxXZWJTb2NrZXRSZXF1ZXN0PiBwdHIpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7
CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBXZWJTb2NrZXRSZXF1ZXN0OwogICAgcHVi
bGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUmVxdWVzdEtleTNTZXQ+JiBzZXRSZXF1ZXN0
S2V5Myhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFJlcXVlc3RLZXkzU2V0KSwgcHJvcGVydHlfcmVxdWVzdEtleTNfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJyZXF1ZXN0S2V5MyIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSZXF1ZXN0S2V5M1NldD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBIZWFkZXJzU2V0PiYgc2V0SGVhZGVy
cyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSGVhZGVyc1NldCksIHByb3BlcnR5X2hlYWRlcnNf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJoZWFkZXJzIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhlYWRlcnNTZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8V2ViU29ja2V0UmVxdWVzdD4mICgpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmUHRyPFdlYlNvY2tldFJlcXVlc3Q+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFBhc3NSZWZQdHI8V2ViU29ja2V0UmVxdWVzdD4gKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiBSZWZQdHI8V2ViU29ja2V0UmVxdWVzdD4oKnRoaXMpOwogICAgICAgIH0K
ICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0
cjxXZWJTb2NrZXRSZXF1ZXN0PiByZXN1bHQgPSBXZWJTb2NrZXRSZXF1ZXN0OjpjcmVhdGUoKQog
ICAgICogICAgIC5zZXRSZXF1ZXN0S2V5MyguLi4pCiAgICAgKiAgICAgLnNldEhlYWRlcnMoLi4u
KTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7
CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBXZWJTb2Nr
ZXRSZXF1ZXN0KCkpKTsKICAgIH0KfTsKCi8qIFdlYlNvY2tldCByZXNwb25zZSBkYXRhLiAqLwpj
bGFzcyBXZWJTb2NrZXRSZXNwb25zZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6
CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgU3RhdHVzU2V0ID0g
MSA8PCAwLAogICAgICAgIFN0YXR1c1RleHRTZXQgPSAxIDw8IDEsCiAgICAgICAgSGVhZGVyc1Nl
dCA9IDEgPDwgMiwKICAgICAgICBDaGFsbGVuZ2VSZXNwb25zZVNldCA9IDEgPDwgMywKICAgICAg
ICBBbGxGaWVsZHNTZXQgPSAoU3RhdHVzU2V0IHwgU3RhdHVzVGV4dFNldCB8IEhlYWRlcnNTZXQg
fCBDaGFsbGVuZ2VSZXNwb25zZVNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgog
ICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFdlYlNvY2tldFJlc3BvbnNlPiBwdHIpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7
CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBXZWJTb2NrZXRSZXNwb25zZTsKICAgIHB1
YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0YXR1c1NldD4mIHNldFN0YXR1cyhkb3Vi
bGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
U3RhdHVzU2V0KSwgcHJvcGVydHlfc3RhdHVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldE51bWJlcigic3RhdHVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFN0YXR1c1NldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBT
dGF0dXNUZXh0U2V0PiYgc2V0U3RhdHVzVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0YXR1c1RleHRTZXQpLCBw
cm9wZXJ0eV9zdGF0dXNUZXh0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygic3RhdHVzVGV4dCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxTdGF0dXNUZXh0U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEhl
YWRlcnNTZXQ+JiBzZXRIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIZWFkZXJzU2V0
KSwgcHJvcGVydHlfaGVhZGVyc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRPYmplY3QoImhlYWRlcnMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
SGVhZGVyc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDaGFsbGVu
Z2VSZXNwb25zZVNldD4mIHNldENoYWxsZW5nZVJlc3BvbnNlKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ2hhbGxlbmdl
UmVzcG9uc2VTZXQpLCBwcm9wZXJ0eV9jaGFsbGVuZ2VSZXNwb25zZV9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImNoYWxsZW5nZVJlc3BvbnNlIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENoYWxsZW5nZVJlc3BvbnNlU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFdlYlNvY2tldFJlc3BvbnNlPiYgKCkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1Nl
dCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9Cgog
ICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+ICgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFdlYlNvY2tldFJlc3BvbnNlPigqdGhpcyk7CiAg
ICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAg
ICogUmVmUHRyPFdlYlNvY2tldFJlc3BvbnNlPiByZXN1bHQgPSBXZWJTb2NrZXRSZXNwb25zZTo6
Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3RhdHVzKC4uLikKICAgICAqICAgICAuc2V0U3RhdHVz
VGV4dCguLi4pCiAgICAgKiAgICAgLnNldEhlYWRlcnMoLi4uKQogICAgICogICAgIC5zZXRDaGFs
bGVuZ2VSZXNwb25zZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRv
cHRSZWYobmV3IFdlYlNvY2tldFJlc3BvbnNlKCkpKTsKICAgIH0KfTsKCi8qIEluZm9ybWF0aW9u
IGFib3V0IHRoZSBjYWNoZWQgcmVzb3VyY2UuICovCmNsYXNzIENhY2hlZFJlc291cmNlIDogcHVi
bGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRz
U2V0ID0gMCwKICAgICAgICBVcmxTZXQgPSAxIDw8IDAsCiAgICAgICAgVHlwZVNldCA9IDEgPDwg
MSwKICAgICAgICBSZXNwb25zZVNldCA9IDEgPDwgMiwKICAgICAgICBCb2R5U2l6ZVNldCA9IDEg
PDwgMywKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVXJsU2V0IHwgVHlwZVNldCB8IFJlc3BvbnNl
U2V0IHwgQm9keVNpemVTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNs
YXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXIoUGFzc1JlZlB0cjxDYWNoZWRSZXNvdXJjZT4gcHRyKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRl
ZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAg
IH0KICAgICAgICBmcmllbmQgY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CiAgICBwdWJsaWM6CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBVcmxTZXQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVcmxTZXQpLCBw
cm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VXJsU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKFR5cGVC
dWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0gdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgZ2V0RW51
bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBl
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRU
eXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgUmVzcG9uc2VTZXQ+JiBzZXRSZXNwb25zZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
Ok5ldHdvcms6OlJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBSZXNwb25zZVNl
dCksIHByb3BlcnR5X3Jlc3BvbnNlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE9iamVjdCgicmVzcG9uc2UiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8UmVzcG9uc2VTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQm9k
eVNpemVTZXQ+JiBzZXRCb2R5U2l6ZShkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQm9keVNpemVTZXQpLCBwcm9wZXJ0eV9ib2R5U2l6
ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImJvZHlTaXpl
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJvZHlTaXplU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENhY2hlZFJlc291cmNlPiYgKCkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwg
cmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxSZWZQdHI8Q2FjaGVkUmVzb3VyY2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFBhc3NSZWZQdHI8Q2FjaGVkUmVzb3VyY2U+ICgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gUmVmUHRyPENhY2hlZFJlc291cmNlPigqdGhpcyk7CiAgICAgICAgfQogICAg
fTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENh
Y2hlZFJlc291cmNlPiByZXN1bHQgPSBDYWNoZWRSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAqICAg
ICAuc2V0VXJsKC4uLikKICAgICAqICAgICAuc2V0VHlwZSguLi4pCiAgICAgKiAgICAgLnNldFJl
c3BvbnNlKC4uLikKICAgICAqICAgICAuc2V0Qm9keVNpemUoLi4uKTsKICAgICAqLwogICAgc3Rh
dGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBDYWNoZWRSZXNvdXJjZSgpKSk7CiAgICB9
Cn07CgovKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVxdWVzdCBpbml0aWF0b3IuICovCmNsYXNz
IEluaXRpYXRvciA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1l
ZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIEluaXRpYXRvci4K
ICAgIHN0cnVjdCBUeXBlIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBQYXJzZXIg
PSAzOCwKICAgICAgICAgICAgU2NyaXB0ID0gMzksCiAgICAgICAgICAgIE90aGVyID0gMjUsCiAg
ICAgICAgfTsKICAgIH07IC8vIHN0cnVjdCBUeXBlCgogICAgZW51bSB7CiAgICAgICAgTm9GaWVs
ZHNTZXQgPSAwLAogICAgICAgIFR5cGVTZXQgPSAxIDw8IDAsCiAgICAgICAgQWxsRmllbGRzU2V0
ID0gKFR5cGVTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1
aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jl
c3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXIoUGFzc1JlZlB0cjxJbml0aWF0b3I+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAg
ZnJpZW5kIGNsYXNzIEluaXRpYXRvcjsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFR5cGVTZXQ+JiBzZXRUeXBlKFR5cGU6OkVudW0gdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgZ2V0RW51
bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBl
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRU
eXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBS
ZWZQdHI8SW5pdGlhdG9yPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8SW5pdGlhdG9yPio+KCZtX3Jlc3VsdCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEluaXRpYXRvcj4gKCkKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8SW5pdGlhdG9yPigqdGhpcyk7CiAgICAg
ICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICog
UmVmUHRyPEluaXRpYXRvcj4gcmVzdWx0ID0gSW5pdGlhdG9yOjpjcmVhdGUoKQogICAgICogICAg
IC5zZXRUeXBlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJl
ZihuZXcgSW5pdGlhdG9yKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFN0YWNrVHJhY2UoLypQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpDb25zb2xlOjpTdGFja1RyYWNlPiovIFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJzdGFja1Ry
YWNlIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICB9CgogICAg
dm9pZCBzZXRMaW5lTnVtYmVyKGRvdWJsZSB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRO
dW1iZXIoImxpbmVOdW1iZXIiLCB2YWx1ZSk7CiAgICB9Cn07Cgp9IC8vIE5ldHdvcmsKCiNpZiBF
TkFCTEUoU1FMX0RBVEFCQVNFKQpuYW1lc3BhY2UgRGF0YWJhc2UgewovKiBEYXRhYmFzZSBvYmpl
Y3QuICovCmNsYXNzIERhdGFiYXNlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoK
ICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBJZFNldCA9IDEgPDwg
MCwKICAgICAgICBEb21haW5TZXQgPSAxIDw8IDEsCiAgICAgICAgTmFtZVNldCA9IDEgPDwgMiwK
ICAgICAgICBWZXJzaW9uU2V0ID0gMSA8PCAzLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChJZFNl
dCB8IERvbWFpblNldCB8IE5hbWVTZXQgfCBWZXJzaW9uU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0
ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RGF0YWJhc2U+IHB0cikKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9
IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlOwogICAgcHVibGlj
OgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSWRTZXQ+JiBzZXRJZChjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIElkU2V0
KSwgcHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJpZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJZFNldD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEb21haW5TZXQ+JiBzZXREb21haW4o
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBEb21haW5TZXQpLCBwcm9wZXJ0eV9kb21haW5fYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJkb21haW4iLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8RG9tYWluU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IE5hbWVTZXQ+JiBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTmFtZVNldCksIHByb3BlcnR5
X25hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJuYW1l
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5hbWVTZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmVyc2lvblNldD4mIHNldFZlcnNpb24oY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBWZXJzaW9uU2V0KSwgcHJvcGVydHlfdmVyc2lvbl9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInZlcnNpb24iLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8VmVyc2lvblNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJh
dG9yIFJlZlB0cjxEYXRhYmFzZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPERhdGFiYXNlPio+KCZtX3Jlc3Vs
dCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPERhdGFiYXNlPiAoKQog
ICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxEYXRhYmFzZT4oKnRoaXMpOwogICAg
ICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAq
IFJlZlB0cjxEYXRhYmFzZT4gcmVzdWx0ID0gRGF0YWJhc2U6OmNyZWF0ZSgpCiAgICAgKiAgICAg
LnNldElkKC4uLikKICAgICAqICAgICAuc2V0RG9tYWluKC4uLikKICAgICAqICAgICAuc2V0TmFt
ZSguLi4pCiAgICAgKiAgICAgLnNldFZlcnNpb24oLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBEYXRhYmFzZSgpKSk7CiAgICB9Cn07Cgp9IC8vIERh
dGFiYXNlCgojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQpuYW1lc3BhY2UgSW5kZXhlZERCIHsKLyogT3JpZ2luIHdpdGggZGF0YWJhc2Ug
bmFtZXMgYW5kIGZyYW1lIGlkcy4gKi8KY2xhc3MgRnJhbWVXaXRoRGF0YWJhc2VOYW1lcyA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0
eSBuYW1lICdkYXRhYmFzZU5hbWVzJyB3aGlsZSBnZW5lcmF0aW5nIEZyYW1lV2l0aERhdGFiYXNl
TmFtZXMuCiAgICBjbGFzcyBEYXRhYmFzZU5hbWVzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsK
ICAgIHByaXZhdGU6CiAgICAgICAgRGF0YWJhc2VOYW1lcygpIHsgfQoKICAgIHB1YmxpYzoKICAg
ICAgICB2b2lkIGFkZEl0ZW0oY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIHRoaXMtPnB1c2hTdHJpbmcodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8RGF0YWJhc2VOYW1lcz4gY3JlYXRlKCkgewogICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IERhdGFiYXNlTmFtZXMoKSk7CiAgICAgICAgfQogICAgfTsKCiAgICBlbnVtIHsK
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgRnJhbWVJZFNldCA9IDEgPDwgMCwKICAg
ICAgICBTZWN1cml0eU9yaWdpblNldCA9IDEgPDwgMSwKICAgICAgICBEYXRhYmFzZU5hbWVzU2V0
ID0gMSA8PCAyLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChGcmFtZUlkU2V0IHwgU2VjdXJpdHlP
cmlnaW5TZXQgfCBEYXRhYmFzZU5hbWVzU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RnJhbWVXaXRoRGF0YWJhc2VOYW1lcz4gcHRy
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNT
ZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVz
dWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgRnJhbWVXaXRoRGF0YWJh
c2VOYW1lczsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEZyYW1lSWRTZXQ+
JiBzZXRGcmFtZUlkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkZyYW1lSWQmKi8gY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBGcmFtZUlkU2V0KSwgcHJvcGVydHlfZnJhbWVJZF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImZyYW1lSWQiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8RnJhbWVJZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBTZWN1cml0eU9yaWdpblNldD4mIHNldFNlY3VyaXR5T3JpZ2luKGNvbnN0IFN0
cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgU2VjdXJpdHlPcmlnaW5TZXQpLCBwcm9wZXJ0eV9zZWN1cml0eU9yaWdpbl9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInNlY3VyaXR5T3JpZ2luIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNlY3VyaXR5T3JpZ2luU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERhdGFiYXNlTmFtZXNTZXQ+JiBzZXRE
YXRhYmFzZU5hbWVzKC8qUGFzc1JlZlB0cjxEYXRhYmFzZU5hbWVzPiovIFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIERhdGFiYXNlTmFtZXNTZXQpLCBwcm9wZXJ0eV9kYXRhYmFzZU5hbWVzX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJkYXRhYmFzZU5hbWVzIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERhdGFiYXNlTmFtZXNTZXQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8RnJhbWVXaXRoRGF0YWJhc2VOYW1l
cz4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxG
aWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmUHRyPEZyYW1lV2l0aERhdGFiYXNlTmFtZXM+Kj4oJm1fcmVzdWx0KTsK
ICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8RnJhbWVXaXRoRGF0YWJhc2VO
YW1lcz4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RnJhbWVXaXRoRGF0
YWJhc2VOYW1lcz4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxGcmFtZVdpdGhEYXRhYmFzZU5hbWVzPiBy
ZXN1bHQgPSBGcmFtZVdpdGhEYXRhYmFzZU5hbWVzOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRG
cmFtZUlkKC4uLikKICAgICAqICAgICAuc2V0U2VjdXJpdHlPcmlnaW4oLi4uKQogICAgICogICAg
IC5zZXREYXRhYmFzZU5hbWVzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmll
bGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0
PihhZG9wdFJlZihuZXcgRnJhbWVXaXRoRGF0YWJhc2VOYW1lcygpKSk7CiAgICB9Cn07Cgp9IC8v
IEluZGV4ZWREQgoKI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpuYW1lc3BhY2Ug
RE9NU3RvcmFnZSB7Ci8qIERPTSBTdG9yYWdlIGVudHJ5LiAqLwpjbGFzcyBFbnRyeSA6IHB1Ymxp
YyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCiAgICAgICAgSG9zdFNldCA9IDEgPDwgMCwKICAgICAgICBJc0xvY2FsU3RvcmFnZVNl
dCA9IDEgPDwgMSwKICAgICAgICBJZFNldCA9IDEgPDwgMiwKICAgICAgICBBbGxGaWVsZHNTZXQg
PSAoSG9zdFNldCB8IElzTG9jYWxTdG9yYWdlU2V0IHwgSWRTZXQpCiAgICB9OwoKICAgIHRlbXBs
YXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNU
RVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxFbnRyeT4gcHRyKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0g
cHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgRW50cnk7CiAgICBwdWJsaWM6Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBIb3N0U2V0PiYgc2V0SG9zdChjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhvc3RT
ZXQpLCBwcm9wZXJ0eV9ob3N0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygiaG9zdCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIb3N0
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IElzTG9jYWxTdG9yYWdl
U2V0PiYgc2V0SXNMb2NhbFN0b3JhZ2UoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJc0xvY2FsU3RvcmFnZVNldCksIHByb3BlcnR5X2lz
TG9jYWxTdG9yYWdlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xl
YW4oImlzTG9jYWxTdG9yYWdlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PElzTG9jYWxTdG9yYWdlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IElkU2V0PiYgc2V0SWQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIElkU2V0KSwgcHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJpZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxJZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxFbnRyeT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEVudHJ5Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoK
ICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEVudHJ5PiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuIFJlZlB0cjxFbnRyeT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoK
ICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxFbnRyeT4gcmVzdWx0
ID0gRW50cnk6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldEhvc3QoLi4uKQogICAgICogICAgIC5z
ZXRJc0xvY2FsU3RvcmFnZSguLi4pCiAgICAgKiAgICAgLnNldElkKC4uLik7CiAgICAgKi8KICAg
IHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVy
biBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgRW50cnkoKSkpOwogICAgfQp9OwoK
fSAvLyBET01TdG9yYWdlCgpuYW1lc3BhY2UgQXBwbGljYXRpb25DYWNoZSB7Ci8qIERldGFpbGVk
IGFwcGxpY2F0aW9uIGNhY2hlIHJlc291cmNlIGluZm9ybWF0aW9uLiAqLwpjbGFzcyBBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2UgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAg
ZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFVybFNldCA9IDEgPDwgMCwK
ICAgICAgICBTaXplU2V0ID0gMSA8PCAxLAogICAgICAgIFR5cGVTZXQgPSAxIDw8IDIsCiAgICAg
ICAgQWxsRmllbGRzU2V0ID0gKFVybFNldCB8IFNpemVTZXQgfCBUeXBlU2V0KQogICAgfTsKCiAg
ICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8QXBwbGljYXRp
b25DYWNoZVJlc291cmNlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBj
bGFzcyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBVcmxTZXQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVcmxTZXQpLCBwcm9wZXJ0eV91
cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1cmwiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VXJsU2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNpemVTZXQ+JiBzZXRTaXplKGludCB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTaXplU2V0KSwgcHJv
cGVydHlfc2l6ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIo
InNpemUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U2l6ZVNldD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFR5cGVTZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxUeXBlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1Jl
ZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+ICgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4oKnRoaXMpOwogICAgICAgIH0K
ICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0
cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHJlc3VsdCA9IEFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAqICAgICAuc2V0U2l6
ZSguLi4pCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UoKSkpOwogICAg
fQp9OwoKLyogRGV0YWlsZWQgYXBwbGljYXRpb24gY2FjaGUgaW5mb3JtYXRpb24uICovCmNsYXNz
IEFwcGxpY2F0aW9uQ2FjaGUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAg
Ly8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAncmVzb3VyY2VzJyB3aGlsZSBnZW5lcmF0aW5n
IEFwcGxpY2F0aW9uQ2FjaGUuCiAgICBjbGFzcyBSZXNvdXJjZXMgOiBwdWJsaWMgSW5zcGVjdG9y
QXJyYXkgewogICAgcHJpdmF0ZToKICAgICAgICBSZXNvdXJjZXMoKSB7IH0KCiAgICBwdWJsaWM6
CiAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXBwbGljYXRp
b25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFs
dWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVzb3VyY2VzPiBjcmVh
dGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVzb3VyY2VzKCkpOwogICAg
ICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAg
IE1hbmlmZXN0VVJMU2V0ID0gMSA8PCAwLAogICAgICAgIFNpemVTZXQgPSAxIDw8IDEsCiAgICAg
ICAgQ3JlYXRpb25UaW1lU2V0ID0gMSA8PCAyLAogICAgICAgIFVwZGF0ZVRpbWVTZXQgPSAxIDw8
IDMsCiAgICAgICAgUmVzb3VyY2VzU2V0ID0gMSA8PCA0LAogICAgICAgIEFsbEZpZWxkc1NldCA9
IChNYW5pZmVzdFVSTFNldCB8IFNpemVTZXQgfCBDcmVhdGlvblRpbWVTZXQgfCBVcGRhdGVUaW1l
U2V0IHwgUmVzb3VyY2VzU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBj
bGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwg
U1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyKFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gcHRyKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3Jl
YXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAg
ICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQXBwbGljYXRpb25DYWNoZTsKICAgIHB1YmxpYzoK
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1hbmlmZXN0VVJMU2V0PiYgc2V0TWFuaWZlc3RVUkwo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBNYW5pZmVzdFVSTFNldCksIHByb3BlcnR5X21hbmlmZXN0VVJMX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWFuaWZlc3RVUkwiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWFuaWZlc3RVUkxTZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU2l6ZVNldD4mIHNldFNpemUoZG91YmxlIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNpemVT
ZXQpLCBwcm9wZXJ0eV9zaXplX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dE51bWJlcigic2l6ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTaXpl
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENyZWF0aW9uVGltZVNl
dD4mIHNldENyZWF0aW9uVGltZShkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ3JlYXRpb25UaW1lU2V0KSwgcHJvcGVydHlfY3JlYXRp
b25UaW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiY3Jl
YXRpb25UaW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENyZWF0aW9u
VGltZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVcGRhdGVUaW1l
U2V0PiYgc2V0VXBkYXRlVGltZShkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgVXBkYXRlVGltZVNldCksIHByb3BlcnR5X3VwZGF0ZVRp
bWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJ1cGRhdGVU
aW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVwZGF0ZVRpbWVTZXQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUmVzb3VyY2VzU2V0PiYgc2V0
UmVzb3VyY2VzKC8qUGFzc1JlZlB0cjxSZXNvdXJjZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgUmVzb3VyY2VzU2V0KSwgcHJvcGVydHlfcmVzb3VyY2VzX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJyZXNvdXJjZXMiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8UmVzb3VyY2VzU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5
KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxBcHBsaWNhdGlv
bkNhY2hlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVm
UHRyPEFwcGxpY2F0aW9uQ2FjaGU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVm
UHRyPEFwcGxpY2F0aW9uQ2FjaGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8QXBwbGljYXRpb25DYWNo
ZT4gcmVzdWx0ID0gQXBwbGljYXRpb25DYWNoZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0TWFu
aWZlc3RVUkwoLi4uKQogICAgICogICAgIC5zZXRTaXplKC4uLikKICAgICAqICAgICAuc2V0Q3Jl
YXRpb25UaW1lKC4uLikKICAgICAqICAgICAuc2V0VXBkYXRlVGltZSguLi4pCiAgICAgKiAgICAg
LnNldFJlc291cmNlcyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRv
cHRSZWYobmV3IEFwcGxpY2F0aW9uQ2FjaGUoKSkpOwogICAgfQp9OwoKLyogRnJhbWUgaWRlbnRp
ZmllciAtIG1hbmlmZXN0IFVSTCBwYWlyLiAqLwpjbGFzcyBGcmFtZVdpdGhNYW5pZmVzdCA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxk
c1NldCA9IDAsCiAgICAgICAgRnJhbWVJZFNldCA9IDEgPDwgMCwKICAgICAgICBNYW5pZmVzdFVS
TFNldCA9IDEgPDwgMSwKICAgICAgICBTdGF0dXNTZXQgPSAxIDw8IDIsCiAgICAgICAgQWxsRmll
bGRzU2V0ID0gKEZyYW1lSWRTZXQgfCBNYW5pZmVzdFVSTFNldCB8IFN0YXR1c1NldCkKICAgIH07
CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRl
OgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1w
bGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAg
IHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEZyYW1l
V2l0aE1hbmlmZXN0PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
ICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFz
cyBGcmFtZVdpdGhNYW5pZmVzdDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IEZyYW1lSWRTZXQ+JiBzZXRGcmFtZUlkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkZy
YW1lSWQmKi8gY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBGcmFtZUlkU2V0KSwgcHJvcGVydHlfZnJhbWVJZF9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImZyYW1lSWQiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RnJhbWVJZFNldD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNYW5pZmVzdFVSTFNldD4mIHNldE1hbmlmZXN0VVJMKGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgTWFuaWZlc3RVUkxTZXQpLCBwcm9wZXJ0eV9tYW5pZmVzdFVSTF9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1hbmlmZXN0VVJMIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1hbmlmZXN0VVJMU2V0PigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0YXR1c1NldD4mIHNldFN0YXR1cyhpbnQgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RhdHVz
U2V0KSwgcHJvcGVydHlfc3RhdHVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE51bWJlcigic3RhdHVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFN0YXR1c1NldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxGcmFtZVdp
dGhNYW5pZmVzdD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEZyYW1lV2l0aE1hbmlmZXN0Pio+KCZtX3Jlc3Vs
dCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEZyYW1lV2l0aE1hbmlm
ZXN0PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxGcmFtZVdpdGhNYW5p
ZmVzdD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBj
b25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxGcmFtZVdpdGhNYW5pZmVzdD4gcmVzdWx0ID0gRnJh
bWVXaXRoTWFuaWZlc3Q6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldEZyYW1lSWQoLi4uKQogICAg
ICogICAgIC5zZXRNYW5pZmVzdFVSTCguLi4pCiAgICAgKiAgICAgLnNldFN0YXR1cyguLi4pOwog
ICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IEZyYW1lV2l0aE1h
bmlmZXN0KCkpKTsKICAgIH0KfTsKCn0gLy8gQXBwbGljYXRpb25DYWNoZQoKbmFtZXNwYWNlIERP
TSB7Ci8qIERPTSBpbnRlcmFjdGlvbiBpcyBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBtaXJyb3Ig
b2JqZWN0cyB0aGF0IHJlcHJlc2VudCB0aGUgYWN0dWFsIERPTSBub2Rlcy4gRE9NTm9kZSBpcyBh
IGJhc2Ugbm9kZSBtaXJyb3IgdHlwZS4gKi8KY2xhc3MgTm9kZSA6IHB1YmxpYyBJbnNwZWN0b3JP
YmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdjaGlsZHJl
bicgd2hpbGUgZ2VuZXJhdGluZyBOb2RlLgogICAgY2xhc3MgQ2hpbGRyZW4gOiBwdWJsaWMgSW5z
cGVjdG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAgICAgICBDaGlsZHJlbigpIHsgfQoKICAgIHB1
YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006
Ok5vZGU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDaGlsZHJlbj4gY3JlYXRlKCkgewogICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENoaWxkcmVuKCkpOwogICAgICAgIH0KICAgIH07CgogICAgLy8gTmFtZWQgYWZ0
ZXIgcHJvcGVydHkgbmFtZSAnYXR0cmlidXRlcycgd2hpbGUgZ2VuZXJhdGluZyBOb2RlLgogICAg
Y2xhc3MgQXR0cmlidXRlcyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICBwcml2YXRlOgog
ICAgICAgIEF0dHJpYnV0ZXMoKSB7IH0KCiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBhZGRJdGVt
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNoU3Ry
aW5nKHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF0dHJpYnV0
ZXM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBdHRyaWJ1dGVz
KCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAw
LAogICAgICAgIE5vZGVJZFNldCA9IDEgPDwgMCwKICAgICAgICBOb2RlVHlwZVNldCA9IDEgPDwg
MSwKICAgICAgICBOb2RlTmFtZVNldCA9IDEgPDwgMiwKICAgICAgICBMb2NhbE5hbWVTZXQgPSAx
IDw8IDMsCiAgICAgICAgTm9kZVZhbHVlU2V0ID0gMSA8PCA0LAogICAgICAgIEFsbEZpZWxkc1Nl
dCA9IChOb2RlSWRTZXQgfCBOb2RlVHlwZVNldCB8IE5vZGVOYW1lU2V0IHwgTG9jYWxOYW1lU2V0
IHwgTm9kZVZhbHVlU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFz
cyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RF
UD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyKFBhc3NSZWZQdHI8Tm9kZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBm
cmllbmQgY2xhc3MgTm9kZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5v
ZGVJZFNldD4mIHNldE5vZGVJZChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgTm9kZUlkU2V0KSwgcHJvcGVydHlfbm9kZUlkX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigibm9kZUlkIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vZGVJZFNldD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBOb2RlVHlwZVNldD4mIHNldE5vZGVUeXBlKGludCB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb2RlVHlwZVNl
dCksIHByb3BlcnR5X25vZGVUeXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE51bWJlcigibm9kZVR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8Tm9kZVR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm9k
ZU5hbWVTZXQ+JiBzZXROb2RlTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vZGVOYW1lU2V0KSwgcHJvcGVydHlf
bm9kZU5hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJu
b2RlTmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb2RlTmFtZVNl
dD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMb2NhbE5hbWVTZXQ+JiBz
ZXRMb2NhbE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBMb2NhbE5hbWVTZXQpLCBwcm9wZXJ0eV9sb2NhbE5hbWVf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJsb2NhbE5hbWUi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TG9jYWxOYW1lU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vZGVWYWx1ZVNldD4mIHNldE5vZGVW
YWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIE5vZGVWYWx1ZVNldCksIHByb3BlcnR5X25vZGVWYWx1ZV9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5vZGVWYWx1ZSIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb2RlVmFsdWVTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Tm9kZT4mICgpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPE5vZGU+Kj4o
Jm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Tm9kZT4g
KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Tm9kZT4oKnRoaXMpOwogICAg
ICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAq
IFJlZlB0cjxOb2RlPiByZXN1bHQgPSBOb2RlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXROb2Rl
SWQoLi4uKQogICAgICogICAgIC5zZXROb2RlVHlwZSguLi4pCiAgICAgKiAgICAgLnNldE5vZGVO
YW1lKC4uLikKICAgICAqICAgICAuc2V0TG9jYWxOYW1lKC4uLikKICAgICAqICAgICAuc2V0Tm9k
ZVZhbHVlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihu
ZXcgTm9kZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRDaGlsZE5vZGVDb3VudChpbnQgdmFsdWUp
CiAgICB7CiAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJjaGlsZE5vZGVDb3VudCIsIHZhbHVlKTsK
ICAgIH0KCiAgICB2b2lkIHNldENoaWxkcmVuKC8qUGFzc1JlZlB0cjxDaGlsZHJlbj4qLyBQYXNz
UmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRBcnJh
eSgiY2hpbGRyZW4iLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRBdHRyaWJ1dGVzKC8qUGFz
c1JlZlB0cjxBdHRyaWJ1dGVzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQog
ICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJhdHRyaWJ1dGVzIiwgdmFsdWUpOwogICAgfQoK
ICAgIHZvaWQgc2V0RG9jdW1lbnRVUkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAg
ICB0aGlzLT5zZXRTdHJpbmcoImRvY3VtZW50VVJMIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQg
c2V0UHVibGljSWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRT
dHJpbmcoInB1YmxpY0lkIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U3lzdGVtSWQoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInN5c3RlbUlk
IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0SW50ZXJuYWxTdWJzZXQoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoImludGVybmFsU3Vic2V0Iiwg
dmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0WG1sVmVyc2lvbihjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygieG1sVmVyc2lvbiIsIHZhbHVlKTsKICAg
IH0KCiAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRWYWx1ZShj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygidmFsdWUi
LCB2YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3JPYmplY3Q6OnNldFZhbHVlOwoKfTsK
Ci8qIERPTSBpbnRlcmFjdGlvbiBpcyBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBtaXJyb3Igb2Jq
ZWN0cyB0aGF0IHJlcHJlc2VudCB0aGUgYWN0dWFsIERPTSBub2Rlcy4gRE9NTm9kZSBpcyBhIGJh
c2Ugbm9kZSBtaXJyb3IgdHlwZS4gKi8KY2xhc3MgRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBJbnNw
ZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAs
CiAgICAgICAgVHlwZVNldCA9IDEgPDwgMCwKICAgICAgICBVc2VDYXB0dXJlU2V0ID0gMSA8PCAx
LAogICAgICAgIElzQXR0cmlidXRlU2V0ID0gMSA8PCAyLAogICAgICAgIE5vZGVJZFNldCA9IDEg
PDwgMywKICAgICAgICBIYW5kbGVyQm9keVNldCA9IDEgPDwgNCwKICAgICAgICBBbGxGaWVsZHNT
ZXQgPSAoVHlwZVNldCB8IFVzZUNhcHR1cmVTZXQgfCBJc0F0dHJpYnV0ZVNldCB8IE5vZGVJZFNl
dCB8IEhhbmRsZXJCb2R5U2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBj
bGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwg
U1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gcHRyKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRl
ZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAg
IH0KICAgICAgICBmcmllbmQgY2xhc3MgRXZlbnRMaXN0ZW5lcjsKICAgIHB1YmxpYzoKCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNldCks
IHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVXNlQ2FwdHVyZVNldD4mIHNl
dFVzZUNhcHR1cmUoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBVc2VDYXB0dXJlU2V0KSwgcHJvcGVydHlfdXNlQ2FwdHVyZV9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJ1c2VDYXB0dXJlIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVzZUNhcHR1cmVTZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSXNBdHRyaWJ1dGVTZXQ+JiBzZXRJc0F0dHJp
YnV0ZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIElzQXR0cmlidXRlU2V0KSwgcHJvcGVydHlfaXNBdHRyaWJ1dGVfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigiaXNBdHRyaWJ1dGUiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SXNBdHRyaWJ1dGVTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm9kZUlkU2V0PiYgc2V0Tm9kZUlkKGludCB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb2RlSWRT
ZXQpLCBwcm9wZXJ0eV9ub2RlSWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0TnVtYmVyKCJub2RlSWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
Tm9kZUlkU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEhhbmRsZXJC
b2R5U2V0PiYgc2V0SGFuZGxlckJvZHkoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIYW5kbGVyQm9keVNldCksIHByb3Bl
cnR5X2hhbmRsZXJCb2R5X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygiaGFuZGxlckJvZHkiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
SGFuZGxlckJvZHlTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEV2ZW50TGlzdGVuZXI+Kj4oJm1fcmVzdWx0KTsK
ICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4oKnRoaXMp
OwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
ICAgICAqIFJlZlB0cjxFdmVudExpc3RlbmVyPiByZXN1bHQgPSBFdmVudExpc3RlbmVyOjpjcmVh
dGUoKQogICAgICogICAgIC5zZXRUeXBlKC4uLikKICAgICAqICAgICAuc2V0VXNlQ2FwdHVyZSgu
Li4pCiAgICAgKiAgICAgLnNldElzQXR0cmlidXRlKC4uLikKICAgICAqICAgICAuc2V0Tm9kZUlk
KC4uLikKICAgICAqICAgICAuc2V0SGFuZGxlckJvZHkoLi4uKTsKICAgICAqLwogICAgc3RhdGlj
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBFdmVudExpc3RlbmVyKCkpKTsKICAgIH0KCiAg
ICB2b2lkIHNldExvY2F0aW9uKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6Okxv
Y2F0aW9uPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAg
ICB0aGlzLT5zZXRPYmplY3QoImxvY2F0aW9uIiwgdmFsdWUpOwogICAgfQp9OwoKLyogQSBzdHJ1
Y3R1cmUgaG9sZGluZyBhbiBSR0JBIGNvbG9yLiAqLwovLyBUeXBlIG9yaWdpbmFsbHkgd2FzIG5h
bWVkICdSR0JBJy4KY2xhc3MgUmdiYSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6
CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgUlNldCA9IDEgPDwg
MCwKICAgICAgICBHU2V0ID0gMSA8PCAxLAogICAgICAgIEJTZXQgPSAxIDw8IDIsCiAgICAgICAg
QWxsRmllbGRzU2V0ID0gKFJTZXQgfCBHU2V0IHwgQlNldCkKICAgIH07CgogICAgdGVtcGxhdGU8
aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFJnYmE+IHB0cikKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsK
ICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFJnYmE7CiAgICBwdWJsaWM6CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBSU2V0PiYgc2V0UihpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUlNldCksIHByb3BlcnR5X3JfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJyIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFJTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgR1NldD4mIHNldEcoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIEdTZXQpLCBwcm9wZXJ0eV9nX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiZyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxHU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IEJTZXQ+JiBzZXRCKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBCU2V0KSwgcHJvcGVydHlfYl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXROdW1iZXIoImIiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8QlNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxSZ2JhPiYg
KCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxk
c1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxSZWZQdHI8UmdiYT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUGFzc1JlZlB0cjxSZ2JhPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJl
ZlB0cjxSZ2JhPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFJnYmE+IHJlc3VsdCA9IFJnYmE6OmNyZWF0
ZSgpCiAgICAgKiAgICAgLnNldFIoLi4uKQogICAgICogICAgIC5zZXRHKC4uLikKICAgICAqICAg
ICAuc2V0QiguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3Jl
YXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYo
bmV3IFJnYmEoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0QShkb3VibGUgdmFsdWUpCiAgICB7CiAg
ICAgICAgdGhpcy0+c2V0TnVtYmVyKCJhIiwgdmFsdWUpOwogICAgfQp9OwoKLyogQ29uZmlndXJh
dGlvbiBkYXRhIGZvciB0aGUgaGlnaGxpZ2h0aW5nIG9mIHBhZ2UgZWxlbWVudHMuICovCmNsYXNz
IEhpZ2hsaWdodENvbmZpZyA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBl
bnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gMAog
ICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHBy
aXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8
SGlnaGxpZ2h0Q29uZmlnPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBj
bGFzcyBIaWdobGlnaHRDb25maWc7CiAgICBwdWJsaWM6CgogICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxIaWdobGlnaHRDb25maWc+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxIaWdobGlnaHRDb25maWc+Kj4oJm1f
cmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8SGlnaGxpZ2h0
Q29uZmlnPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxIaWdobGlnaHRD
b25maWc+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8SGlnaGxpZ2h0Q29uZmlnPiByZXN1bHQgPSBIaWdo
bGlnaHRDb25maWc6OmNyZWF0ZSgpOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxk
c1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4o
YWRvcHRSZWYobmV3IEhpZ2hsaWdodENvbmZpZygpKSk7CiAgICB9CgogICAgdm9pZCBzZXRTaG93
SW5mbyhib29sIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4oInNob3dJbmZv
IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0Q29udGVudENvbG9yKC8qUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6RE9NOjpSZ2JhPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoImNvbnRlbnRDb2xvciIsIHZhbHVlKTsK
ICAgIH0KCiAgICB2b2lkIHNldFBhZGRpbmdDb2xvcigvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
OkRPTTo6UmdiYT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAg
ICAgICAgdGhpcy0+c2V0T2JqZWN0KCJwYWRkaW5nQ29sb3IiLCB2YWx1ZSk7CiAgICB9CgogICAg
dm9pZCBzZXRCb3JkZXJDb2xvcigvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6UmdiYT4q
LyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0T2JqZWN0KCJib3JkZXJDb2xvciIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldE1hcmdp
bkNvbG9yKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpSZ2JhPiovIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoIm1h
cmdpbkNvbG9yIiwgdmFsdWUpOwogICAgfQp9OwoKfSAvLyBET00KCm5hbWVzcGFjZSBDU1Mgewov
KiBUaGlzIG9iamVjdCBpZGVudGlmaWVzIGEgQ1NTIHN0eWxlIGluIGEgdW5pcXVlIHdheS4gKi8K
Y2xhc3MgQ1NTU3R5bGVJZCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBl
bnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgU3R5bGVTaGVldElkU2V0ID0g
MSA8PCAwLAogICAgICAgIE9yZGluYWxTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0
ID0gKFN0eWxlU2hlZXRJZFNldCB8IE9yZGluYWxTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHlsZUlkPiBwdHIpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVp
bGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBw
dHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDU1NTdHlsZUlkOwogICAgcHVibGlj
OgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3R5bGVTaGVldElkU2V0PiYgc2V0U3R5bGVTaGVl
dElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgU3R5bGVTaGVldElkU2V0KSwgcHJvcGVydHlfc3R5bGVTaGVldElkX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3R5bGVTaGVldElk
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0eWxlU2hlZXRJZFNldD4o
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPcmRpbmFsU2V0PiYgc2V0T3Jk
aW5hbChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgT3JkaW5hbFNldCksIHByb3BlcnR5X29yZGluYWxfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJvcmRpbmFsIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPE9yZGluYWxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBSZWZQdHI8Q1NTU3R5bGVJZD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENTU1N0eWxlSWQ+Kj4oJm1fcmVz
dWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q1NTU3R5bGVJZD4g
KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NTU3R5bGVJZD4oKnRoaXMp
OwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
ICAgICAqIFJlZlB0cjxDU1NTdHlsZUlkPiByZXN1bHQgPSBDU1NTdHlsZUlkOjpjcmVhdGUoKQog
ICAgICogICAgIC5zZXRTdHlsZVNoZWV0SWQoLi4uKQogICAgICogICAgIC5zZXRPcmRpbmFsKC4u
Lik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAg
ewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgQ1NTU3R5
bGVJZCgpKSk7CiAgICB9Cn07CgovKiBUaGlzIG9iamVjdCBpZGVudGlmaWVzIGEgQ1NTIHJ1bGUg
aW4gYSB1bmlxdWUgd2F5LiAqLwpjbGFzcyBDU1NSdWxlSWQgOiBwdWJsaWMgSW5zcGVjdG9yT2Jq
ZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAg
IFN0eWxlU2hlZXRJZFNldCA9IDEgPDwgMCwKICAgICAgICBPcmRpbmFsU2V0ID0gMSA8PCAxLAog
ICAgICAgIEFsbEZpZWxkc1NldCA9IChTdHlsZVNoZWV0SWRTZXQgfCBPcmRpbmFsU2V0KQogICAg
fTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZh
dGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q1NT
UnVsZUlkPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAg
ICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDU1NS
dWxlSWQ7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHlsZVNoZWV0SWRT
ZXQ+JiBzZXRTdHlsZVNoZWV0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHlsZVNoZWV0SWRTZXQpLCBwcm9wZXJ0
eV9zdHlsZVNoZWV0SWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJzdHlsZVNoZWV0SWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
U3R5bGVTaGVldElkU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE9y
ZGluYWxTZXQ+JiBzZXRPcmRpbmFsKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPcmRpbmFsU2V0KSwgcHJvcGVydHlfb3JkaW5hbF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm9yZGluYWwiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T3JkaW5hbFNldD4oKTsKICAgICAgICB9
CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NSdWxlSWQ+JiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NS
dWxlSWQ+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQ
dHI8Q1NTUnVsZUlkPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDU1NS
dWxlSWQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTUnVsZUlkPiByZXN1bHQgPSBDU1NSdWxlSWQ6
OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFN0eWxlU2hlZXRJZCguLi4pCiAgICAgKiAgICAgLnNl
dE9yZGluYWwoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNy
ZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVm
KG5ldyBDU1NSdWxlSWQoKSkpOwogICAgfQp9OwoKLyogQ1NTIHJ1bGUgY29sbGVjdGlvbiBmb3Ig
YSBzaW5nbGUgcHNldWRvIHN0eWxlLiAqLwpjbGFzcyBQc2V1ZG9JZFJ1bGVzIDogcHVibGljIElu
c3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUg
J3J1bGVzJyB3aGlsZSBnZW5lcmF0aW5nIFBzZXVkb0lkUnVsZXMuCiAgICBjbGFzcyBSdWxlcyA6
IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICBwcml2YXRlOgogICAgICAgIFJ1bGVzKCkgeyB9
CgogICAgcHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkNTUzo6Q1NTUnVsZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9Cgog
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJ1bGVzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgUnVsZXMoKSk7CiAgICAgICAgfQogICAgfTsKCiAgICBlbnVtIHsK
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgUHNldWRvSWRTZXQgPSAxIDw8IDAsCiAg
ICAgICAgUnVsZXNTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFBzZXVkb0lk
U2V0IHwgUnVsZXNTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNz
IEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBt
X3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
PiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXIoUGFzc1JlZlB0cjxQc2V1ZG9JZFJ1bGVzPiBwdHIpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQog
ICAgICAgIGZyaWVuZCBjbGFzcyBQc2V1ZG9JZFJ1bGVzOwogICAgcHVibGljOgoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgUHNldWRvSWRTZXQ+JiBzZXRQc2V1ZG9JZChpbnQgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUHNldWRvSWRTZXQpLCBw
cm9wZXJ0eV9wc2V1ZG9JZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRO
dW1iZXIoInBzZXVkb0lkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBz
ZXVkb0lkU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJ1bGVzU2V0
PiYgc2V0UnVsZXMoLypQYXNzUmVmUHRyPFJ1bGVzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFJ1bGVzU2V0KSwgcHJvcGVydHlfcnVsZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0QXJyYXkoInJ1bGVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFJ1bGVzU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFBzZXVk
b0lkUnVsZXM+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxQc2V1ZG9JZFJ1bGVzPio+KCZtX3Jlc3VsdCk7CiAg
ICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFBzZXVkb0lkUnVsZXM+ICgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFBzZXVkb0lkUnVsZXM+KCp0aGlzKTsK
ICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAg
ICAgKiBSZWZQdHI8UHNldWRvSWRSdWxlcz4gcmVzdWx0ID0gUHNldWRvSWRSdWxlczo6Y3JlYXRl
KCkKICAgICAqICAgICAuc2V0UHNldWRvSWQoLi4uKQogICAgICogICAgIC5zZXRSdWxlcyguLi4p
OwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsK
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFBzZXVkb0lk
UnVsZXMoKSkpOwogICAgfQp9OwoKLyogQ1NTIHJ1bGUgY29sbGVjdGlvbiBmb3IgYSBzaW5nbGUg
cHNldWRvIHN0eWxlLiAqLwpjbGFzcyBJbmhlcml0ZWRTdHlsZUVudHJ5IDogcHVibGljIEluc3Bl
Y3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ21h
dGNoZWRDU1NSdWxlcycgd2hpbGUgZ2VuZXJhdGluZyBJbmhlcml0ZWRTdHlsZUVudHJ5LgogICAg
Y2xhc3MgTWF0Y2hlZENTU1J1bGVzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAgIHByaXZh
dGU6CiAgICAgICAgTWF0Y2hlZENTU1J1bGVzKCkgeyB9CgogICAgcHVibGljOgogICAgICAgIHZv
aWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4qLyBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlz
LT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PE1hdGNoZWRDU1NSdWxlcz4gY3JlYXRlKCkgewogICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IE1hdGNoZWRDU1NSdWxlcygpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBNYXRjaGVkQ1NTUnVsZXNTZXQgPSAxIDw8IDAs
CiAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1hdGNoZWRDU1NSdWxlc1NldCkKICAgIH07CgogICAg
dGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxp
bnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+
KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEluaGVyaXRlZFN0
eWxlRW50cnk+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAg
ICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIElu
aGVyaXRlZFN0eWxlRW50cnk7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBN
YXRjaGVkQ1NTUnVsZXNTZXQ+JiBzZXRNYXRjaGVkQ1NTUnVsZXMoLypQYXNzUmVmUHRyPE1hdGNo
ZWRDU1NSdWxlcz4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNYXRjaGVkQ1NTUnVsZXNTZXQp
LCBwcm9wZXJ0eV9tYXRjaGVkQ1NTUnVsZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0QXJyYXkoIm1hdGNoZWRDU1NSdWxlcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxNYXRjaGVkQ1NTUnVsZXNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBSZWZQdHI8SW5oZXJpdGVkU3R5bGVFbnRyeT4mICgpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEluaGVy
aXRlZFN0eWxlRW50cnk+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9y
IFBhc3NSZWZQdHI8SW5oZXJpdGVkU3R5bGVFbnRyeT4gKCkKICAgICAgICB7CiAgICAgICAgICAg
IHJldHVybiBSZWZQdHI8SW5oZXJpdGVkU3R5bGVFbnRyeT4oKnRoaXMpOwogICAgICAgIH0KICAg
IH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxJ
bmhlcml0ZWRTdHlsZUVudHJ5PiByZXN1bHQgPSBJbmhlcml0ZWRTdHlsZUVudHJ5OjpjcmVhdGUo
KQogICAgICogICAgIC5zZXRNYXRjaGVkQ1NTUnVsZXMoLi4uKTsKICAgICAqLwogICAgc3RhdGlj
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBJbmhlcml0ZWRTdHlsZUVudHJ5KCkpKTsKICAg
IH0KCiAgICB2b2lkIHNldElubGluZVN0eWxlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NT
OjpDU1NTdHlsZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAg
ICAgICAgdGhpcy0+c2V0T2JqZWN0KCJpbmxpbmVTdHlsZSIsIHZhbHVlKTsKICAgIH0KfTsKCi8q
IENTUyBzdHlsZSBpbmZvcm1hdGlvbiBmb3IgYSBET00gc3R5bGUgYXR0cmlidXRlLiAqLwpjbGFz
cyBDU1NTdHlsZUF0dHJpYnV0ZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAg
ICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgTmFtZVNldCA9IDEgPDwg
MCwKICAgICAgICBTdHlsZVNldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTmFt
ZVNldCB8IFN0eWxlU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFz
cyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RF
UD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyKFBhc3NSZWZQdHI8Q1NTU3R5bGVBdHRyaWJ1dGU+IHB0cikKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0
ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAg
ICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxlQXR0cmlidXRlOwogICAgcHVibGljOgoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTmFtZVNldD4mIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOYW1l
U2V0KSwgcHJvcGVydHlfbmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TmFt
ZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHlsZVNldD4mIHNl
dFN0eWxlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4qLyBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgU3R5bGVTZXQpLCBwcm9wZXJ0eV9zdHlsZV9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInN0eWxlIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFN0eWxlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUmVmUHRyPENTU1N0eWxlQXR0cmlidXRlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTU3R5bGVB
dHRyaWJ1dGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NS
ZWZQdHI8Q1NTU3R5bGVBdHRyaWJ1dGU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
UmVmUHRyPENTU1N0eWxlQXR0cmlidXRlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAv
KgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU1N0eWxlQXR0
cmlidXRlPiByZXN1bHQgPSBDU1NTdHlsZUF0dHJpYnV0ZTo6Y3JlYXRlKCkKICAgICAqICAgICAu
c2V0TmFtZSguLi4pCiAgICAgKiAgICAgLnNldFN0eWxlKC4uLik7CiAgICAgKi8KICAgIHN0YXRp
YyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWls
ZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgQ1NTU3R5bGVBdHRyaWJ1dGUoKSkpOwogICAg
fQp9OwoKLyogQ1NTIHN0eWxlc2hlZXQgbWV0YWluZm9ybWF0aW9uLiAqLwpjbGFzcyBDU1NTdHls
ZVNoZWV0SGVhZGVyIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0g
ewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBTdHlsZVNoZWV0SWRTZXQgPSAxIDw8
IDAsCiAgICAgICAgU291cmNlVVJMU2V0ID0gMSA8PCAxLAogICAgICAgIFRpdGxlU2V0ID0gMSA8
PCAyLAogICAgICAgIERpc2FibGVkU2V0ID0gMSA8PCAzLAogICAgICAgIEFsbEZpZWxkc1NldCA9
IChTdHlsZVNoZWV0SWRTZXQgfCBTb3VyY2VVUkxTZXQgfCBUaXRsZVNldCB8IERpc2FibGVkU2V0
KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAg
IHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAg
ICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgp
CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxT
VEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQ
dHI8Q1NTU3R5bGVTaGVldEhlYWRlcj4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBm
cmllbmQgY2xhc3MgQ1NTU3R5bGVTaGVldEhlYWRlcjsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFN0eWxlU2hlZXRJZFNldD4mIHNldFN0eWxlU2hlZXRJZChjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFN0eWxlU2hlZXRJZFNldCksIHByb3BlcnR5X3N0eWxlU2hlZXRJZF9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHlsZVNoZWV0SWRTZXQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU291cmNlVVJMU2V0PiYgc2V0U291cmNlVVJMKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgU291cmNlVVJMU2V0KSwgcHJvcGVydHlfc291cmNlVVJMX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic291cmNlVVJMIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFNvdXJjZVVSTFNldD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBUaXRsZVNldD4mIHNldFRpdGxlKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVGl0bGVTZXQp
LCBwcm9wZXJ0eV90aXRsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoInRpdGxlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpdGxl
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERpc2FibGVkU2V0PiYg
c2V0RGlzYWJsZWQoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBEaXNhYmxlZFNldCksIHByb3BlcnR5X2Rpc2FibGVkX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImRpc2FibGVkIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERpc2FibGVkU2V0PigpOwogICAgICAgIH0KCiAg
ICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+JiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0
cjxDU1NTdHlsZVNoZWV0SGVhZGVyPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+ICgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gUmVmUHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+KCp0aGlzKTsKICAgICAg
ICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBS
ZWZQdHI8Q1NTU3R5bGVTaGVldEhlYWRlcj4gcmVzdWx0ID0gQ1NTU3R5bGVTaGVldEhlYWRlcjo6
Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3R5bGVTaGVldElkKC4uLikKICAgICAqICAgICAuc2V0
U291cmNlVVJMKC4uLikKICAgICAqICAgICAuc2V0VGl0bGUoLi4uKQogICAgICogICAgIC5zZXRE
aXNhYmxlZCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3Jl
YXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYo
bmV3IENTU1N0eWxlU2hlZXRIZWFkZXIoKSkpOwogICAgfQp9OwoKLyogQ1NTIHN0eWxlc2hlZXQg
Y29udGVudHMuICovCmNsYXNzIENTU1N0eWxlU2hlZXRCb2R5IDogcHVibGljIEluc3BlY3Rvck9i
amVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3J1bGVzJyB3
aGlsZSBnZW5lcmF0aW5nIENTU1N0eWxlU2hlZXRCb2R5LgogICAgY2xhc3MgUnVsZXMgOiBwdWJs
aWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAgICAgICBSdWxlcygpIHsgfQoKICAg
IHB1YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpD
U1M6OkNTU1J1bGU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7CiAgICAgICAgfQoKICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxSdWxlcz4gY3JlYXRlKCkgewogICAgICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFJ1bGVzKCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAg
ICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFN0eWxlU2hlZXRJZFNldCA9IDEgPDwgMCwKICAg
ICAgICBSdWxlc1NldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU3R5bGVTaGVl
dElkU2V0IHwgUnVsZXNTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNs
YXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0Qm9keT4gcHRyKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3Jl
YXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAg
ICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTU3R5bGVTaGVldEJvZHk7CiAgICBwdWJsaWM6
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHlsZVNoZWV0SWRTZXQ+JiBzZXRTdHlsZVNoZWV0
SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBTdHlsZVNoZWV0SWRTZXQpLCBwcm9wZXJ0eV9zdHlsZVNoZWV0SWRfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3R5bGVTaGVldElkU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJ1bGVzU2V0PiYgc2V0UnVsZXMo
LypQYXNzUmVmUHRyPFJ1bGVzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJ1bGVzU2V0KSwg
cHJvcGVydHlfcnVsZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJy
YXkoInJ1bGVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFJ1bGVzU2V0
PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1N0eWxlU2hlZXRCb2R5
PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+Kj4oJm1fcmVzdWx0KTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+ICgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENTU1N0eWxlU2hlZXRCb2R5PigqdGhp
cyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgogICAgICogUmVmUHRyPENTU1N0eWxlU2hlZXRCb2R5PiByZXN1bHQgPSBDU1NTdHlsZVNoZWV0
Qm9keTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3R5bGVTaGVldElkKC4uLikKICAgICAqICAg
ICAuc2V0UnVsZXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0
UmVmKG5ldyBDU1NTdHlsZVNoZWV0Qm9keSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRUZXh0KGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJ0ZXh0Iiwg
dmFsdWUpOwogICAgfQp9OwoKLyogQ1NTIHJ1bGUgcmVwcmVzZW50YXRpb24uICovCmNsYXNzIENT
U1J1bGUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0
ZXIgcHJvcGVydHkgbmFtZSAnb3JpZ2luJyB3aGlsZSBnZW5lcmF0aW5nIENTU1J1bGUuCiAgICBz
dHJ1Y3QgT3JpZ2luIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBVc2VyID0gNDAs
CiAgICAgICAgICAgIFVzZXJfYWdlbnQgPSA0MSwKICAgICAgICAgICAgSW5zcGVjdG9yID0gNDIs
CiAgICAgICAgICAgIFJlZ3VsYXIgPSA0MywKICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0IE9y
aWdpbgoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ21lZGlhJyB3aGlsZSBnZW5l
cmF0aW5nIENTU1J1bGUuCiAgICBjbGFzcyBNZWRpYSA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7
CiAgICBwcml2YXRlOgogICAgICAgIE1lZGlhKCkgeyB9CgogICAgcHVibGljOgogICAgICAgIHZv
aWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTTWVkaWE+Ki8gUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgdGhp
cy0+cHVzaE9iamVjdCh2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxNZWRpYT4gY3JlYXRlKCkgewogICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlh
KCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAw
LAogICAgICAgIFNlbGVjdG9yVGV4dFNldCA9IDEgPDwgMCwKICAgICAgICBTb3VyY2VMaW5lU2V0
ID0gMSA8PCAxLAogICAgICAgIE9yaWdpblNldCA9IDEgPDwgMiwKICAgICAgICBTdHlsZVNldCA9
IDEgPDwgMywKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU2VsZWN0b3JUZXh0U2V0IHwgU291cmNl
TGluZVNldCB8IE9yaWdpblNldCB8IFN0eWxlU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWls
ZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q1NTUnVsZT4gcHRyKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwog
ICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTUnVsZTsKICAgIHB1YmxpYzoKCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFNlbGVjdG9yVGV4dFNldD4mIHNldFNlbGVjdG9yVGV4dChjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFNlbGVjdG9yVGV4dFNldCksIHByb3BlcnR5X3NlbGVjdG9yVGV4dF9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInNlbGVjdG9yVGV4dCIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTZWxlY3RvclRleHRTZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU291cmNlTGluZVNldD4mIHNldFNvdXJjZUxp
bmUoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFNvdXJjZUxpbmVTZXQpLCBwcm9wZXJ0eV9zb3VyY2VMaW5lX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic291cmNlTGluZSIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTb3VyY2VMaW5lU2V0PigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IE9yaWdpblNldD4mIHNldE9yaWdpbihPcmlnaW46OkVudW0gdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT3JpZ2lu
U2V0KSwgcHJvcGVydHlfb3JpZ2luX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygib3JpZ2luIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPcmlnaW5TZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgT3JpZ2luU2V0PiYgc2V0T3JpZ2luKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT3JpZ2luU2V0
KSwgcHJvcGVydHlfb3JpZ2luX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygib3JpZ2luIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9y
aWdpblNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHlsZVNldD4m
IHNldFN0eWxlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4qLyBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgU3R5bGVTZXQpLCBwcm9wZXJ0eV9zdHlsZV9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInN0eWxlIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0eWxlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUmVmUHRyPENTU1J1bGU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NSdWxlPio+KCZtX3Jl
c3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1J1bGU+ICgp
CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENTU1J1bGU+KCp0aGlzKTsKICAg
ICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAg
KiBSZWZQdHI8Q1NTUnVsZT4gcmVzdWx0ID0gQ1NTUnVsZTo6Y3JlYXRlKCkKICAgICAqICAgICAu
c2V0U2VsZWN0b3JUZXh0KC4uLikKICAgICAqICAgICAuc2V0U291cmNlTGluZSguLi4pCiAgICAg
KiAgICAgLnNldE9yaWdpbiguLi4pCiAgICAgKiAgICAgLnNldFN0eWxlKC4uLik7CiAgICAgKi8K
ICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgQ1NTUnVsZSgpKSk7CiAgICB9
CgogICAgdm9pZCBzZXRSdWxlSWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1
bGVJZD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAg
dGhpcy0+c2V0T2JqZWN0KCJydWxlSWQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTb3Vy
Y2VVUkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmco
InNvdXJjZVVSTCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFNlbGVjdG9yUmFuZ2UoLypQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdlPiovIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInNlbGVj
dG9yUmFuZ2UiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRNZWRpYSgvKlBhc3NSZWZQdHI8
TWVkaWE+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICB7CiAgICAgICAg
dGhpcy0+c2V0QXJyYXkoIm1lZGlhIiwgdmFsdWUpOwogICAgfQp9OwoKLyogVGV4dCByYW5nZSB3
aXRoaW4gYSByZXNvdXJjZS4gKi8KY2xhc3MgU291cmNlUmFuZ2UgOiBwdWJsaWMgSW5zcGVjdG9y
T2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAg
ICAgIFN0YXJ0U2V0ID0gMSA8PCAwLAogICAgICAgIEVuZFNldCA9IDEgPDwgMSwKICAgICAgICBB
bGxGaWVsZHNTZXQgPSAoU3RhcnRTZXQgfCBFbmRTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxTb3VyY2VSYW5nZT4gcHRyKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0g
cHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgU291cmNlUmFuZ2U7CiAgICBwdWJs
aWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdGFydFNldD4mIHNldFN0YXJ0KGludCB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdGFydFNl
dCksIHByb3BlcnR5X3N0YXJ0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dE51bWJlcigic3RhcnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3Rh
cnRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRW5kU2V0PiYgc2V0
RW5kKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBFbmRTZXQpLCBwcm9wZXJ0eV9lbmRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0TnVtYmVyKCJlbmQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8RW5kU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFNvdXJjZVJh
bmdlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFs
bEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxSZWZQdHI8U291cmNlUmFuZ2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9
CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8U291cmNlUmFuZ2U+ICgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gUmVmUHRyPFNvdXJjZVJhbmdlPigqdGhpcyk7CiAgICAgICAgfQog
ICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRy
PFNvdXJjZVJhbmdlPiByZXN1bHQgPSBTb3VyY2VSYW5nZTo6Y3JlYXRlKCkKICAgICAqICAgICAu
c2V0U3RhcnQoLi4uKQogICAgICogICAgIC5zZXRFbmQoLi4uKTsKICAgICAqLwogICAgc3RhdGlj
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBTb3VyY2VSYW5nZSgpKSk7CiAgICB9Cn07Cgpj
bGFzcyBDU1NDb21wdXRlZFN0eWxlUHJvcGVydHkgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsK
cHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIE5hbWVT
ZXQgPSAxIDw8IDAsCiAgICAgICAgVmFsdWVTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRz
U2V0ID0gKE5hbWVTZXQgfCBWYWx1ZVNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRF
PgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxT
VEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4gcHRy
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNT
ZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVz
dWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTQ29tcHV0ZWRTdHls
ZVByb3BlcnR5OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTmFtZVNldD4m
IHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBOYW1lU2V0KSwgcHJvcGVydHlfbmFtZV9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8TmFtZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBWYWx1ZVNldD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVTZXQpLCBwcm9w
ZXJ0eV92YWx1ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InZhbHVlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVQcm9w
ZXJ0eT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
bGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4qPigmbV9yZXN1
bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NDb21wdXRlZFN0
eWxlUHJvcGVydHk+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENTU0Nv
bXB1dGVkU3R5bGVQcm9wZXJ0eT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAg
ICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxl
UHJvcGVydHk+IHJlc3VsdCA9IENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eTo6Y3JlYXRlKCkKICAg
ICAqICAgICAuc2V0TmFtZSguLi4pCiAgICAgKiAgICAgLnNldFZhbHVlKC4uLik7CiAgICAgKi8K
ICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgQ1NTQ29tcHV0ZWRTdHlsZVBy
b3BlcnR5KCkpKTsKICAgIH0KfTsKCi8qIENTUyBzdHlsZSByZXByZXNlbnRhdGlvbi4gKi8KY2xh
c3MgQ1NTU3R5bGUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFt
ZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnY3NzUHJvcGVydGllcycgd2hpbGUgZ2VuZXJhdGluZyBD
U1NTdHlsZS4KICAgIGNsYXNzIENzc1Byb3BlcnRpZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkg
ewogICAgcHJpdmF0ZToKICAgICAgICBDc3NQcm9wZXJ0aWVzKCkgeyB9CgogICAgcHVibGljOgog
ICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJv
cGVydHk+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDc3NQcm9wZXJ0aWVzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ3NzUHJvcGVydGllcygpKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8v
IE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3Nob3J0aGFuZEVudHJpZXMnIHdoaWxlIGdlbmVy
YXRpbmcgQ1NTU3R5bGUuCiAgICBjbGFzcyBTaG9ydGhhbmRFbnRyaWVzIDogcHVibGljIEluc3Bl
Y3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAgU2hvcnRoYW5kRW50cmllcygpIHsgfQoK
ICAgIHB1YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7
CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaG9ydGhhbmRFbnRyaWVzPiBj
cmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hvcnRoYW5kRW50cmll
cygpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKICAgICAgICBDc3NQcm9wZXJ0aWVzU2V0ID0gMSA8PCAwLAogICAgICAgIFNob3J0aGFuZEVu
dHJpZXNTZXQgPSAxIDw8IDEsCiAgICAgICAgV2lkdGhTZXQgPSAxIDw8IDIsCiAgICAgICAgSGVp
Z2h0U2V0ID0gMSA8PCAzLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChDc3NQcm9wZXJ0aWVzU2V0
IHwgU2hvcnRoYW5kRW50cmllc1NldCB8IFdpZHRoU2V0IHwgSGVpZ2h0U2V0KQogICAgfTsKCiAg
ICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q1NTU3R5bGU+
IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmll
bGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBt
X3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxlOwog
ICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ3NzUHJvcGVydGllc1NldD4mIHNl
dENzc1Byb3BlcnRpZXMoLypQYXNzUmVmUHRyPENzc1Byb3BlcnRpZXM+Ki8gUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgQ3NzUHJvcGVydGllc1NldCksIHByb3BlcnR5X2Nzc1Byb3BlcnRpZXNfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImNzc1Byb3BlcnRpZXMi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q3NzUHJvcGVydGllc1NldD4o
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTaG9ydGhhbmRFbnRyaWVzU2V0
PiYgc2V0U2hvcnRoYW5kRW50cmllcygvKlBhc3NSZWZQdHI8U2hvcnRoYW5kRW50cmllcz4qLyBQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTaG9ydGhhbmRFbnRyaWVzU2V0KSwgcHJvcGVydHlfc2hv
cnRoYW5kRW50cmllc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJh
eSgic2hvcnRoYW5kRW50cmllcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxTaG9ydGhhbmRFbnRyaWVzU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFdpZHRoU2V0PiYgc2V0V2lkdGgoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBXaWR0aFNldCksIHByb3BlcnR5X3dp
ZHRoX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygid2lkdGgi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8V2lkdGhTZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSGVpZ2h0U2V0PiYgc2V0SGVpZ2h0KGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgSGVpZ2h0U2V0KSwgcHJvcGVydHlfaGVpZ2h0X2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygiaGVpZ2h0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPEhlaWdodFNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJl
ZlB0cjxDU1NTdHlsZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENTU1N0eWxlPio+KCZtX3Jlc3VsdCk7CiAg
ICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1N0eWxlPiAoKQogICAgICAg
IHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDU1NTdHlsZT4oKnRoaXMpOwogICAgICAgIH0K
ICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0
cjxDU1NTdHlsZT4gcmVzdWx0ID0gQ1NTU3R5bGU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldENz
c1Byb3BlcnRpZXMoLi4uKQogICAgICogICAgIC5zZXRTaG9ydGhhbmRFbnRyaWVzKC4uLikKICAg
ICAqICAgICAuc2V0V2lkdGgoLi4uKQogICAgICogICAgIC5zZXRIZWlnaHQoLi4uKTsKICAgICAq
LwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBDU1NTdHlsZSgpKSk7CiAg
ICB9CgogICAgdm9pZCBzZXRTdHlsZUlkKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpD
U1NTdHlsZUlkPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAg
ICAgICB0aGlzLT5zZXRPYmplY3QoInN0eWxlSWQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBz
ZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3Ry
aW5nKCJjc3NUZXh0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0UmFuZ2UoLypQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInJhbmdlIiwgdmFs
dWUpOwogICAgfQp9OwoKLyogQ1NTIHN0eWxlIGVmZmVjdGl2ZSB2aXN1YWwgZGltZW5zaW9ucyBh
bmQgc291cmNlIG9mZnNldHMuICovCmNsYXNzIENTU1Byb3BlcnR5IDogcHVibGljIEluc3BlY3Rv
ck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3N0YXR1
cycgd2hpbGUgZ2VuZXJhdGluZyBDU1NQcm9wZXJ0eS4KICAgIHN0cnVjdCBTdGF0dXMgewogICAg
ICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgIEFjdGl2ZSA9IDQ0LAogICAgICAgICAgICBJbmFj
dGl2ZSA9IDQ1LAogICAgICAgICAgICBEaXNhYmxlZCA9IDQ2LAogICAgICAgICAgICBTdHlsZSA9
IDQ3LAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgU3RhdHVzCgogICAgZW51bSB7CiAgICAg
ICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIE5hbWVTZXQgPSAxIDw8IDAsCiAgICAgICAgVmFs
dWVTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKE5hbWVTZXQgfCBWYWx1ZVNl
dCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAg
ICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPENTU1Byb3BlcnR5PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBj
bGFzcyBDU1NQcm9wZXJ0eTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5h
bWVTZXQ+JiBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTmFtZVNldCksIHByb3BlcnR5X25hbWVfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5hbWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVTZXQ+JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlU2V0
KSwgcHJvcGVydHlfdmFsdWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJ2YWx1ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1
ZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NQcm9wZXJ0eT4m
ICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVs
ZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmUHRyPENTU1Byb3BlcnR5Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1Byb3BlcnR5PiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgcmV0dXJuIFJlZlB0cjxDU1NQcm9wZXJ0eT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07
CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDU1NQ
cm9wZXJ0eT4gcmVzdWx0ID0gQ1NTUHJvcGVydHk6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE5h
bWUoLi4uKQogICAgICogICAgIC5zZXRWYWx1ZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxO
b0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IENTU1Byb3BlcnR5KCkpKTsKICAgIH0KCiAgICB2b2lk
IHNldFByaW9yaXR5KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0
U3RyaW5nKCJwcmlvcml0eSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldEltcGxpY2l0KGJv
b2wgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0Qm9vbGVhbigiaW1wbGljaXQiLCB2YWx1
ZSk7CiAgICB9CgogICAgdm9pZCBzZXRUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAg
ICAgICAgdGhpcy0+c2V0U3RyaW5nKCJ0ZXh0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0
UGFyc2VkT2soYm9vbCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRCb29sZWFuKCJwYXJz
ZWRPayIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFN0YXR1cyhTdGF0dXM6OkVudW0gdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzdGF0dXMiLCBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZSh2YWx1ZSkpOwogICAgfQoKICAgIHZvaWQgc2V0U3RhdHVzKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzdGF0dXMiLCB2YWx1ZSk7CiAg
ICB9CgogICAgdm9pZCBzZXRTaG9ydGhhbmROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgdmFsdWUpOwogICAgfQoK
ICAgIHZvaWQgc2V0UmFuZ2UoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJh
bmdlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5zZXRPYmplY3QoInJhbmdlIiwgdmFsdWUpOwogICAgfQp9OwoKLyogQ1NTIG1lZGlhIHF1
ZXJ5IGRlc2NyaXB0b3IuICovCmNsYXNzIENTU01lZGlhIDogcHVibGljIEluc3BlY3Rvck9iamVj
dCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3NvdXJjZScgd2hp
bGUgZ2VuZXJhdGluZyBDU1NNZWRpYS4KICAgIHN0cnVjdCBTb3VyY2UgewogICAgICAgIGVudW0g
RW51bSB7CiAgICAgICAgICAgIE1lZGlhUnVsZSA9IDQ4LAogICAgICAgICAgICBJbXBvcnRSdWxl
ID0gNDksCiAgICAgICAgICAgIFN0eWxlc2hlZXQgPSA1MCwKICAgICAgICB9OwogICAgfTsgLy8g
c3RydWN0IFNvdXJjZQoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAg
ICBUZXh0U2V0ID0gMSA8PCAwLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChUZXh0U2V0KQogICAg
fTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZh
dGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q1NT
TWVkaWE+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAg
ICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU01l
ZGlhOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGV4dFNldD4mIHNldFRl
eHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBUZXh0U2V0KSwgcHJvcGVydHlfdGV4dF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInRleHQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8VGV4dFNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJl
ZlB0cjxDU1NNZWRpYT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENTU01lZGlhPio+KCZtX3Jlc3VsdCk7CiAg
ICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU01lZGlhPiAoKQogICAgICAg
IHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDU1NNZWRpYT4oKnRoaXMpOwogICAgICAgIH0K
ICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0
cjxDU1NNZWRpYT4gcmVzdWx0ID0gQ1NTTWVkaWE6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFRl
eHQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgp
CiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBD
U1NNZWRpYSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRTb3VyY2UoU291cmNlOjpFbnVtIHZhbHVl
KQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic291cmNlIiwgZ2V0RW51bUNvbnN0YW50
VmFsdWUodmFsdWUpKTsKICAgIH0KCiAgICB2b2lkIHNldFNvdXJjZShjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic291cmNlIiwgdmFsdWUpOwogICAg
fQoKICAgIHZvaWQgc2V0U291cmNlVVJMKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAg
ICAgdGhpcy0+c2V0U3RyaW5nKCJzb3VyY2VVUkwiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBz
ZXRTb3VyY2VMaW5lKGludCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXROdW1iZXIoInNv
dXJjZUxpbmUiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBDU1Mgc2VsZWN0b3IgcHJvZmlsZSBlbnRy
eS4gKi8KY2xhc3MgU2VsZWN0b3JQcm9maWxlRW50cnkgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0
IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFNl
bGVjdG9yU2V0ID0gMSA8PCAwLAogICAgICAgIFVybFNldCA9IDEgPDwgMSwKICAgICAgICBMaW5l
TnVtYmVyU2V0ID0gMSA8PCAyLAogICAgICAgIFRpbWVTZXQgPSAxIDw8IDMsCiAgICAgICAgSGl0
Q291bnRTZXQgPSAxIDw8IDQsCiAgICAgICAgTWF0Y2hDb3VudFNldCA9IDEgPDwgNSwKICAgICAg
ICBBbGxGaWVsZHNTZXQgPSAoU2VsZWN0b3JTZXQgfCBVcmxTZXQgfCBMaW5lTnVtYmVyU2V0IHwg
VGltZVNldCB8IEhpdENvdW50U2V0IHwgTWF0Y2hDb3VudFNldCkKICAgIH07CgogICAgdGVtcGxh
dGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFNlbGVjdG9yUHJvZmlsZUVu
dHJ5PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBO
b0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAg
ICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBTZWxlY3Rv
clByb2ZpbGVFbnRyeTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNlbGVj
dG9yU2V0PiYgc2V0U2VsZWN0b3IoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTZWxlY3RvclNldCksIHByb3BlcnR5X3Nl
bGVjdG9yX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic2Vs
ZWN0b3IiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U2VsZWN0b3JTZXQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVXJsU2V0PiYgc2V0VXJsKGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgVXJsU2V0KSwgcHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFVybFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMaW5l
TnVtYmVyU2V0PiYgc2V0TGluZU51bWJlcihpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTGluZU51bWJlclNldCksIHByb3BlcnR5X2xpbmVO
dW1iZXJfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJsaW5l
TnVtYmVyIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExpbmVOdW1iZXJT
ZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGltZVNldD4mIHNldFRp
bWUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFRpbWVTZXQpLCBwcm9wZXJ0eV90aW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE51bWJlcigidGltZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxUaW1lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEhp
dENvdW50U2V0PiYgc2V0SGl0Q291bnQoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhpdENvdW50U2V0KSwgcHJvcGVydHlfaGl0Q291bnRf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJoaXRDb3VudCIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIaXRDb3VudFNldD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNYXRjaENvdW50U2V0PiYgc2V0TWF0Y2hD
b3VudChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgTWF0Y2hDb3VudFNldCksIHByb3BlcnR5X21hdGNoQ291bnRfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJtYXRjaENvdW50IiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1hdGNoQ291bnRTZXQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8U2VsZWN0b3JQcm9maWxlRW50cnk+JiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0
cjxTZWxlY3RvclByb2ZpbGVFbnRyeT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUGFzc1JlZlB0cjxTZWxlY3RvclByb2ZpbGVFbnRyeT4gKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiBSZWZQdHI8U2VsZWN0b3JQcm9maWxlRW50cnk+KCp0aGlzKTsKICAg
ICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAg
KiBSZWZQdHI8U2VsZWN0b3JQcm9maWxlRW50cnk+IHJlc3VsdCA9IFNlbGVjdG9yUHJvZmlsZUVu
dHJ5OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRTZWxlY3RvciguLi4pCiAgICAgKiAgICAgLnNl
dFVybCguLi4pCiAgICAgKiAgICAgLnNldExpbmVOdW1iZXIoLi4uKQogICAgICogICAgIC5zZXRU
aW1lKC4uLikKICAgICAqICAgICAuc2V0SGl0Q291bnQoLi4uKQogICAgICogICAgIC5zZXRNYXRj
aENvdW50KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihu
ZXcgU2VsZWN0b3JQcm9maWxlRW50cnkoKSkpOwogICAgfQp9OwoKY2xhc3MgU2VsZWN0b3JQcm9m
aWxlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVy
IHByb3BlcnR5IG5hbWUgJ2RhdGEnIHdoaWxlIGdlbmVyYXRpbmcgU2VsZWN0b3JQcm9maWxlLgog
ICAgY2xhc3MgRGF0YSA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICBwcml2YXRlOgogICAg
ICAgIERhdGEoKSB7IH0KCiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGVFbnRyeT4qLyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNo
T2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGE+
IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhKCkpOwogICAg
ICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAg
IFRvdGFsVGltZVNldCA9IDEgPDwgMCwKICAgICAgICBEYXRhU2V0ID0gMSA8PCAxLAogICAgICAg
IEFsbEZpZWxkc1NldCA9IChUb3RhbFRpbWVTZXQgfCBEYXRhU2V0KQogICAgfTsKCiAgICB0ZW1w
bGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8U2VsZWN0b3JQcm9maWxl
PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAg
bV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBTZWxlY3RvclBy
b2ZpbGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUb3RhbFRpbWVTZXQ+
JiBzZXRUb3RhbFRpbWUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIFRvdGFsVGltZVNldCksIHByb3BlcnR5X3RvdGFsVGltZV9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInRvdGFsVGltZSIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUb3RhbFRpbWVTZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRGF0YVNldD4mIHNldERhdGEoLypQYXNzUmVm
UHRyPERhdGE+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRGF0YVNldCksIHByb3BlcnR5X2Rh
dGFfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImRhdGEiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RGF0YVNldD4oKTsKICAgICAgICB9
CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxTZWxlY3RvclByb2ZpbGU+JiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0
cjxTZWxlY3RvclByb2ZpbGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJh
dG9yIFBhc3NSZWZQdHI8U2VsZWN0b3JQcm9maWxlPiAoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuIFJlZlB0cjxTZWxlY3RvclByb2ZpbGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoK
ICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8U2VsZWN0
b3JQcm9maWxlPiByZXN1bHQgPSBTZWxlY3RvclByb2ZpbGU6OmNyZWF0ZSgpCiAgICAgKiAgICAg
LnNldFRvdGFsVGltZSguLi4pCiAgICAgKiAgICAgLnNldERhdGEoLi4uKTsKICAgICAqLwogICAg
c3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBTZWxlY3RvclByb2ZpbGUoKSkpOwog
ICAgfQp9OwoKfSAvLyBDU1MKCm5hbWVzcGFjZSBUaW1lbGluZSB7Ci8qIFRpbWVsaW5lIHJlY29y
ZCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVjb3JkZWQgYWN0aXZpdHkuICovCmNs
YXNzIFRpbWVsaW5lRXZlbnQgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAg
Ly8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnY2hpbGRyZW4nIHdoaWxlIGdlbmVyYXRpbmcg
VGltZWxpbmVFdmVudC4KICAgIGNsYXNzIENoaWxkcmVuIDogcHVibGljIEluc3BlY3RvckFycmF5
IHsKICAgIHByaXZhdGU6CiAgICAgICAgQ2hpbGRyZW4oKSB7IH0KCiAgICBwdWJsaWM6CiAgICAg
ICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6VGltZWxpbmU6OlRpbWVs
aW5lRXZlbnQ+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDaGlsZHJlbj4gY3JlYXRlKCkgewogICAgICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENoaWxkcmVuKCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAg
ICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFR5cGVTZXQgPSAxIDw8IDAsCiAgICAgICAg
RGF0YVNldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVHlwZVNldCB8IERhdGFT
ZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewog
ICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAg
ICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRl
KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVy
PFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1Jl
ZlB0cjxUaW1lbGluZUV2ZW50PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVu
ZCBjbGFzcyBUaW1lbGluZUV2ZW50OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgVHlwZVNldD4mIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEYXRhU2V0PiYgc2V0RGF0YShQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgRGF0YVNldCksIHByb3BlcnR5X2RhdGFfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJkYXRhIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPERhdGFTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8
VGltZWxpbmVFdmVudD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFRpbWVsaW5lRXZlbnQ+Kj4oJm1fcmVzdWx0
KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8VGltZWxpbmVFdmVudD4g
KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8VGltZWxpbmVFdmVudD4oKnRo
aXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKICAgICAqIFJlZlB0cjxUaW1lbGluZUV2ZW50PiByZXN1bHQgPSBUaW1lbGluZUV2ZW50Ojpj
cmVhdGUoKQogICAgICogICAgIC5zZXRUeXBlKC4uLikKICAgICAqICAgICAuc2V0RGF0YSguLi4p
OwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsK
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFRpbWVsaW5l
RXZlbnQoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0Q2hpbGRyZW4oLypQYXNzUmVmUHRyPENoaWxk
cmVuPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgewogICAgICAgIHRo
aXMtPnNldEFycmF5KCJjaGlsZHJlbiIsIHZhbHVlKTsKICAgIH0KfTsKCn0gLy8gVGltZWxpbmUK
CiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKbmFtZXNwYWNlIERlYnVnZ2VyIHsKLyog
TG9jYXRpb24gaW4gdGhlIHNvdXJjZSBjb2RlLiAqLwpjbGFzcyBMb2NhdGlvbiA6IHB1YmxpYyBJ
bnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9
IDAsCiAgICAgICAgU2NyaXB0SWRTZXQgPSAxIDw8IDAsCiAgICAgICAgTGluZU51bWJlclNldCA9
IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU2NyaXB0SWRTZXQgfCBMaW5lTnVtYmVy
U2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsK
ICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7Cgog
ICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0
ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRl
cjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NS
ZWZQdHI8TG9jYXRpb24+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUp
OwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNs
YXNzIExvY2F0aW9uOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU2NyaXB0
SWRTZXQ+JiBzZXRTY3JpcHRJZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6U2NyaXB0
SWQmKi8gY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBTY3JpcHRJZFNldCksIHByb3BlcnR5X3NjcmlwdElkX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic2NyaXB0SWQiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U2NyaXB0SWRTZXQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTGluZU51bWJlclNldD4mIHNldExpbmVOdW1iZXIoaW50
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExp
bmVOdW1iZXJTZXQpLCBwcm9wZXJ0eV9saW5lTnVtYmVyX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE51bWJlcigibGluZU51bWJlciIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxMaW5lTnVtYmVyU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUmVmUHRyPExvY2F0aW9uPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8TG9jYXRpb24+Kj4oJm1fcmVz
dWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8TG9jYXRpb24+ICgp
CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPExvY2F0aW9uPigqdGhpcyk7CiAg
ICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAg
ICogUmVmUHRyPExvY2F0aW9uPiByZXN1bHQgPSBMb2NhdGlvbjo6Y3JlYXRlKCkKICAgICAqICAg
ICAuc2V0U2NyaXB0SWQoLi4uKQogICAgICogICAgIC5zZXRMaW5lTnVtYmVyKC4uLik7CiAgICAg
Ki8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAg
IHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgTG9jYXRpb24oKSkpOwog
ICAgfQoKICAgIHZvaWQgc2V0Q29sdW1uTnVtYmVyKGludCB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5zZXROdW1iZXIoImNvbHVtbk51bWJlciIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIEphdmFT
Y3JpcHQgY2FsbCBmcmFtZS4gQXJyYXkgb2YgY2FsbCBmcmFtZXMgZm9ybSB0aGUgY2FsbCBzdGFj
ay4gKi8KY2xhc3MgQ2FsbEZyYW1lIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoK
ICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3Njb3BlQ2hhaW4nIHdoaWxlIGdlbmVy
YXRpbmcgQ2FsbEZyYW1lLgogICAgY2xhc3MgU2NvcGVDaGFpbiA6IHB1YmxpYyBJbnNwZWN0b3JB
cnJheSB7CiAgICBwcml2YXRlOgogICAgICAgIFNjb3BlQ2hhaW4oKSB7IH0KCiAgICBwdWJsaWM6
CiAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6
OlNjb3BlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U2NvcGVDaGFpbj4gY3JlYXRlKCkgewogICAgICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNjb3BlQ2hhaW4oKSk7CiAgICAgICAgfQogICAgfTsKCiAgICBlbnVtIHsK
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgQ2FsbEZyYW1lSWRTZXQgPSAxIDw8IDAs
CiAgICAgICAgRnVuY3Rpb25OYW1lU2V0ID0gMSA8PCAxLAogICAgICAgIExvY2F0aW9uU2V0ID0g
MSA8PCAyLAogICAgICAgIFNjb3BlQ2hhaW5TZXQgPSAxIDw8IDMsCiAgICAgICAgVGhpc1NldCA9
IDEgPDwgNCwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoQ2FsbEZyYW1lSWRTZXQgfCBGdW5jdGlv
bk5hbWVTZXQgfCBMb2NhdGlvblNldCB8IFNjb3BlQ2hhaW5TZXQgfCBUaGlzU2V0KQogICAgfTsK
CiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6
CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBs
YXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNU
RVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q2FsbEZy
YW1lPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBO
b0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAg
ICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDYWxsRnJh
bWU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDYWxsRnJhbWVJZFNldD4m
IHNldENhbGxGcmFtZUlkKC8qY29uc3QgVHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpDYWxsRnJhbWVJ
ZCYqLyBjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIENhbGxGcmFtZUlkU2V0KSwgcHJvcGVydHlfY2FsbEZyYW1lSWRfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJjYWxsRnJhbWVJZCIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDYWxsRnJhbWVJZFNldD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBGdW5jdGlvbk5hbWVTZXQ+JiBzZXRG
dW5jdGlvbk5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBGdW5jdGlvbk5hbWVTZXQpLCBwcm9wZXJ0eV9mdW5jdGlv
bk5hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJmdW5j
dGlvbk5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RnVuY3Rpb25O
YW1lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExvY2F0aW9uU2V0
PiYgc2V0TG9jYXRpb24oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRp
b24+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExvY2F0aW9uU2V0KSwgcHJvcGVydHlfbG9j
YXRpb25fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJsb2Nh
dGlvbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMb2NhdGlvblNldD4o
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTY29wZUNoYWluU2V0PiYgc2V0
U2NvcGVDaGFpbigvKlBhc3NSZWZQdHI8U2NvcGVDaGFpbj4qLyBQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBTY29wZUNoYWluU2V0KSwgcHJvcGVydHlfc2NvcGVDaGFpbl9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgic2NvcGVDaGFpbiIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTY29wZUNoYWluU2V0PigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFRoaXNTZXQ+JiBzZXRUaGlzKC8qUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBU
aGlzU2V0KSwgcHJvcGVydHlfdGhpc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRPYmplY3QoInRoaXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
VGhpc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDYWxsRnJhbWU+
JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmll
bGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFJlZlB0cjxDYWxsRnJhbWU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q2FsbEZyYW1lPiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuIFJlZlB0cjxDYWxsRnJhbWU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAg
IC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q2FsbEZyYW1l
PiByZXN1bHQgPSBDYWxsRnJhbWU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldENhbGxGcmFtZUlk
KC4uLikKICAgICAqICAgICAuc2V0RnVuY3Rpb25OYW1lKC4uLikKICAgICAqICAgICAuc2V0TG9j
YXRpb24oLi4uKQogICAgICogICAgIC5zZXRTY29wZUNoYWluKC4uLikKICAgICAqICAgICAuc2V0
VGhpcyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRl
KCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3
IENhbGxGcmFtZSgpKSk7CiAgICB9Cn07CgovKiBTY29wZSBkZXNjcmlwdGlvbi4gKi8KY2xhc3Mg
U2NvcGUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0
ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGluZyBTY29wZS4KICAgIHN0cnVj
dCBUeXBlIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBHbG9iYWwgPSA1MSwKICAg
ICAgICAgICAgTG9jYWwgPSA1MiwKICAgICAgICAgICAgV2l0aCA9IDUzLAogICAgICAgICAgICBD
bG9zdXJlID0gNTQsCiAgICAgICAgICAgIENhdGNoID0gNTUsCiAgICAgICAgfTsKICAgIH07IC8v
IHN0cnVjdCBUeXBlCgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAg
IFR5cGVTZXQgPSAxIDw8IDAsCiAgICAgICAgT2JqZWN0U2V0ID0gMSA8PCAxLAogICAgICAgIEFs
bEZpZWxkc1NldCA9IChUeXBlU2V0IHwgT2JqZWN0U2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxp
bnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8U2NvcGU+IHB0cikKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsK
ICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFNjb3BlOwogICAgcHVibGljOgoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZTo6RW51bSB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJv
cGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
VHlwZVNldD4mIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBPYmplY3RTZXQ+JiBzZXRPYmplY3QoLypQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIE9iamVjdFNldCksIHByb3BlcnR5X29iamVjdF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRPYmplY3QoIm9iamVjdCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxPYmplY3RTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQ
dHI8U2NvcGU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxTY29wZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0K
CiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxTY29wZT4gKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiBSZWZQdHI8U2NvcGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8q
CiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8U2NvcGU+IHJlc3Vs
dCA9IFNjb3BlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUeXBlKC4uLikKICAgICAqICAgICAu
c2V0T2JqZWN0KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJl
ZihuZXcgU2NvcGUoKSkpOwogICAgfQp9OwoKfSAvLyBEZWJ1Z2dlcgoKI2VuZGlmIC8vIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCm5h
bWVzcGFjZSBET01EZWJ1Z2dlciB7Ci8qIERPTSBicmVha3BvaW50IHR5cGUuICovCnN0cnVjdCBE
T01CcmVha3BvaW50VHlwZSB7CiAgICBlbnVtIEVudW0gewogICAgICAgIFN1YnRyZWVfbW9kaWZp
ZWQgPSA1NiwKICAgICAgICBBdHRyaWJ1dGVfbW9kaWZpZWQgPSA1NywKICAgICAgICBOb2RlX3Jl
bW92ZWQgPSA1OCwKICAgIH07Cn07IC8vIHN0cnVjdCBET01CcmVha3BvaW50VHlwZQoKfSAvLyBE
T01EZWJ1Z2dlcgoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKfSAvLyBu
YW1lc3BhY2UgVHlwZUJ1aWxkZXIKCmNsYXNzIEluc3BlY3RvckZyb250ZW5kIHsKcHVibGljOgog
ICAgSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKik7CgoKICAgIGNs
YXNzIEluc3BlY3RvciB7CiAgICBwdWJsaWM6CiAgICAgICAgSW5zcGVjdG9yKEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBl
dmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGludCB0ZXN0Q2FsbElkLCBjb25zdCBTdHJpbmcmIHNj
cmlwdCk7CiAgICAgICAgdm9pZCBpbnNwZWN0KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Qs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoaW50cyk7CiAgICAgICAgdm9pZCBkaWRDcmVh
dGVXb3JrZXIoaW50IGlkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1NoYXJlZCk7CiAgICAg
ICAgdm9pZCBkaWREZXN0cm95V29ya2VyKGludCBpZCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIEluc3BlY3RvciogaW5zcGVjdG9yKCkg
eyByZXR1cm4gJm1faW5zcGVjdG9yOyB9CgogICAgY2xhc3MgTWVtb3J5IHsKICAgIHB1YmxpYzoK
ICAgICAgICBNZW1vcnkoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKSB7IH0KICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAg
IEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkg
eyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAg
ICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsK
ICAgIH07CgogICAgTWVtb3J5KiBtZW1vcnkoKSB7IHJldHVybiAmbV9tZW1vcnk7IH0KCiAgICBj
bGFzcyBQYWdlIHsKICAgIHB1YmxpYzoKICAgICAgICBQYWdlKEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBkb21Db250ZW50
RXZlbnRGaXJlZChkb3VibGUgdGltZXN0YW1wKTsKICAgICAgICB2b2lkIGxvYWRFdmVudEZpcmVk
KGRvdWJsZSB0aW1lc3RhbXApOwogICAgICAgIHZvaWQgZnJhbWVOYXZpZ2F0ZWQoLypQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gZnJhbWUpOwogICAgICAgIHZvaWQgZnJhbWVEZXRhY2hlZCgvKmNvbnN0IFR5cGVCdWlsZGVy
OjpOZXR3b3JrOjpGcmFtZUlkJiovIGNvbnN0IFN0cmluZyYgZnJhbWVJZCk7CiAgICAgICAgdm9p
ZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIFBhZ2UqIHBhZ2Uo
KSB7IHJldHVybiAmbV9wYWdlOyB9CgogICAgY2xhc3MgUnVudGltZSB7CiAgICBwdWJsaWM6CiAg
ICAgICAgUnVudGltZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIHsgfQogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAg
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7
IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAg
ICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwog
ICAgfTsKCiAgICBSdW50aW1lKiBydW50aW1lKCkgeyByZXR1cm4gJm1fcnVudGltZTsgfQoKICAg
IGNsYXNzIENvbnNvbGUgewogICAgcHVibGljOgogICAgICAgIENvbnNvbGUoSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIG1l
c3NhZ2VBZGRlZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVNZXNz
YWdlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKTsKICAgICAgICB2b2lk
IG1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWQoaW50IGNvdW50KTsKICAgICAgICB2b2lkIG1lc3Nh
Z2VzQ2xlYXJlZCgpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAg
ICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
KSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OwogICAgfTsKCiAgICBDb25zb2xlKiBjb25zb2xlKCkgeyByZXR1cm4gJm1fY29uc29sZTsgfQoK
ICAgIGNsYXNzIE5ldHdvcmsgewogICAgcHVibGljOgogICAgICAgIE5ldHdvcmsoSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lk
IHJlcXVlc3RXaWxsQmVTZW50KC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJ
ZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29y
azo6RnJhbWVJZCYqLyBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIC8qY29uc3QgVHlwZUJ1aWxkZXI6
Ok5ldHdvcms6OkxvYWRlcklkJiovIGNvbnN0IFN0cmluZyYgbG9hZGVySWQsIGNvbnN0IFN0cmlu
ZyYgZG9jdW1lbnRVUkwsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVz
dD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdCwgZG91YmxlIHRpbWVzdGFt
cCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpJbml0aWF0b3I+Ki8gUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluaXRpYXRvciwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpDb25zb2xlOjpTdGFja1RyYWNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHN0YWNr
VHJhY2UsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVzcG9uc2U+Ki8gUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlZGlyZWN0UmVzcG9uc2UpOwogICAgICAgIHZvaWQg
cmVxdWVzdFNlcnZlZEZyb21DYWNoZSgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1
ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQpOwogICAgICAgIHZvaWQgcmVzcG9uc2VS
ZWNlaXZlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3Qg
U3RyaW5nJiByZXF1ZXN0SWQsIC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkZyYW1lSWQm
Ki8gY29uc3QgU3RyaW5nJiBmcmFtZUlkLCAvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpM
b2FkZXJJZCYqLyBjb25zdCBTdHJpbmcmIGxvYWRlcklkLCBkb3VibGUgdGltZXN0YW1wLCAvKlR5
cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0qLyBjb25zdCBTdHJpbmcmIHR5cGUs
IC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVzcG9uc2U+Ki8gUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlKTsKICAgICAgICB2b2lkIGRhdGFSZWNlaXZlZCgv
KmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5nJiBy
ZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIGludCBkYXRhTGVuZ3RoLCBpbnQgZW5jb2RlZERh
dGFMZW5ndGgpOwogICAgICAgIHZvaWQgbG9hZGluZ0ZpbmlzaGVkKC8qY29uc3QgVHlwZUJ1aWxk
ZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91Ymxl
IHRpbWVzdGFtcCk7CiAgICAgICAgdm9pZCBsb2FkaW5nRmFpbGVkKC8qY29uc3QgVHlwZUJ1aWxk
ZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91Ymxl
IHRpbWVzdGFtcCwgY29uc3QgU3RyaW5nJiBlcnJvclRleHQsIGNvbnN0IGJvb2wqIGNvbnN0IGNh
bmNlbGVkKTsKICAgICAgICB2b2lkIHJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGUoLypjb25z
dCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmluZyYgcmVxdWVz
dElkLCAvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpGcmFtZUlkJiovIGNvbnN0IFN0cmlu
ZyYgZnJhbWVJZCwgLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6TG9hZGVySWQmKi8gY29u
c3QgU3RyaW5nJiBsb2FkZXJJZCwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgZG91YmxlIHRp
bWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpJbml0aWF0b3I+Ki8g
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluaXRpYXRvciwgLypQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpOZXR3b3JrOjpDYWNoZWRSZXNvdXJjZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzb3VyY2UpOwogICAgICAgIHZvaWQgd2ViU29ja2V0V2lsbFNlbmRIYW5kc2hha2VS
ZXF1ZXN0KC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25zdCBT
dHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXF1ZXN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXF1ZXN0KTsKICAgICAgICB2b2lkIHdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlUmVj
ZWl2ZWQoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0
cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxk
ZXI6Ok5ldHdvcms6OldlYlNvY2tldFJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXNwb25zZSk7CiAgICAgICAgdm9pZCB3ZWJTb2NrZXRDcmVhdGVkKC8qY29uc3QgVHlw
ZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwg
Y29uc3QgU3RyaW5nJiB1cmwpOwogICAgICAgIHZvaWQgd2ViU29ja2V0Q2xvc2VkKC8qY29uc3Qg
VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJ
ZCwgZG91YmxlIHRpbWVzdGFtcCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
IHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7
IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2
YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWw7CiAgICB9OwoKICAgIE5ldHdvcmsqIG5ldHdvcmsoKSB7IHJldHVybiAmbV9uZXR3
b3JrOyB9CgojaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKICAgIGNsYXNzIERhdGFiYXNlIHsKICAg
IHB1YmxpYzoKICAgICAgICBEYXRhYmFzZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgYWRkRGF0YWJhc2UoLypQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RGF0YWJhc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGRhdGFiYXNlKTsKICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgbmFt
ZSAnY29sdW1uTmFtZXMnIHdoaWxlIGdlbmVyYXRpbmcgZXZlbnQgc3FsVHJhbnNhY3Rpb25TdWNj
ZWVkZWQuCiAgICAgICAgY2xhc3MgQ29sdW1uTmFtZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkg
ewogICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgIENvbHVtbk5hbWVzKCkgeyB9CgogICAgICAg
IHB1YmxpYzoKICAgICAgICAgICAgdm9pZCBhZGRJdGVtKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnB1c2hTdHJpbmcodmFsdWUpOwogICAg
ICAgICAgICB9CgogICAgICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb2x1bW5OYW1lcz4gY3Jl
YXRlKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb2x1bW5OYW1lcygp
KTsKICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFt
ZXRlciBuYW1lICd2YWx1ZXMnIHdoaWxlIGdlbmVyYXRpbmcgZXZlbnQgc3FsVHJhbnNhY3Rpb25T
dWNjZWVkZWQuCiAgICAgICAgY2xhc3MgVmFsdWVzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsK
ICAgICAgICBwcml2YXRlOgogICAgICAgICAgICBWYWx1ZXMoKSB7IH0KCiAgICAgICAgcHVibGlj
OgogICAgICAgICAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFs
dWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnB1c2hWYWx1ZSh2YWx1ZSk7
CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFZhbHVlcz4gY3Jl
YXRlKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWYWx1ZXMoKSk7CiAg
ICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICB2b2lkIHNxbFRyYW5zYWN0aW9uU3VjY2Vl
ZGVkKGludCB0cmFuc2FjdGlvbklkLCAvKlBhc3NSZWZQdHI8Q29sdW1uTmFtZXM+Ki8gUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gY29sdW1uTmFtZXMsIC8qUGFzc1JlZlB0cjxWYWx1ZXM+Ki8g
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWVzKTsKICAgICAgICB2b2lkIHNxbFRyYW5z
YWN0aW9uRmFpbGVkKGludCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gc3FsRXJyb3IpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAg
ICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
KSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OwogICAgfTsKCiAgICBEYXRhYmFzZSogZGF0YWJhc2UoKSB7IHJldHVybiAmbV9kYXRhYmFzZTsg
fQoKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCiNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKICAgIGNsYXNzIEluZGV4ZWREQiB7CiAgICBwdWJsaWM6CiAgICAgICAgSW5kZXhlZERC
KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAg
ICAgICAgdm9pZCBkYXRhYmFzZU5hbWVzTG9hZGVkKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
SW5kZXhlZERCOjpGcmFtZVdpdGhEYXRhYmFzZU5hbWVzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBmcmFtZVdpdGhEYXRhYmFzZU5hbWVzKTsKICAgICAgICB2b2lkIHNldEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7
IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgSW5kZXhlZERCKiBpbmRleGVkZGIoKSB7
IHJldHVybiAmbV9pbmRleGVkZGI7IH0KCiNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKICAgIGNsYXNzIERPTVN0b3JhZ2UgewogICAgcHVibGljOgogICAgICAgIERPTVN0b3JhZ2Uo
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAg
ICAgICB2b2lkIGFkZERPTVN0b3JhZ2UoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET01TdG9y
YWdlOjpFbnRyeT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3RvcmFnZSk7CiAgICAg
ICAgdm9pZCB1cGRhdGVET01TdG9yYWdlKGludCBzdG9yYWdlSWQpOwogICAgICAgIHZvaWQgc2V0
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBn
ZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBET01TdG9yYWdlKiBkb21z
dG9yYWdlKCkgeyByZXR1cm4gJm1fZG9tc3RvcmFnZTsgfQoKICAgIGNsYXNzIEFwcGxpY2F0aW9u
Q2FjaGUgewogICAgcHVibGljOgogICAgICAgIEFwcGxpY2F0aW9uQ2FjaGUoSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGFw
cGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRhdGVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6
OkZyYW1lSWQmKi8gY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIG1hbmlmZXN0
VVJMLCBpbnQgc3RhdHVzKTsKICAgICAgICB2b2lkIG5ldHdvcmtTdGF0ZVVwZGF0ZWQoYm9vbCBp
c05vd09ubGluZSk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAg
ICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgp
IHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAg
ICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7
CiAgICB9OwoKICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGFwcGxpY2F0aW9uY2FjaGUoKSB7IHJldHVy
biAmbV9hcHBsaWNhdGlvbmNhY2hlOyB9CgojaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQogICAgY2xh
c3MgRmlsZVN5c3RlbSB7CiAgICBwdWJsaWM6CiAgICAgICAgRmlsZVN5c3RlbShJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQg
c2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBGaWxlU3lzdGVtKiBm
aWxlc3lzdGVtKCkgeyByZXR1cm4gJm1fZmlsZXN5c3RlbTsgfQoKI2VuZGlmIC8vIEVOQUJMRShG
SUxFX1NZU1RFTSkKICAgIGNsYXNzIERPTSB7CiAgICBwdWJsaWM6CiAgICAgICAgRE9NKEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAg
dm9pZCBkb2N1bWVudFVwZGF0ZWQoKTsKICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIg
bmFtZSAnbm9kZXMnIHdoaWxlIGdlbmVyYXRpbmcgZXZlbnQgc2V0Q2hpbGROb2Rlcy4KICAgICAg
ICBjbGFzcyBOb2RlcyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICAgICAgcHJpdmF0ZToK
ICAgICAgICAgICAgTm9kZXMoKSB7IH0KCiAgICAgICAgcHVibGljOgogICAgICAgICAgICB2b2lk
IGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006Ok5vZGU+Ki8gUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0
aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Tm9kZXM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgTm9kZXMoKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICB2b2lk
IHNldENoaWxkTm9kZXMoaW50IHBhcmVudElkLCAvKlBhc3NSZWZQdHI8Tm9kZXM+Ki8gUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gbm9kZXMpOwogICAgICAgIHZvaWQgYXR0cmlidXRlTW9kaWZp
ZWQoaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsK
ICAgICAgICB2b2lkIGF0dHJpYnV0ZVJlbW92ZWQoaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBu
YW1lKTsKICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgbmFtZSAnbm9kZUlkcycgd2hp
bGUgZ2VuZXJhdGluZyBldmVudCBpbmxpbmVTdHlsZUludmFsaWRhdGVkLgogICAgICAgIGNsYXNz
IE5vZGVJZHMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgICAgIHByaXZhdGU6CiAgICAg
ICAgICAgIE5vZGVJZHMoKSB7IH0KCiAgICAgICAgcHVibGljOgogICAgICAgICAgICB2b2lkIGFk
ZEl0ZW0oaW50IHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5wdXNo
TnVtYmVyKHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Tm9kZUlkcz4gY3JlYXRlKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBOb2RlSWRzKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgdm9pZCBpbmxp
bmVTdHlsZUludmFsaWRhdGVkKC8qUGFzc1JlZlB0cjxOb2RlSWRzPiovIFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IG5vZGVJZHMpOwogICAgICAgIHZvaWQgY2hhcmFjdGVyRGF0YU1vZGlmaWVk
KGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgY2hhcmFjdGVyRGF0YSk7CiAgICAgICAgdm9pZCBj
aGlsZE5vZGVDb3VudFVwZGF0ZWQoaW50IG5vZGVJZCwgaW50IGNoaWxkTm9kZUNvdW50KTsKICAg
ICAgICB2b2lkIGNoaWxkTm9kZUluc2VydGVkKGludCBwYXJlbnROb2RlSWQsIGludCBwcmV2aW91
c05vZGVJZCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006Ok5vZGU+Ki8gUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG5vZGUpOwogICAgICAgIHZvaWQgY2hpbGROb2RlUmVtb3ZlZChp
bnQgcGFyZW50Tm9kZUlkLCBpbnQgbm9kZUlkKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0K
ICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgRE9NKiBkb20oKSB7IHJldHVybiAmbV9kb207
IH0KCiAgICBjbGFzcyBDU1MgewogICAgcHVibGljOgogICAgICAgIENTUyhJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgbWVk
aWFRdWVyeVJlc3VsdENoYW5nZWQoKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHBy
aXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgQ1NTKiBjc3MoKSB7IHJldHVybiAmbV9jc3M7IH0KCiAg
ICBjbGFzcyBUaW1lbGluZSB7CiAgICBwdWJsaWM6CiAgICAgICAgVGltZWxpbmUoSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lk
IGV2ZW50UmVjb3JkZWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxp
bmVFdmVudD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVjb3JkKTsKICAgICAgICB2
b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9
IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgVGltZWxpbmUq
IHRpbWVsaW5lKCkgeyByZXR1cm4gJm1fdGltZWxpbmU7IH0KCiNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKICAgIGNsYXNzIERlYnVnZ2VyIHsKICAgIHB1YmxpYzoKICAgICAgICBEZWJ1
Z2dlcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
OiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsg
fQogICAgICAgIHZvaWQgZ2xvYmFsT2JqZWN0Q2xlYXJlZCgpOwogICAgICAgIHZvaWQgc2NyaXB0
UGFyc2VkKC8qY29uc3QgVHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpTY3JpcHRJZCYqLyBjb25zdCBT
dHJpbmcmIHNjcmlwdElkLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IHN0YXJ0TGluZSwgaW50IHN0
YXJ0Q29sdW1uLCBpbnQgZW5kTGluZSwgaW50IGVuZENvbHVtbiwgY29uc3QgYm9vbCogY29uc3Qg
aXNDb250ZW50U2NyaXB0LCBjb25zdCBTdHJpbmcmIHNvdXJjZU1hcFVSTCk7CiAgICAgICAgdm9p
ZCBzY3JpcHRGYWlsZWRUb1BhcnNlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHNj
cmlwdFNvdXJjZSwgaW50IHN0YXJ0TGluZSwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBl
cnJvck1lc3NhZ2UpOwogICAgICAgIHZvaWQgYnJlYWtwb2ludFJlc29sdmVkKC8qY29uc3QgVHlw
ZUJ1aWxkZXI6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQmKi8gY29uc3QgU3RyaW5nJiBicmVha3Bv
aW50SWQsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiovIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2NhdGlvbik7CiAgICAgICAgLy8gTmFtZWQgYWZ0
ZXIgcGFyYW1ldGVyIG5hbWUgJ2NhbGxGcmFtZXMnIHdoaWxlIGdlbmVyYXRpbmcgZXZlbnQgcGF1
c2VkLgogICAgICAgIGNsYXNzIENhbGxGcmFtZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewog
ICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgIENhbGxGcmFtZXMoKSB7IH0KCiAgICAgICAgcHVi
bGljOgogICAgICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpE
ZWJ1Z2dlcjo6Q2FsbEZyYW1lPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7CiAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbGxGcmFtZXM+IGNy
ZWF0ZSgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FsbEZyYW1lcygp
KTsKICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFt
ZXRlciBuYW1lICdyZWFzb24nIHdoaWxlIGdlbmVyYXRpbmcgZXZlbnQgcGF1c2VkLgogICAgICAg
IHN0cnVjdCBSZWFzb24gewogICAgICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICAgICAg
WEhSID0gNSwKICAgICAgICAgICAgICAgIERPTSA9IDU5LAogICAgICAgICAgICAgICAgRXZlbnRM
aXN0ZW5lciA9IDYwLAogICAgICAgICAgICAgICAgRXhjZXB0aW9uID0gNjEsCiAgICAgICAgICAg
ICAgICBPdGhlciA9IDI1LAogICAgICAgICAgICB9OwogICAgICAgIH07IC8vIHN0cnVjdCBSZWFz
b24KCiAgICAgICAgdm9pZCBwYXVzZWQoLypQYXNzUmVmUHRyPENhbGxGcmFtZXM+Ki8gUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gY2FsbEZyYW1lcywgLypSZWFzb246OkVudW0qLyBjb25zdCBT
dHJpbmcmIHJlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpOwogICAgICAg
IHZvaWQgcmVzdW1lZCgpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAg
ICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToK
ICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOwogICAgfTsKCiAgICBEZWJ1Z2dlciogZGVidWdnZXIoKSB7IHJldHVybiAmbV9kZWJ1Z2dl
cjsgfQoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCiAgICBjbGFzcyBET01EZWJ1Z2dlciB7CiAgICBwdWJsaWM6CiAg
ICAgICAgRE9NRGVidWdnZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAg
ICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAg
ICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsKICAgIH07CgogICAgRE9NRGVidWdnZXIqIGRvbWRlYnVnZ2VyKCkgeyByZXR1cm4gJm1fZG9t
ZGVidWdnZXI7IH0KCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgY2xhc3MgUHJvZmlsZXIgewogICAgcHVibGlj
OgogICAgICAgIFByb2ZpbGVyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBhZGRQcm9maWxlSGVhZGVyKFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXIpOwogICAgICAgIHZvaWQgYWRkSGVhcFNuYXBzaG90Q2h1
bmsoaW50IHVpZCwgY29uc3QgU3RyaW5nJiBjaHVuayk7CiAgICAgICAgdm9pZCBmaW5pc2hIZWFw
U25hcHNob3QoaW50IHVpZCk7CiAgICAgICAgdm9pZCBzZXRSZWNvcmRpbmdQcm9maWxlKGJvb2wg
aXNQcm9maWxpbmcpOwogICAgICAgIHZvaWQgcmVzZXRQcm9maWxlcygpOwogICAgICAgIHZvaWQg
cmVwb3J0SGVhcFNuYXBzaG90UHJvZ3Jlc3MoaW50IGRvbmUsIGludCB0b3RhbCk7CiAgICAgICAg
dm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwg
PSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIFByb2ZpbGVy
KiBwcm9maWxlcigpIHsgcmV0dXJuICZtX3Byb2ZpbGVyOyB9CgojZW5kaWYgLy8gRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCiNpZiBFTkFCTEUoV09SS0VSUykKICAgIGNsYXNzIFdvcmtlciB7
CiAgICBwdWJsaWM6CiAgICAgICAgV29ya2VyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCB3b3JrZXJDcmVhdGVkKGludCB3
b3JrZXJJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaW5zcGVjdG9yQ29ubmVjdGVkKTsKICAg
ICAgICB2b2lkIHdvcmtlclRlcm1pbmF0ZWQoaW50IHdvcmtlcklkKTsKICAgICAgICB2b2lkIGRp
c3BhdGNoTWVzc2FnZUZyb21Xb3JrZXIoaW50IHdvcmtlcklkLCBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbWVzc2FnZSk7CiAgICAgICAgdm9pZCBkaXNjb25uZWN0ZWRGcm9tV29ya2VyKCk7
CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAg
IFdvcmtlciogd29ya2VyKCkgeyByZXR1cm4gJm1fd29ya2VyOyB9CgojZW5kaWYgLy8gRU5BQkxF
KFdPUktFUlMpCgpwcml2YXRlOgogICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIEluc3BlY3RvciBtX2luc3BlY3RvcjsKICAgIE1lbW9y
eSBtX21lbW9yeTsKICAgIFBhZ2UgbV9wYWdlOwogICAgUnVudGltZSBtX3J1bnRpbWU7CiAgICBD
b25zb2xlIG1fY29uc29sZTsKICAgIE5ldHdvcmsgbV9uZXR3b3JrOwojaWYgRU5BQkxFKFNRTF9E
QVRBQkFTRSkKICAgIERhdGFiYXNlIG1fZGF0YWJhc2U7CiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RB
VEFCQVNFKQojaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICBJbmRleGVkREIgbV9pbmRl
eGVkZGI7CiNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgIERPTVN0b3JhZ2Ug
bV9kb21zdG9yYWdlOwogICAgQXBwbGljYXRpb25DYWNoZSBtX2FwcGxpY2F0aW9uY2FjaGU7CiNp
ZiBFTkFCTEUoRklMRV9TWVNURU0pCiAgICBGaWxlU3lzdGVtIG1fZmlsZXN5c3RlbTsKI2VuZGlm
IC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgIERPTSBtX2RvbTsKICAgIENTUyBtX2NzczsKICAg
IFRpbWVsaW5lIG1fdGltZWxpbmU7CiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAg
IERlYnVnZ2VyIG1fZGVidWdnZXI7CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgRE9NRGVidWdnZXIgbV9kb21k
ZWJ1Z2dlcjsKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICBQcm9maWxlciBtX3Byb2ZpbGVyOwojZW5kaWYgLy8g
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNpZiBFTkFCTEUoV09SS0VSUykKICAgIFdvcmtl
ciBtX3dvcmtlcjsKI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQp9OwoKI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCgp9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiNlbmRpZiAvLyAhZGVmaW5lZChJ
bnNwZWN0b3JGcm9udGVuZF9oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>122635</attachid>
            <date>2012-01-16 07:33:55 -0800</date>
            <delta_ts>2012-01-16 07:33:55 -0800</delta_ts>
            <desc>Generator output diff</desc>
            <filename>diff</filename>
            <type>text/plain</type>
            <size>9051</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">NDhhNDksOTAKPiAvLyBUeXBlZGVmcy4KPiBuYW1lc3BhY2UgUGFnZSB7Cj4gLyogVW5pcXVlIHNj
cmlwdCBpZGVudGlmaWVyLiAqLwo+IHR5cGVkZWYgU3RyaW5nIFNjcmlwdElkZW50aWZpZXI7Cj4g
Cj4gfSAvLyBQYWdlCj4gCj4gbmFtZXNwYWNlIFJ1bnRpbWUgewo+IC8qIFVuaXF1ZSBvYmplY3Qg
aWRlbnRpZmllci4gKi8KPiB0eXBlZGVmIFN0cmluZyBSZW1vdGVPYmplY3RJZDsKPiAKPiB9IC8v
IFJ1bnRpbWUKPiAKPiBuYW1lc3BhY2UgTmV0d29yayB7Cj4gLyogVW5pcXVlIGxvYWRlciBpZGVu
dGlmaWVyLiAqLwo+IHR5cGVkZWYgU3RyaW5nIExvYWRlcklkOwo+IAo+IC8qIFVuaXF1ZSBmcmFt
ZSBpZGVudGlmaWVyLiAqLwo+IHR5cGVkZWYgU3RyaW5nIEZyYW1lSWQ7Cj4gCj4gLyogVW5pcXVl
IHJlcXVlc3QgaWRlbnRpZmllci4gKi8KPiB0eXBlZGVmIFN0cmluZyBSZXF1ZXN0SWQ7Cj4gCj4g
fSAvLyBOZXR3b3JrCj4gCj4gI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQo+IG5hbWVz
cGFjZSBEZWJ1Z2dlciB7Cj4gLyogQnJlYWtwb2ludCBpZGVudGlmaWVyLiAqLwo+IHR5cGVkZWYg
U3RyaW5nIEJyZWFrcG9pbnRJZDsKPiAKPiAvKiBVbmlxdWUgc2NyaXB0IGlkZW50aWZpZXIuICov
Cj4gdHlwZWRlZiBTdHJpbmcgU2NyaXB0SWQ7Cj4gCj4gLyogQ2FsbCBmcmFtZSBpZGVudGlmaWVy
LiAqLwo+IHR5cGVkZWYgU3RyaW5nIENhbGxGcmFtZUlkOwo+IAo+IH0gLy8gRGVidWdnZXIKPiAK
PiAjZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCj4gLy8gRW5kIG9mIHR5cGVk
ZWZzLgo+IAo+IAozNTljNDAxCjwgICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTG9hZGVySWRTZXQ+
JiBzZXRMb2FkZXJJZChjb25zdCBTdHJpbmcmIHZhbHVlKQotLS0KPiAgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBMb2FkZXJJZFNldD4mIHNldExvYWRlcklkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5l
dHdvcms6OkxvYWRlcklkJiovIGNvbnN0IFN0cmluZyYgdmFsdWUpCjcwN2M3NDkKPCAgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBGcmFtZUlkU2V0PiYgc2V0RnJhbWVJZChjb25zdCBTdHJpbmcmIHZh
bHVlKQotLS0KPiAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBGcmFtZUlkU2V0PiYgc2V0RnJhbWVJ
ZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpGcmFtZUlkJiovIGNvbnN0IFN0cmluZyYg
dmFsdWUpCjg3NSw4NzdkOTE2CjwgLyogVW5pcXVlIHNjcmlwdCBpZGVudGlmaWVyLiAqLwo8IHR5
cGVkZWYgU3RyaW5nIFNjcmlwdElkZW50aWZpZXI7CjwgCjg4MSw4ODNkOTE5CjwgLyogVW5pcXVl
IG9iamVjdCBpZGVudGlmaWVyLiAqLwo8IHR5cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVjdElkOwo8
IAo5OTdjMTAzMwo8ICAgICB2b2lkIHNldE9iamVjdElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0t
LQo+ICAgICB2b2lkIHNldE9iamVjdElkKC8qY29uc3QgVHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdElkJiovIGNvbnN0IFN0cmluZyYgdmFsdWUpCjEzNDljMTM4NQo8ICAgICB2b2lk
IHNldE5ldHdvcmtSZXF1ZXN0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLS0tCj4gICAgIHZvaWQg
c2V0TmV0d29ya1JlcXVlc3RJZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0
SWQmKi8gY29uc3QgU3RyaW5nJiB2YWx1ZSkKMTQ1OCwxNDY2ZDE0OTMKPCAvKiBVbmlxdWUgbG9h
ZGVyIGlkZW50aWZpZXIuICovCjwgdHlwZWRlZiBTdHJpbmcgTG9hZGVySWQ7CjwgCjwgLyogVW5p
cXVlIGZyYW1lIGlkZW50aWZpZXIuICovCjwgdHlwZWRlZiBTdHJpbmcgRnJhbWVJZDsKPCAKPCAv
KiBVbmlxdWUgcmVxdWVzdCBpZGVudGlmaWVyLiAqLwo8IHR5cGVkZWYgU3RyaW5nIFJlcXVlc3RJ
ZDsKPCAKMjMwNmMyMzMzCjwgICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRnJhbWVJZFNldD4mIHNl
dEZyYW1lSWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLS0tCj4gICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgRnJhbWVJZFNldD4mIHNldEZyYW1lSWQoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6
RnJhbWVJZCYqLyBjb25zdCBTdHJpbmcmIHZhbHVlKQoyNjQ3YzI2NzQKPCAgICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBGcmFtZUlkU2V0PiYgc2V0RnJhbWVJZChjb25zdCBTdHJpbmcmIHZhbHVlKQot
LS0KPiAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBGcmFtZUlkU2V0PiYgc2V0RnJhbWVJZCgvKmNv
bnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpGcmFtZUlkJiovIGNvbnN0IFN0cmluZyYgdmFsdWUp
CjQ1MzUsNDU0M2Q0NTYxCjwgLyogQnJlYWtwb2ludCBpZGVudGlmaWVyLiAqLwo8IHR5cGVkZWYg
U3RyaW5nIEJyZWFrcG9pbnRJZDsKPCAKPCAvKiBVbmlxdWUgc2NyaXB0IGlkZW50aWZpZXIuICov
CjwgdHlwZWRlZiBTdHJpbmcgU2NyaXB0SWQ7CjwgCjwgLyogQ2FsbCBmcmFtZSBpZGVudGlmaWVy
LiAqLwo8IHR5cGVkZWYgU3RyaW5nIENhbGxGcmFtZUlkOwo8IAo0NTcyYzQ1OTAKPCAgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBTY3JpcHRJZFNldD4mIHNldFNjcmlwdElkKGNvbnN0IFN0cmluZyYg
dmFsdWUpCi0tLQo+ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNjcmlwdElkU2V0PiYgc2V0U2Ny
aXB0SWQoLypjb25zdCBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OlNjcmlwdElkJiovIGNvbnN0IFN0
cmluZyYgdmFsdWUpCjQ2NjJjNDY4MAo8ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IENhbGxGcmFt
ZUlkU2V0PiYgc2V0Q2FsbEZyYW1lSWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLS0tCj4gICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQ2FsbEZyYW1lSWRTZXQ+JiBzZXRDYWxsRnJhbWVJZCgvKmNvbnN0
IFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lSWQmKi8gY29uc3QgU3RyaW5nJiB2YWx1
ZSkKNDgyNSw0ODI5ZDQ4NDIKPCAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCjwgbmFt
ZXNwYWNlIFByb2ZpbGVyIHsKPCB9IC8vIFByb2ZpbGVyCjwgCjwgI2VuZGlmIC8vIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQo0ODcwYzQ4ODMKPCAgICAgICAgIHZvaWQgZnJhbWVEZXRhY2hl
ZChjb25zdCBTdHJpbmcmIGZyYW1lSWQpOwotLS0KPiAgICAgICAgIHZvaWQgZnJhbWVEZXRhY2hl
ZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpGcmFtZUlkJiovIGNvbnN0IFN0cmluZyYg
ZnJhbWVJZCk7CjQ5MDcsNDkxN2M0OTIwLDQ5MzAKPCAgICAgICAgIHZvaWQgcmVxdWVzdFdpbGxC
ZVNlbnQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29u
c3QgU3RyaW5nJiBsb2FkZXJJZCwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgLypQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXF1ZXN0LCBkb3VibGUgdGltZXN0YW1wLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxk
ZXI6Ok5ldHdvcms6OkluaXRpYXRvcj4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5p
dGlhdG9yLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OlN0YWNrVHJhY2U+Ki8g
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gc3RhY2tUcmFjZSwgLypQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpOZXR3b3JrOjpSZXNwb25zZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVkaXJlY3RSZXNwb25zZSk7CjwgICAgICAgICB2b2lkIHJlcXVlc3RTZXJ2ZWRGcm9tQ2FjaGUo
Y29uc3QgU3RyaW5nJiByZXF1ZXN0SWQpOwo8ICAgICAgICAgdm9pZCByZXNwb25zZVJlY2VpdmVk
KGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0
cmluZyYgbG9hZGVySWQsIGRvdWJsZSB0aW1lc3RhbXAsIC8qVHlwZUJ1aWxkZXI6OlBhZ2U6OlJl
c291cmNlVHlwZTo6RW51bSovIGNvbnN0IFN0cmluZyYgdHlwZSwgLypQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpOZXR3b3JrOjpSZXNwb25zZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzcG9uc2UpOwo8ICAgICAgICAgdm9pZCBkYXRhUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiByZXF1
ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIGludCBkYXRhTGVuZ3RoLCBpbnQgZW5jb2RlZERhdGFM
ZW5ndGgpOwo8ICAgICAgICAgdm9pZCBsb2FkaW5nRmluaXNoZWQoY29uc3QgU3RyaW5nJiByZXF1
ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXApOwo8ICAgICAgICAgdm9pZCBsb2FkaW5nRmFpbGVkKGNv
bnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wLCBjb25zdCBTdHJpbmcmIGVy
cm9yVGV4dCwgY29uc3QgYm9vbCogY29uc3QgY2FuY2VsZWQpOwo8ICAgICAgICAgdm9pZCByZXF1
ZXN0U2VydmVkRnJvbU1lbW9yeUNhY2hlKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgbG9hZGVySWQsIGNvbnN0IFN0cmluZyYgZG9j
dW1lbnRVUkwsIGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0
d29yazo6SW5pdGlhdG9yPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbml0aWF0b3Is
IC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6Q2FjaGVkUmVzb3VyY2U+Ki8gUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc291cmNlKTsKPCAgICAgICAgIHZvaWQgd2ViU29j
a2V0V2lsbFNlbmRIYW5kc2hha2VSZXF1ZXN0KGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3Vi
bGUgdGltZXN0YW1wLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OldlYlNvY2tl
dFJlcXVlc3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3QpOwo8ICAgICAg
ICAgdm9pZCB3ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVkKGNvbnN0IFN0cmluZyYg
cmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5l
dHdvcms6OldlYlNvY2tldFJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXNwb25zZSk7CjwgICAgICAgICB2b2lkIHdlYlNvY2tldENyZWF0ZWQoY29uc3QgU3RyaW5nJiBy
ZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgdXJsKTsKPCAgICAgICAgIHZvaWQgd2ViU29ja2V0Q2xv
c2VkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wKTsKLS0tCj4gICAg
ICAgICB2b2lkIHJlcXVlc3RXaWxsQmVTZW50KC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6
OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgLypjb25zdCBUeXBlQnVpbGRl
cjo6TmV0d29yazo6RnJhbWVJZCYqLyBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIC8qY29uc3QgVHlw
ZUJ1aWxkZXI6Ok5ldHdvcms6OkxvYWRlcklkJiovIGNvbnN0IFN0cmluZyYgbG9hZGVySWQsIGNv
bnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29y
azo6UmVxdWVzdD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdCwgZG91Ymxl
IHRpbWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpJbml0aWF0b3I+
Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluaXRpYXRvciwgLypQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpDb25zb2xlOjpTdGFja1RyYWNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHN0YWNrVHJhY2UsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVzcG9u
c2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlZGlyZWN0UmVzcG9uc2UpOwo+ICAg
ICAgICAgdm9pZCByZXF1ZXN0U2VydmVkRnJvbUNhY2hlKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5l
dHdvcms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCk7Cj4gICAgICAgICB2
b2lkIHJlc3BvbnNlUmVjZWl2ZWQoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVz
dElkJiovIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCAvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3
b3JrOjpGcmFtZUlkJiovIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgLypjb25zdCBUeXBlQnVpbGRl
cjo6TmV0d29yazo6TG9hZGVySWQmKi8gY29uc3QgU3RyaW5nJiBsb2FkZXJJZCwgZG91YmxlIHRp
bWVzdGFtcCwgLypUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBlOjpFbnVtKi8gY29uc3Qg
U3RyaW5nJiB0eXBlLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlc3BvbnNl
PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZSk7Cj4gICAgICAgICB2b2lk
IGRhdGFSZWNlaXZlZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8g
Y29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIGludCBkYXRhTGVuZ3Ro
LCBpbnQgZW5jb2RlZERhdGFMZW5ndGgpOwo+ICAgICAgICAgdm9pZCBsb2FkaW5nRmluaXNoZWQo
Lypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmluZyYg
cmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wKTsKPiAgICAgICAgIHZvaWQgbG9hZGluZ0ZhaWxl
ZCgvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKi8gY29uc3QgU3RyaW5n
JiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIGNvbnN0IFN0cmluZyYgZXJyb3JUZXh0LCBj
b25zdCBib29sKiBjb25zdCBjYW5jZWxlZCk7Cj4gICAgICAgICB2b2lkIHJlcXVlc3RTZXJ2ZWRG
cm9tTWVtb3J5Q2FjaGUoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdElkJiov
IGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCAvKmNvbnN0IFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpG
cmFtZUlkJiovIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0
d29yazo6TG9hZGVySWQmKi8gY29uc3QgU3RyaW5nJiBsb2FkZXJJZCwgY29uc3QgU3RyaW5nJiBk
b2N1bWVudFVSTCwgZG91YmxlIHRpbWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpO
ZXR3b3JrOjpJbml0aWF0b3I+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluaXRpYXRv
ciwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpDYWNoZWRSZXNvdXJjZT4qLyBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzb3VyY2UpOwo+ICAgICAgICAgdm9pZCB3ZWJT
b2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3QoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29y
azo6UmVxdWVzdElkJiovIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1w
LCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OldlYlNvY2tldFJlcXVlc3Q+Ki8g
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3QpOwo+ICAgICAgICAgdm9pZCB3ZWJT
b2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdv
cms6OlJlcXVlc3RJZCYqLyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFt
cCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXNwb25zZT4q
LyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2UpOwo+ICAgICAgICAgdm9pZCB3
ZWJTb2NrZXRDcmVhdGVkKC8qY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3RJZCYq
LyBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiB1cmwpOwo+ICAgICAgICAg
dm9pZCB3ZWJTb2NrZXRDbG9zZWQoLypjb25zdCBUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVz
dElkJiovIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wKTsKNTAwNGM1
MDE3CjwgICAgICAgICB2b2lkIGFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRhdGVkKGNvbnN0IFN0
cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVSTCwgaW50IHN0YXR1cyk7Ci0t
LQo+ICAgICAgICAgdm9pZCBhcHBsaWNhdGlvbkNhY2hlU3RhdHVzVXBkYXRlZCgvKmNvbnN0IFR5
cGVCdWlsZGVyOjpOZXR3b3JrOjpGcmFtZUlkJiovIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29u
c3QgU3RyaW5nJiBtYW5pZmVzdFVSTCwgaW50IHN0YXR1cyk7CjUxMDhjNTEyMQo8ICAgICAgICAg
dm9pZCBzY3JpcHRQYXJzZWQoY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29uc3QgU3RyaW5nJiB1
cmwsIGludCBzdGFydExpbmUsIGludCBzdGFydENvbHVtbiwgaW50IGVuZExpbmUsIGludCBlbmRD
b2x1bW4sIGNvbnN0IGJvb2wqIGNvbnN0IGlzQ29udGVudFNjcmlwdCwgY29uc3QgU3RyaW5nJiBz
b3VyY2VNYXBVUkwpOwotLS0KPiAgICAgICAgIHZvaWQgc2NyaXB0UGFyc2VkKC8qY29uc3QgVHlw
ZUJ1aWxkZXI6OkRlYnVnZ2VyOjpTY3JpcHRJZCYqLyBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBj
b25zdCBTdHJpbmcmIHVybCwgaW50IHN0YXJ0TGluZSwgaW50IHN0YXJ0Q29sdW1uLCBpbnQgZW5k
TGluZSwgaW50IGVuZENvbHVtbiwgY29uc3QgYm9vbCogY29uc3QgaXNDb250ZW50U2NyaXB0LCBj
b25zdCBTdHJpbmcmIHNvdXJjZU1hcFVSTCk7CjUxMTBjNTEyMwo8ICAgICAgICAgdm9pZCBicmVh
a3BvaW50UmVzb2x2ZWQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQsIC8qUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBsb2NhdGlvbik7Ci0tLQo+ICAgICAgICAgdm9pZCBicmVha3BvaW50UmVzb2x2ZWQoLypj
b25zdCBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCYqLyBjb25zdCBTdHJpbmcm
IGJyZWFrcG9pbnRJZCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRp
b24+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGxvY2F0aW9uKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122670</attachid>
            <date>2012-01-16 12:03:18 -0800</date>
            <delta_ts>2012-01-17 07:46:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76382-20120117000316.patch</filename>
            <type>text/plain</type>
            <size>11024</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MDYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTc4OTc1ZmYyMDU2ZmM4
ZjBhMjY2ODRlMjg4ZjhmY2M1MzdkMjU5YS4uMDA1MjQ0N2U1ZGY2MTg1YTkzZmRjNzc1NzBiZWM2
ZjcwNWEyMjkyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTAxLTE2ICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBzdGFydCB1c2luZyB0eXBlZGVmcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYzODIKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBHZW5lcmF0b3IgaXMgcGF0
Y2hlZCBhY2NvcmRpbmdseS4KKworICAgICAgICAqIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5z
cGVjdG9yLnB5OgorICAgICAgICAoRW51bUNvbnN0YW50cy5nZXRfZW51bV9jb25zdGFudF9jb2Rl
KToKKyAgICAgICAgKFR5cGVCdWlsZGVyUGFzcyk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3Jl
YXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2Rl
R2VuZXJhdG9yKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlv
bl8uRW51bUJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yLkNvZGVHZW5lcmF0b3IuZ2V0X2dlbmVy
YXRlX3Bhc3NfaWQpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0
aW9uXyk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLlBs
YWluU3RyaW5nKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlv
bl8uUGxhaW5TdHJpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yKToKKyAgICAgICAgKFR5cGVCaW5kaW5n
cy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcucmVkdWNlX3RvX3Jhd190eXBl
KToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5T
dHJpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4pOgorICAgICAgICAoVHlw
ZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5QbGFpblN0cmluZy5nZXRfaW5fY190
eXBlX3RleHQpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9u
Xy5UeXBlZGVmU3RyaW5nKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNs
YXJhdGlvbl8uVHlwZWRlZlN0cmluZy5nZXRfY29kZV9nZW5lcmF0b3IpOgorICAgICAgICAoVHlw
ZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5UeXBlZGVmU3RyaW5nLmdldF9jb2Rl
X2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVf
dHlwZV9kZWNsYXJhdGlvbl8uVHlwZWRlZlN0cmluZy5nZXRfY29kZV9nZW5lcmF0b3IuQ29kZUdl
bmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNy
ZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5UeXBlZGVmU3RyaW5nLmdldF9jb2RlX2dlbmVyYXRvci5D
b2RlR2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVpbGRlci5TdHJpbmcpOgorICAgICAgICAoVHlw
ZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5UeXBlZGVmU3RyaW5nLmdldF9jb2Rl
X2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLnJlZ2lzdGVyX3VzZSk6CisgICAgICAgIChUeXBlQmlu
ZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLlR5cGVkZWZTdHJpbmcuZ2V0X2NvZGVfZ2Vu
ZXJhdG9yLkNvZGVHZW5lcmF0b3IuZ2V0X2dlbmVyYXRlX3Bhc3NfaWQpOgorICAgICAgICAoVHlw
ZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5UeXBlZGVmU3RyaW5nLnJlZHVjZV90
b19yYXdfdHlwZSk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRp
b25fLlR5cGVkZWZTdHJpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4pOgor
ICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5UeXBlZGVmU3Ry
aW5nLmdldF9pbl9jX3R5cGVfdGV4dCk6CisgICAgICAgIChnZXRfZ2VuZXJhdGVfcGFzc19pZCk6
CisgICAgICAgIChBcnJheUJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yLkNvZGVHZW5lcmF0b3Ip
OgorICAgICAgICAoQXJyYXlCaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9y
LmdldF9nZW5lcmF0ZV9wYXNzX2lkKToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX3R5cGVz
LmNyZWF0ZV90eXBlX2J1aWxkZXJfY2FsbGVyKToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNz
X3R5cGVzLmNyZWF0ZV90eXBlX2J1aWxkZXJfY2FsbGVyLmNhbGxfdHlwZV9idWlsZGVyKToKKyAg
ICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX3R5cGVzKToKKwogMjAxMi0wMS0xNiAgTmlrb2xhcyBa
aW1tZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KIAogICAgICAgICBMYXJnZSBTVkcgdGV4
dCBsYXlvdXQgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiBpbiByODExNjgKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggZjRlOTcz
MGRhMmJhNzM1MjhhYzE0NDdjMTg0MDQyODg3Y2Y0NzQxNC4uNGQzNTY2OTY5NjMzZDRkNjFjYzlh
NzVkZmViMjQ0MjYwOWNlMWQ3ZiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKQEAgLTU0Myw2ICs1NDMsMTMgQEAgY2xhc3MgRW51
bUNvbnN0YW50czoKICAgICAgICAgcmV0dXJuIGpvaW4ob3V0cHV0LCAiLFxuIikgKyAiXG4iCiAK
IAorIyBUeXBlYnVpbGRlciBjb2RlIGlzIGdlbmVyYXRlZCBpbiBzZXZlcmFsIHBhc3NlczogZmly
c3QgdHlwZWRlZnMsIHRoZW4gb3RoZXIgY2xhc3Nlcy4KKyMgTWFudWFsIHBhc3MgbWFuYWdlbWVu
dCBpcyBuZWVkZWQgYmVjYXVzZSB3ZSBjYW5ub3QgaGF2ZSBmb3J3YXJkIGRlY2xhcmF0aW9ucyBm
b3IgdHlwZWRlZnMuCitjbGFzcyBUeXBlQnVpbGRlclBhc3M6CisgICAgVFlQRURFRiA9ICJ0eXBl
ZGVmIgorICAgIE1BSU4gPSAibWFpbiIKKworCiBjbGFzcyBUeXBlQmluZGluZ3M6CiAgICAgQHN0
YXRpY21ldGhvZAogICAgIGRlZiBjcmVhdGVfbmFtZWRfdHlwZV9kZWNsYXJhdGlvbihqc29uX3R5
cGFibGUsIGNvbnRleHRfZG9tYWluX25hbWUsIHR5cGVfZGF0YSk6CkBAIC02MjYsNiArNjMzLDEw
IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYg
cmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXNzCiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9k
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9nZW5lcmF0ZV9wYXNzX2lkKCk6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlQnVpbGRlclBhc3Mu
TUFJTgorCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29kZUdlbmVyYXRvcgogCiAg
ICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZApAQCAtNjQyLDQyICs2NTMsNjQgQEAgY2xh
c3MgVHlwZUJpbmRpbmdzOgogCiAgICAgICAgICAgICAgICAgcmV0dXJuIEVudW1CaW5kaW5nCiAg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGhlbHBlci5pc19hZF9ob2M6CiAK
LSAgICAgICAgICAgICAgICBjbGFzcyBQbGFpblN0cmluZzoKLSAgICAgICAgICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2NvZGVfZ2VuZXJhdG9y
KCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBoZWxwZXIuaXNfYWRfaG9jOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBQ
bGFpblN0cmluZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoKToKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogCi0gICAgICAgICAgICAgICAgICAgICAgICBj
bGFzcyBDb2RlR2VuZXJhdG9yOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNt
ZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWls
ZGVyKHdyaXRlciwgZm9yd2FyZF9saXN0ZW5lcik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHBlci53cml0ZV9kb2Mod3JpdGVyKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmaXhlZF90eXBlX25hbWUub3V0cHV0X2NvbW1lbnQod3JpdGVyKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgidHlwZWRlZiBTdHJpbmcgIikK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChmaXhlZF90eXBl
X25hbWUuY2xhc3NfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
LmFwcGVuZCgiO1xuXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5TdHJpbmcKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWYgcmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0
aG9kCisgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNz
aW9uX3BhdHRlcm4oKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQog
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29kZUdlbmVyYXRvcgorICAgICAgICAg
ICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICBkZWYg
Z2V0X2luX2NfdHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjbHMucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X2NfcGFyYW1fdHlwZShQ
YXJhbVR5cGUuRVZFTlQsIG9wdGlvbmFsKS5nZXRfdGV4dCgpCiAKLSAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190
eXBlKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuU3RyaW5nCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBQbGFpblN0cmluZwogCi0gICAgICAgICAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFs
dWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Tm9uZQorICAgICAgICAgICAgICAgIGVsc2U6CiAKLSAgICAgICAgICAgICAgICAgICAgQGNsYXNz
bWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfaW5fY190eXBlX3RleHQoY2xzLCBv
cHRpb25hbCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjRklYTUU6IHJldHVybiBhIHR5cGVk
ZWYgbmFtZSBpbnN0ZWFkLgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5yZWR1
Y2VfdG9fcmF3X3R5cGUoKS5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5FVkVOVCwgb3B0aW9u
YWwpLmdldF90ZXh0KCkKKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgVHlwZWRlZlN0cmluZzoK
KyAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoKToKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGFzcyBDb2RlR2VuZXJhdG9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5l
cmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBmb3J3YXJkX2xpc3RlbmVyKToKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci53cml0ZV9kb2Mod3JpdGVyKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWRfdHlwZV9uYW1lLm91dHB1dF9jb21t
ZW50KHdyaXRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5u
ZXdsaW5lKCJ0eXBlZGVmIFN0cmluZyAiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLmFwcGVuZChmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIjtcblxuIikKKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZiByZWdpc3Rlcl91c2UoZm9yd2FyZF9saXN0ZW5lcik6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWYgZ2V0X2dlbmVyYXRlX3Bhc3NfaWQoKToKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBUeXBlQnVpbGRlclBhc3MuVFlQRURFRgorCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVHZW5lcmF0b3IKKworICAgICAgICAgICAg
ICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJl
ZHVjZV90b19yYXdfdHlwZSgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBS
YXdUeXBlcy5TdHJpbmcKIAotICAgICAgICAgICAgICAgIHJldHVybiBQbGFpblN0cmluZworICAg
ICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAgICAgICAgICAgICAgICAg
QGNsYXNzbWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2luX2NfdHlwZV90
ZXh0KGNscywgb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAi
Y29uc3QgJXMlcyYiICUgKGhlbHBlci5mdWxsX25hbWVfcHJlZml4LCBmaXhlZF90eXBlX25hbWUu
Y2xhc3NfbmFtZSkKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZWRlZlN0cmluZwog
CiAgICAgICAgIGVsaWYganNvbl90eXBhYmxlWyJ0eXBlIl0gPT0gIm9iamVjdCI6CiAgICAgICAg
ICAgICBpZiAicHJvcGVydGllcyIgaW4ganNvbl90eXBhYmxlOgpAQCAtODYzLDYgKzg5NiwxMCBA
QCBjbGFzcyBUeXBlQmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJl
Z2lzdGVyX3VzZShmb3J3YXJkX2xpc3RlbmVyKToKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVscGVyLmFkZF90b19mb3J3YXJkX2xpc3RlbmVyKGZvcndhcmRfbGlzdGVuZXIpCiAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmIGdldF9nZW5lcmF0ZV9wYXNzX2lkKCk6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlQnVpbGRlclBhc3MuTUFJTgorCiAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gQ29kZUdlbmVyYXRvcgogCiAgICAgICAgICAgICAgICAg
ICAgIEBjbGFzc21ldGhvZApAQCAtOTcyLDYgKzEwMDksMTAgQEAgY2xhc3MgVHlwZUJpbmRpbmdz
OgogICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlZ2lzdGVyX3VzZShmb3J3YXJkX2xpc3Rl
bmVyKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXIuYWRkX3RvX2ZvcndhcmRf
bGlzdGVuZXIoZm9yd2FyZF9saXN0ZW5lcikKIAorICAgICAgICAgICAgICAgICAgICAgICAgQHN0
YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9nZW5lcmF0ZV9wYXNz
X2lkKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVCdWlsZGVyUGFz
cy5NQUlOCisKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVHZW5lcmF0b3IKIAogICAg
ICAgICAgICAgICAgIEBjbGFzc21ldGhvZApAQCAtMjA3NiwxNyArMjExNywxOCBAQCBjbGFzcyBH
ZW5lcmF0b3I6CiAgICAgICAgICAgICAgICAgICAgIGlmIGRvbWFpbl9ndWFyZDoKICAgICAgICAg
ICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9jbG9zZShvdXQpCiAKLSAgICAg
ICAgZGVmIGNhbGxfdHlwZV9idWlsZGVyKHR5cGVfZGF0YSwgd3JpdGVyX2dldHRlcik6Ci0gICAg
ICAgICAgICAjIERvIG5vdCBnZW5lcmF0ZSBmb3J3YXJkcyBmb3IgdGhpcyB0eXBlIGFueSBsb25n
ZXIuCi0gICAgICAgICAgICBGb3J3YXJkTGlzdGVuZXIuYWxyZWFkeV9kZWNsYXJlZF9zZXQuYWRk
KHR5cGVfZGF0YSkKKyAgICAgICAgZGVmIGNyZWF0ZV90eXBlX2J1aWxkZXJfY2FsbGVyKGdlbmVy
YXRlX3Bhc3NfaWQpOgorICAgICAgICAgICAgZGVmIGNhbGxfdHlwZV9idWlsZGVyKHR5cGVfZGF0
YSwgd3JpdGVyX2dldHRlcik6CisgICAgICAgICAgICAgICAgIyBEbyBub3QgZ2VuZXJhdGUgZm9y
d2FyZHMgZm9yIHRoaXMgdHlwZSBhbnkgbG9uZ2VyLgorICAgICAgICAgICAgICAgIEZvcndhcmRM
aXN0ZW5lci5hbHJlYWR5X2RlY2xhcmVkX3NldC5hZGQodHlwZV9kYXRhKQogCi0gICAgICAgICAg
ICBjb2RlX2dlbmVyYXRvciA9IHR5cGVfZGF0YS5nZXRfYmluZGluZygpLmdldF9jb2RlX2dlbmVy
YXRvcigpCi0gICAgICAgICAgICAjIENhbGwgbGF6eSBnZXR0ZXIgZXZlbiBpZiB3ZSBkb24ndCBn
ZW5lcmF0IGFueXRoaW5nLgotICAgICAgICAgICAgd3JpdGVyID0gd3JpdGVyX2dldHRlcigpCi0g
ICAgICAgICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKLSAgICAgICAgICAgICAgICBjb2RlX2dlbmVy
YXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBGb3J3YXJkTGlzdGVuZXIpCisgICAg
ICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IgPSB0eXBlX2RhdGEuZ2V0X2JpbmRpbmcoKS5nZXRf
Y29kZV9nZW5lcmF0b3IoKQorICAgICAgICAgICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9yIGFuZCBn
ZW5lcmF0ZV9wYXNzX2lkID09IGNvZGVfZ2VuZXJhdG9yLmdldF9nZW5lcmF0ZV9wYXNzX2lkKCk6
CisgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9IHdyaXRlcl9nZXR0ZXIoKQorICAgICAgICAg
ICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBG
b3J3YXJkTGlzdGVuZXIpCisgICAgICAgICAgICByZXR1cm4gY2FsbF90eXBlX2J1aWxkZXIKIAot
ICAgICAgICBnZW5lcmF0ZV9hbGxfZG9tYWluc19jb2RlKG91dHB1dCwgY2FsbF90eXBlX2J1aWxk
ZXIpCisgICAgICAgIGdlbmVyYXRlX2FsbF9kb21haW5zX2NvZGUob3V0cHV0LCBjcmVhdGVfdHlw
ZV9idWlsZGVyX2NhbGxlcihUeXBlQnVpbGRlclBhc3MuTUFJTikpCiAKICAgICAgICAgR2VuZXJh
dG9yLnR5cGVfYnVpbGRlcl9mb3J3YXJkcy5hcHBlbmQoIi8vIEZvcndhcmQgZGVjbGFyYXRpb25z
LlxuIikKIApAQCAtMjA5Niw3ICsyMTM4LDEzIEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAg
ICAgICAgICBiaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpLmdlbmVyYXRlX2ZvcndhcmRfZGVj
bGFyYXRpb24od3JpdGVyX2dldHRlcigpKQogICAgICAgICBnZW5lcmF0ZV9hbGxfZG9tYWluc19j
b2RlKEdlbmVyYXRvci50eXBlX2J1aWxkZXJfZm9yd2FyZHMsIGdlbmVyYXRlX2ZvcndhcmRfY2Fs
bGJhY2spCiAKLSAgICAgICAgR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9mb3J3YXJkcy5hcHBlbmQo
Ii8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy5cbiIpCisgICAgICAgIEdlbmVyYXRvci50
eXBlX2J1aWxkZXJfZm9yd2FyZHMuYXBwZW5kKCIvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlv
bnMuXG5cbiIpCisKKyAgICAgICAgR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9mb3J3YXJkcy5hcHBl
bmQoIi8vIFR5cGVkZWZzLlxuIikKKworICAgICAgICBnZW5lcmF0ZV9hbGxfZG9tYWluc19jb2Rl
KEdlbmVyYXRvci50eXBlX2J1aWxkZXJfZm9yd2FyZHMsIGNyZWF0ZV90eXBlX2J1aWxkZXJfY2Fs
bGVyKFR5cGVCdWlsZGVyUGFzcy5UWVBFREVGKSkKKworICAgICAgICBHZW5lcmF0b3IudHlwZV9i
dWlsZGVyX2ZvcndhcmRzLmFwcGVuZCgiLy8gRW5kIG9mIHR5cGVkZWZzLlxuXG4iKQogCiAKIGRl
ZiBmbGF0dGVuX2xpc3QoaW5wdXQpOgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>