<?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>32454</bug_id>
          
          <creation_ts>2009-12-11 15:20:10 -0800</creation_ts>
          <short_desc>Refactor construction of simple strings to avoid string concatenation.</short_desc>
          <delta_ts>2009-12-11 15:34:22 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>170954</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-12-11 15:20:10 -0800</bug_when>
    <thetext>Building strings through concatenation has a memory and performance cost – a memory cost since we must over-allocate the buffer to leave space to append into, and performance in that the string may still require reallocation (and thus copying during construction).  Instead move the full construction to within a single function call (makeString), so that the arguments&apos; lengths can be calculated and an appropriate sized buffer allocated before copying any characters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170955</commentid>
    <comment_count>1</comment_count>
      <attachid>44713</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-12-11 15:25:16 -0800</bug_when>
    <thetext>Created attachment 44713
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170956</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-11 15:26:05 -0800</bug_when>
    <thetext>Attachment 44713 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
JavaScriptCore/runtime/UString.h:547:  This { should be at the end of the previous line  [whitespace/braces] [4]
JavaScriptCore/runtime/UString.h:570:  This { should be at the end of the previous line  [whitespace/braces] [4]
JavaScriptCore/runtime/UString.h:593:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170957</commentid>
    <comment_count>3</comment_count>
      <attachid>44713</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-12-11 15:30:37 -0800</bug_when>
    <thetext>Comment on attachment 44713
The patch

rme=</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170958</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-12-11 15:34:22 -0800</bug_when>
    <thetext>Transmitting file data .................
Committed revision 52028.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44713</attachid>
            <date>2009-12-11 15:25:16 -0800</date>
            <delta_ts>2009-12-11 15:30:37 -0800</delta_ts>
            <desc>The patch</desc>
            <filename>patch.makeString.txt</filename>
            <type>text/plain</type>
            <size>43136</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUyMDI2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODIgQEAKKzIwMDktMTItMTEgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zMjQ1NAorICAgICAgICBSZWZhY3RvciBjb25zdHJ1Y3Rpb24gb2Ygc2ltcGxl
IHN0cmluZ3MgdG8gYXZvaWQgc3RyaW5nIGNvbmNhdGVuYXRpb24uCisKKyAgICAgICAgQnVpbGRp
bmcgc3RyaW5ncyB0aHJvdWdoIGNvbmNhdGVuYXRpb24gaGFzIGEgbWVtb3J5IGFuZCBwZXJmb3Jt
YW5jZSBjb3N0IC0KKyAgICAgICAgYSBtZW1vcnkgY29zdCBzaW5jZSB3ZSBtdXN0IG92ZXItYWxs
b2NhdGUgdGhlIGJ1ZmZlciB0byBsZWF2ZSBzcGFjZSB0byBhcHBlbmQKKyAgICAgICAgaW50bywg
YW5kIHBlcmZvcm1hbmNlIGluIHRoYXQgdGhlIHN0cmluZyBtYXkgc3RpbGwgcmVxdWlyZSByZWFs
bG9jYXRpb24gKGFuZAorICAgICAgICB0aHVzIGNvcHlpbmcgZHVyaW5nIGNvbnN0cnVjdGlvbiku
ICBJbnN0ZWFkIG1vdmUgdGhlIGZ1bGwgY29uc3RydWN0aW9uIHRvCisgICAgICAgIHdpdGhpbiBh
IHNpbmdsZSBmdW5jdGlvbiBjYWxsIChtYWtlU3RyaW5nKSwgc28gdGhhdCB0aGUgYXJndW1lbnRz
JyBsZW5ndGhzCisgICAgICAgIGNhbiBiZSBjYWxjdWxhdGVkIGFuZCBhbiBhcHByb3ByaWF0ZSBz
aXplZCBidWZmZXIgYWxsb2NhdGVkIGJlZm9yZSBjb3B5aW5nCisgICAgICAgIGFueSBjaGFyYWN0
ZXJzLgorCisgICAgICAgIH5ObyBwZXJmb3JtYW5jZSBjaGFuZ2UgKH4yJSBwcm9ncmVzc2lvbiBv
biBkYXRlIHRlc3RzKS4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAg
ICAgIChKU0M6OmVzY2FwZVF1b3Rlcyk6CisgICAgICAgIChKU0M6OnZhbHVlVG9Tb3VyY2VTdHJp
bmcpOgorICAgICAgICAoSlNDOjpjb25zdGFudE5hbWUpOgorICAgICAgICAoSlNDOjppZE5hbWUp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJlZ2lzdGVyTmFtZSk6CisgICAgICAgIChKU0M6
OnJlZ2V4cFRvU291cmNlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6cmVnZXhwTmFtZSk6CisgICAg
ICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OnN1YnN0
aXR1dGUpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
UHJvZmlsZXI6OmNyZWF0ZUNhbGxJZGVudGlmaWVyKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNhbGxEYXRlKToKKyAgICAgICAgKiBydW50
aW1lL0RhdGVDb252ZXJzaW9uLmNwcDoKKyAgICAgICAgKEpTQzo6Zm9ybWF0RGF0ZSk6CisgICAg
ICAgIChKU0M6OmZvcm1hdERhdGVVVENWYXJpYW50KToKKyAgICAgICAgKEpTQzo6Zm9ybWF0VGlt
ZSk6CisgICAgICAgIChKU0M6OmZvcm1hdFRpbWVVVEMpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0
ZUNvbnZlcnNpb24uaDoKKyAgICAgICAgKEpTQzo6KToKKyAgICAgICAgKiBydW50aW1lL0RhdGVQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9TdHJpbmcpOgorICAg
ICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9VVENTdHJpbmcpOgorICAgICAgICAoSlNDOjpkYXRl
UHJvdG9GdW5jVG9EYXRlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1RvVGlt
ZVN0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0dNVFN0cmluZyk6CisgICAg
ICAgICogcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmVycm9yUHJv
dG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHA6
CisgICAgICAgIChKU0M6OmNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IpOgorICAgICAgICAo
SlNDOjpjcmVhdGVFcnJvck1lc3NhZ2UpOgorICAgICAgICAoSlNDOjpjcmVhdGVJbnZhbGlkUGFy
YW1FcnJvcik6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHA6CisgICAg
ICAgIChKU0M6Omluc2VydFNlbWljb2xvbklmTmVlZGVkKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rp
b25Qcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9PYmplY3RQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICog
cnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFJl
Z0V4cCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpSZWdFeHBPYmplY3Q6Om1hdGNoKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlw
ZS5jcHA6CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvRnVuY0NvbXBpbGUpOgorICAgICAgICAo
SlNDOjpyZWdFeHBQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNCaWcpOgorICAgICAg
ICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTbWFsbCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3Rv
RnVuY0JsaW5rKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQm9sZCk6CisgICAgICAg
IChKU0M6OnN0cmluZ1Byb3RvRnVuY0ZpeGVkKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9G
dW5jSXRhbGljcyk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1N0cmlrZSk6CisgICAg
ICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1N1Yik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3Rv
RnVuY1N1cCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0ZvbnRjb2xvcik6CisgICAg
ICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKToKKyAgICAgICAgKEpTQzo6c3RyaW5n
UHJvdG9GdW5jQW5jaG9yKToKKyAgICAgICAgKiBydW50aW1lL1VTdHJpbmcuaDoKKyAgICAgICAg
KEpTQzo6KToKKyAgICAgICAgKEpTQzo6bWFrZVN0cmluZyk6CisKIDIwMDktMTItMTAgIEdhdmlu
IEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IE9saXZlciBIdW50LgpJbmRleDogSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CShyZXZpc2lvbiA1MjAyNikKKysrIEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgc3RhdGljIFVTdHJpbmcgZXNjYXBl
UXVvdGVzKGNvbnN0IFVTdHJpbgogICAgIFVTdHJpbmcgcmVzdWx0ID0gc3RyOwogICAgIGludCBw
b3MgPSAwOwogICAgIHdoaWxlICgocG9zID0gcmVzdWx0LmZpbmQoJ1wiJywgcG9zKSkgPj0gMCkg
ewotICAgICAgICByZXN1bHQgPSByZXN1bHQuc3Vic3RyKDAsIHBvcykgKyAiXCJcXFwiXCIiICsg
cmVzdWx0LnN1YnN0cihwb3MgKyAxKTsKKyAgICAgICAgcmVzdWx0ID0gbWFrZVN0cmluZyhyZXN1
bHQuc3Vic3RyKDAsIHBvcyksICJcIlxcXCJcIiIsIHJlc3VsdC5zdWJzdHIocG9zICsgMSkpOwog
ICAgICAgICBwb3MgKz0gNDsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTYyLDIzICs2
MiwyMCBAQCBzdGF0aWMgVVN0cmluZyB2YWx1ZVRvU291cmNlU3RyaW5nKEV4ZWNTCiAgICAgaWYg
KCF2YWwpCiAgICAgICAgIHJldHVybiAiMCI7CiAKLSAgICBpZiAodmFsLmlzU3RyaW5nKCkpIHsK
LSAgICAgICAgVVN0cmluZyByZXN1bHQoIlwiIik7Ci0gICAgICAgIHJlc3VsdCArPSBlc2NhcGVR
dW90ZXModmFsLnRvU3RyaW5nKGV4ZWMpKSArICJcIiI7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgfSAKKyAgICBpZiAodmFsLmlzU3RyaW5nKCkpCisgICAgICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJcIiIsIGVzY2FwZVF1b3Rlcyh2YWwudG9TdHJpbmcoZXhlYykpLCAiXCIiKTsKIAogICAg
IHJldHVybiB2YWwudG9TdHJpbmcoZXhlYyk7CiB9CiAKIHN0YXRpYyBDU3RyaW5nIGNvbnN0YW50
TmFtZShFeGVjU3RhdGUqIGV4ZWMsIGludCBrLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVy
biAodmFsdWVUb1NvdXJjZVN0cmluZyhleGVjLCB2YWx1ZSkgKyAiKEBrIiArIFVTdHJpbmc6OmZy
b20oayAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSArICIpIikuVVRGOFN0cmluZygpOwor
ICAgIHJldHVybiBtYWtlU3RyaW5nKHZhbHVlVG9Tb3VyY2VTdHJpbmcoZXhlYywgdmFsdWUpLCAi
KEBrIiwgVVN0cmluZzo6ZnJvbShrIC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpLCAiKSIp
LlVURjhTdHJpbmcoKTsKIH0KIAogc3RhdGljIENTdHJpbmcgaWROYW1lKGludCBpZDAsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50KQogewotICAgIHJldHVybiAoaWRlbnQudXN0cmluZygpICsgIihA
aWQiICsgVVN0cmluZzo6ZnJvbShpZDApICsiKSIpLlVURjhTdHJpbmcoKTsKKyAgICByZXR1cm4g
bWFrZVN0cmluZyhpZGVudC51c3RyaW5nKCksICIoQGlkIiwgVVN0cmluZzo6ZnJvbShpZDApLCAi
KSIpLlVURjhTdHJpbmcoKTsKIH0KIAogQ1N0cmluZyBDb2RlQmxvY2s6OnJlZ2lzdGVyTmFtZShF
eGVjU3RhdGUqIGV4ZWMsIGludCByKSBjb25zdApAQCAtODksMjUgKzg2LDI2IEBAIENTdHJpbmcg
Q29kZUJsb2NrOjpyZWdpc3Rlck5hbWUoRXhlY1N0YXQKICAgICBpZiAoaXNDb25zdGFudFJlZ2lz
dGVySW5kZXgocikpCiAgICAgICAgIHJldHVybiBjb25zdGFudE5hbWUoZXhlYywgciwgZ2V0Q29u
c3RhbnQocikpOwogCi0gICAgcmV0dXJuIChVU3RyaW5nKCJyIikgKyBVU3RyaW5nOjpmcm9tKHIp
KS5VVEY4U3RyaW5nKCk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoInIiLCBVU3RyaW5nOjpmcm9t
KHIpKS5VVEY4U3RyaW5nKCk7CiB9CiAKIHN0YXRpYyBVU3RyaW5nIHJlZ2V4cFRvU291cmNlU3Ry
aW5nKFJlZ0V4cCogcmVnRXhwKQogewotICAgIFVTdHJpbmcgcGF0dGVybiA9IFVTdHJpbmcoIi8i
KSArIHJlZ0V4cC0+cGF0dGVybigpICsgIi8iOworICAgIGNoYXIgcG9zdGZpeFs1XSA9IHsgJy8n
LCAwLCAwLCAwLCAwIH07CisgICAgaW50IGluZGV4ID0gMTsKICAgICBpZiAocmVnRXhwLT5nbG9i
YWwoKSkKLSAgICAgICAgcGF0dGVybiArPSAiZyI7CisgICAgICAgIHBvc3RmaXhbaW5kZXgrK10g
PSAnZyc7CiAgICAgaWYgKHJlZ0V4cC0+aWdub3JlQ2FzZSgpKQotICAgICAgICBwYXR0ZXJuICs9
ICJpIjsKKyAgICAgICAgcG9zdGZpeFtpbmRleCsrXSA9ICdpJzsKICAgICBpZiAocmVnRXhwLT5t
dWx0aWxpbmUoKSkKLSAgICAgICAgcGF0dGVybiArPSAibSI7CisgICAgICAgIHBvc3RmaXhbaW5k
ZXhdID0gJ20nOwogCi0gICAgcmV0dXJuIHBhdHRlcm47CisgICAgcmV0dXJuIG1ha2VTdHJpbmco
Ii8iLCByZWdFeHAtPnBhdHRlcm4oKSwgcG9zdGZpeCk7CiB9CiAKIHN0YXRpYyBDU3RyaW5nIHJl
Z2V4cE5hbWUoaW50IHJlLCBSZWdFeHAqIHJlZ2V4cCkKIHsKLSAgICByZXR1cm4gKHJlZ2V4cFRv
U291cmNlU3RyaW5nKHJlZ2V4cCkgKyAiKEByZSIgKyBVU3RyaW5nOjpmcm9tKHJlKSArICIpIiku
VVRGOFN0cmluZygpOworICAgIHJldHVybiBtYWtlU3RyaW5nKHJlZ2V4cFRvU291cmNlU3RyaW5n
KHJlZ2V4cCksICIoQHJlIiwgVVN0cmluZzo6ZnJvbShyZSksICIpIikuVVRGOFN0cmluZygpOwog
fQogCiBzdGF0aWMgVVN0cmluZyBwb2ludGVyVG9Tb3VyY2VTdHJpbmcodm9pZCogcCkKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lv
biA1MjAyNikKKysrIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03OCwxMCArNzgsNyBAQCBzdGF0aWMgdm9pZCBzdWJzdGl0dXRl
KFVTdHJpbmcmIHN0cmluZywgCiB7CiAgICAgaW50IHBvc2l0aW9uID0gc3RyaW5nLmZpbmQoIiVz
Iik7CiAgICAgQVNTRVJUKHBvc2l0aW9uICE9IC0xKTsKLSAgICBVU3RyaW5nIG5ld1N0cmluZyA9
IHN0cmluZy5zdWJzdHIoMCwgcG9zaXRpb24pOwotICAgIG5ld1N0cmluZy5hcHBlbmQoc3Vic3Ry
aW5nKTsKLSAgICBuZXdTdHJpbmcuYXBwZW5kKHN0cmluZy5zdWJzdHIocG9zaXRpb24gKyAyKSk7
Ci0gICAgc3RyaW5nID0gbmV3U3RyaW5nOworICAgIHN0cmluZyA9IG1ha2VTdHJpbmcoc3RyaW5n
LnN1YnN0cigwLCBwb3NpdGlvbiksIHN1YnN0cmluZywgc3RyaW5nLnN1YnN0cihwb3NpdGlvbiAr
IDIpKTsKIH0KIAogUmVnaXN0ZXJJRCogVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGE6OmVtaXRUaHJv
d0Vycm9yKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIEVycm9yVHlwZSB0eXBlLCBjb25z
dCBjaGFyKiBtZXNzYWdlKQpJbmRleDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmNwcAko
cmV2aXNpb24gNTIwMjYpCisrKyBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0OCw3ICsxNDgsNyBAQCBDYWxsSWRlbnRpZmllciBQcm9maWxl
cjo6Y3JlYXRlQ2FsbElkZW50CiAgICAgfQogICAgIGlmIChhc09iamVjdChmdW5jdGlvblZhbHVl
KS0+aW5oZXJpdHMoJkludGVybmFsRnVuY3Rpb246OmluZm8pKQogICAgICAgICByZXR1cm4gQ2Fs
bElkZW50aWZpZXIoc3RhdGljX2Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KGFzT2JqZWN0KGZ1bmN0
aW9uVmFsdWUpKS0+bmFtZShleGVjKSwgZGVmYXVsdFNvdXJjZVVSTCwgZGVmYXVsdExpbmVOdW1i
ZXIpOwotICAgIHJldHVybiBDYWxsSWRlbnRpZmllcigiKCIgKyBhc09iamVjdChmdW5jdGlvblZh
bHVlKS0+Y2xhc3NOYW1lKCkgKyAiIG9iamVjdCkiLCBkZWZhdWx0U291cmNlVVJMLCBkZWZhdWx0
TGluZU51bWJlcik7CisgICAgcmV0dXJuIENhbGxJZGVudGlmaWVyKG1ha2VTdHJpbmcoIigiLCBh
c09iamVjdChmdW5jdGlvblZhbHVlKS0+Y2xhc3NOYW1lKCksICIgb2JqZWN0KSIpLCBkZWZhdWx0
U291cmNlVVJMLCBkZWZhdWx0TGluZU51bWJlcik7CiB9CiAKIENhbGxJZGVudGlmaWVyIGNyZWF0
ZUNhbGxJZGVudGlmaWVyRnJvbUZ1bmN0aW9uSW1wKEV4ZWNTdGF0ZSogZXhlYywgSlNGdW5jdGlv
biogZnVuY3Rpb24pCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0
b3IuY3BwCShyZXZpc2lvbiA1MjAyNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMywxMSBAQCBzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxEYXRlKEV4CiAgICAgdG0gbG9jYWxUTTsKICAgICBn
ZXRMb2NhbFRpbWUoJmxvY2FsVGltZSwgJmxvY2FsVE0pOwogICAgIEdyZWdvcmlhbkRhdGVUaW1l
IHRzKGV4ZWMsIGxvY2FsVE0pOwotICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywg
Zm9ybWF0RGF0ZSh0cykgKyAiICIgKyBmb3JtYXRUaW1lKHRzKSk7CisgICAgRGF0ZUNvbnZlcnNp
b25CdWZmZXIgZGF0ZTsKKyAgICBEYXRlQ29udmVyc2lvbkJ1ZmZlciB0aW1lOworICAgIGZvcm1h
dERhdGUodHMsIGRhdGUpOworICAgIGZvcm1hdFRpbWUodHMsIHRpbWUpOworICAgIHJldHVybiBq
c05vbnRyaXZpYWxTdHJpbmcoZXhlYywgbWFrZVN0cmluZyhkYXRlLCAiICIsIHRpbWUpKTsKIH0K
IAogQ2FsbFR5cGUgRGF0ZUNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShDYWxsRGF0YSYgY2FsbERh
dGEpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb252ZXJzaW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb252ZXJzaW9uLmNwcAkocmV2
aXNpb24gNTIwMjYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb252ZXJzaW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjIsNDkgKzYyLDQxIEBAIGRvdWJsZSBwYXJzZURhdGUoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCAKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVVTdHJpbmcgZm9y
bWF0RGF0ZShjb25zdCBHcmVnb3JpYW5EYXRlVGltZSAmdCkKK3ZvaWQgZm9ybWF0RGF0ZShjb25z
dCBHcmVnb3JpYW5EYXRlVGltZSAmdCwgRGF0ZUNvbnZlcnNpb25CdWZmZXImIGJ1ZmZlcikKIHsK
LSAgICBjaGFyIGJ1ZmZlclsxMDBdOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZl
ciksICIlcyAlcyAlMDJkICUwNGQiLAorICAgIHNucHJpbnRmKGJ1ZmZlciwgRGF0ZUNvbnZlcnNp
b25CdWZmZXJTaXplLCAiJXMgJXMgJTAyZCAlMDRkIiwKICAgICAgICAgd2Vla2RheU5hbWVbKHQu
d2Vla0RheSArIDYpICUgN10sCiAgICAgICAgIG1vbnRoTmFtZVt0Lm1vbnRoXSwgdC5tb250aERh
eSwgdC55ZWFyICsgMTkwMCk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKIH0KIAotVVN0cmluZyBmb3Jt
YXREYXRlVVRDVmFyaWFudChjb25zdCBHcmVnb3JpYW5EYXRlVGltZSAmdCkKK3ZvaWQgZm9ybWF0
RGF0ZVVUQ1ZhcmlhbnQoY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUgJnQsIERhdGVDb252ZXJzaW9u
QnVmZmVyJiBidWZmZXIpCiB7Ci0gICAgY2hhciBidWZmZXJbMTAwXTsKLSAgICBzbnByaW50Zihi
dWZmZXIsIHNpemVvZihidWZmZXIpLCAiJXMsICUwMmQgJXMgJTA0ZCIsCisgICAgc25wcmludGYo
YnVmZmVyLCBEYXRlQ29udmVyc2lvbkJ1ZmZlclNpemUsICIlcywgJTAyZCAlcyAlMDRkIiwKICAg
ICAgICAgd2Vla2RheU5hbWVbKHQud2Vla0RheSArIDYpICUgN10sCiAgICAgICAgIHQubW9udGhE
YXksIG1vbnRoTmFtZVt0Lm1vbnRoXSwgdC55ZWFyICsgMTkwMCk7Ci0gICAgcmV0dXJuIGJ1ZmZl
cjsKIH0KIAotVVN0cmluZyBmb3JtYXRUaW1lKGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lICZ0KQor
dm9pZCBmb3JtYXRUaW1lKGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lICZ0LCBEYXRlQ29udmVyc2lv
bkJ1ZmZlciYgYnVmZmVyKQogewotICAgIGNoYXIgYnVmZmVyWzEwMF07CiAgICAgaW50IG9mZnNl
dCA9IGFicyhnbXRvZmZzZXQodCkpOwogICAgIGNoYXIgdGltZVpvbmVOYW1lWzcwXTsKICAgICBz
dHJ1Y3QgdG0gZ3RtID0gdDsKICAgICBzdHJmdGltZSh0aW1lWm9uZU5hbWUsIHNpemVvZih0aW1l
Wm9uZU5hbWUpLCAiJVoiLCAmZ3RtKTsKIAogICAgIGlmICh0aW1lWm9uZU5hbWVbMF0pIHsKLSAg
ICAgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiUwMmQ6JTAyZDolMDJkIEdN
VCVjJTAyZCUwMmQgKCVzKSIsCisgICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgRGF0ZUNvbnZlcnNp
b25CdWZmZXJTaXplLCAiJTAyZDolMDJkOiUwMmQgR01UJWMlMDJkJTAyZCAoJXMpIiwKICAgICAg
ICAgICAgIHQuaG91ciwgdC5taW51dGUsIHQuc2Vjb25kLAogICAgICAgICAgICAgZ210b2Zmc2V0
KHQpIDwgMCA/ICctJyA6ICcrJywgb2Zmc2V0IC8gKDYwKjYwKSwgKG9mZnNldCAvIDYwKSAlIDYw
LCB0aW1lWm9uZU5hbWUpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHNucHJpbnRmKGJ1ZmZlciwg
c2l6ZW9mKGJ1ZmZlciksICIlMDJkOiUwMmQ6JTAyZCBHTVQlYyUwMmQlMDJkIiwKKyAgICAgICAg
c25wcmludGYoYnVmZmVyLCBEYXRlQ29udmVyc2lvbkJ1ZmZlclNpemUsICIlMDJkOiUwMmQ6JTAy
ZCBHTVQlYyUwMmQlMDJkIiwKICAgICAgICAgICAgIHQuaG91ciwgdC5taW51dGUsIHQuc2Vjb25k
LAogICAgICAgICAgICAgZ210b2Zmc2V0KHQpIDwgMCA/ICctJyA6ICcrJywgb2Zmc2V0IC8gKDYw
KjYwKSwgKG9mZnNldCAvIDYwKSAlIDYwKTsKICAgICB9Ci0gICAgcmV0dXJuIFVTdHJpbmcoYnVm
ZmVyKTsKIH0KIAotVVN0cmluZyBmb3JtYXRUaW1lVVRDKGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1l
ICZ0KQordm9pZCBmb3JtYXRUaW1lVVRDKGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lICZ0LCBEYXRl
Q29udmVyc2lvbkJ1ZmZlciYgYnVmZmVyKQogewotICAgIGNoYXIgYnVmZmVyWzEwMF07Ci0gICAg
c25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiUwMmQ6JTAyZDolMDJkIEdNVCIsIHQu
aG91ciwgdC5taW51dGUsIHQuc2Vjb25kKTsKLSAgICByZXR1cm4gVVN0cmluZyhidWZmZXIpOwor
ICAgIHNucHJpbnRmKGJ1ZmZlciwgRGF0ZUNvbnZlcnNpb25CdWZmZXJTaXplLCAiJTAyZDolMDJk
OiUwMmQgR01UIiwgdC5ob3VyLCB0Lm1pbnV0ZSwgdC5zZWNvbmQpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnZlcnNpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb252ZXJzaW9uLmgJKHJl
dmlzaW9uIDUyMDI2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29udmVyc2lvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNyArNDIsMjEgQEAKICNpZm5kZWYgRGF0ZUNvbnZlcnNp
b25faAogI2RlZmluZSBEYXRlQ29udmVyc2lvbl9oCiAKKyNpbmNsdWRlICJVU3RyaW5nLmgiCisK
IG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBFeGVjU3RhdGU7Ci1jbGFzcyBVU3RyaW5nOwogc3Ry
dWN0IEdyZWdvcmlhbkRhdGVUaW1lOwogCitzdGF0aWMgY29uc3QgdW5zaWduZWQgRGF0ZUNvbnZl
cnNpb25CdWZmZXJTaXplID0gMTAwOwordHlwZWRlZiBjaGFyIERhdGVDb252ZXJzaW9uQnVmZmVy
W0RhdGVDb252ZXJzaW9uQnVmZmVyU2l6ZV07CisKIGRvdWJsZSBwYXJzZURhdGUoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBVU3RyaW5nJik7Ci1VU3RyaW5nIGZvcm1hdERhdGUoY29uc3QgR3JlZ29y
aWFuRGF0ZVRpbWUmKTsKLVVTdHJpbmcgZm9ybWF0RGF0ZVVUQ1ZhcmlhbnQoY29uc3QgR3JlZ29y
aWFuRGF0ZVRpbWUmKTsKLVVTdHJpbmcgZm9ybWF0VGltZShjb25zdCBHcmVnb3JpYW5EYXRlVGlt
ZSYpOwotVVN0cmluZyBmb3JtYXRUaW1lVVRDKGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lJik7Cit2
b2lkIGZvcm1hdERhdGUoY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUmLCBEYXRlQ29udmVyc2lvbkJ1
ZmZlciYpOwordm9pZCBmb3JtYXREYXRlVVRDVmFyaWFudChjb25zdCBHcmVnb3JpYW5EYXRlVGlt
ZSYsIERhdGVDb252ZXJzaW9uQnVmZmVyJik7Cit2b2lkIGZvcm1hdFRpbWUoY29uc3QgR3JlZ29y
aWFuRGF0ZVRpbWUmLCBEYXRlQ29udmVyc2lvbkJ1ZmZlciYpOwordm9pZCBmb3JtYXRUaW1lVVRD
KGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lJiwgRGF0ZUNvbnZlcnNpb25CdWZmZXImKTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90
eXBlLmNwcAkocmV2aXNpb24gNTIwMjYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQ
cm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjMsNyArNDIzLDExIEBAIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9TdHIKICAgICBjb25zdCBHcmVnb3JpYW5EYXRl
VGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUo
ZXhlYyk7CiAgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKICAgICAgICAgcmV0dXJuIGpzTm9u
dHJpdmlhbFN0cmluZyhleGVjLCAiSW52YWxpZCBEYXRlIik7Ci0gICAgcmV0dXJuIGpzTm9udHJp
dmlhbFN0cmluZyhleGVjLCBmb3JtYXREYXRlKCpncmVnb3JpYW5EYXRlVGltZSkgKyAiICIgKyBm
b3JtYXRUaW1lKCpncmVnb3JpYW5EYXRlVGltZSkpOworICAgIERhdGVDb252ZXJzaW9uQnVmZmVy
IGRhdGU7CisgICAgRGF0ZUNvbnZlcnNpb25CdWZmZXIgdGltZTsKKyAgICBmb3JtYXREYXRlKCpn
cmVnb3JpYW5EYXRlVGltZSwgZGF0ZSk7CisgICAgZm9ybWF0VGltZSgqZ3JlZ29yaWFuRGF0ZVRp
bWUsIHRpbWUpOworICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgbWFrZVN0cmlu
ZyhkYXRlLCAiICIsIHRpbWUpKTsKIH0KIAogSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90
b0Z1bmNUb1VUQ1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQpAQCAtNDM2LDcgKzQ0MCwxMSBAQCBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvVVRDCiAgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUq
IGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKGV4
ZWMpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCiAgICAgICAgIHJldHVybiBqc05vbnRy
aXZpYWxTdHJpbmcoZXhlYywgIkludmFsaWQgRGF0ZSIpOwotICAgIHJldHVybiBqc05vbnRyaXZp
YWxTdHJpbmcoZXhlYywgZm9ybWF0RGF0ZVVUQ1ZhcmlhbnQoKmdyZWdvcmlhbkRhdGVUaW1lKSAr
ICIgIiArIGZvcm1hdFRpbWVVVEMoKmdyZWdvcmlhbkRhdGVUaW1lKSk7CisgICAgRGF0ZUNvbnZl
cnNpb25CdWZmZXIgZGF0ZTsKKyAgICBEYXRlQ29udmVyc2lvbkJ1ZmZlciB0aW1lOworICAgIGZv
cm1hdERhdGVVVENWYXJpYW50KCpncmVnb3JpYW5EYXRlVGltZSwgZGF0ZSk7CisgICAgZm9ybWF0
VGltZVVUQygqZ3JlZ29yaWFuRGF0ZVRpbWUsIHRpbWUpOworICAgIHJldHVybiBqc05vbnRyaXZp
YWxTdHJpbmcoZXhlYywgbWFrZVN0cmluZyhkYXRlLCAiICIsIHRpbWUpKTsKIH0KIAogSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0lTT1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQpAQCAtNDY3LDcg
KzQ3NSw5IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9EYXQKICAgICBj
b25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+
Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYyk7CiAgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKICAg
ICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiSW52YWxpZCBEYXRlIik7Ci0g
ICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBmb3JtYXREYXRlKCpncmVnb3JpYW5E
YXRlVGltZSkpOworICAgIERhdGVDb252ZXJzaW9uQnVmZmVyIGRhdGU7CisgICAgZm9ybWF0RGF0
ZSgqZ3JlZ29yaWFuRGF0ZVRpbWUsIGRhdGUpOworICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJp
bmcoZXhlYywgZGF0ZSk7CiB9CiAKIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5j
VG9UaW1lU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpCkBAIC00ODAsNyArNDkwLDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1bmNUb1RpbQogICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVn
b3JpYW5EYXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZShleGVjKTsKICAg
ICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQogICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3Ry
aW5nKGV4ZWMsICJJbnZhbGlkIERhdGUiKTsKLSAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5n
KGV4ZWMsIGZvcm1hdFRpbWUoKmdyZWdvcmlhbkRhdGVUaW1lKSk7CisgICAgRGF0ZUNvbnZlcnNp
b25CdWZmZXIgdGltZTsKKyAgICBmb3JtYXRUaW1lKCpncmVnb3JpYW5EYXRlVGltZSwgdGltZSk7
CisgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCB0aW1lKTsKIH0KIAogSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCkBA
IC01NTQsNyArNTY2LDExIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9H
TVQKICAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlz
RGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWVVVEMoZXhlYyk7CiAgICAgaWYgKCFncmVnb3JpYW5E
YXRlVGltZSkKICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiSW52YWxp
ZCBEYXRlIik7Ci0gICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBmb3JtYXREYXRl
VVRDVmFyaWFudCgqZ3JlZ29yaWFuRGF0ZVRpbWUpICsgIiAiICsgZm9ybWF0VGltZVVUQygqZ3Jl
Z29yaWFuRGF0ZVRpbWUpKTsKKyAgICBEYXRlQ29udmVyc2lvbkJ1ZmZlciBkYXRlOworICAgIERh
dGVDb252ZXJzaW9uQnVmZmVyIHRpbWU7CisgICAgZm9ybWF0RGF0ZVVUQ1ZhcmlhbnQoKmdyZWdv
cmlhbkRhdGVUaW1lLCBkYXRlKTsKKyAgICBmb3JtYXRUaW1lVVRDKCpncmVnb3JpYW5EYXRlVGlt
ZSwgdGltZSk7CisgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBtYWtlU3RyaW5n
KGRhdGUsICIgIiwgdGltZSkpOwogfQogCiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY0dldE1vbnRoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJv
dG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJv
dG90eXBlLmNwcAkocmV2aXNpb24gNTIwMjYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vy
cm9yUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMjEgKzQ4LDE5IEBAIEVycm9y
UHJvdG90eXBlOjpFcnJvclByb3RvdHlwZShFeGVjU3RhdGUKIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBlcnJvclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmog
PSB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpOworICAgIEpTVmFsdWUgbmFtZSA9IHRoaXNP
YmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSk7CisgICAgSlNWYWx1ZSBt
ZXNzYWdlID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5tZXNzYWdl
KTsKIAotICAgIFVTdHJpbmcgcyA9ICJFcnJvciI7CisgICAgLy8gTW96aWxsYS1jb21wYXRpYmxl
IGZvcm1hdC4KIAotICAgIEpTVmFsdWUgdiA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubmFtZSk7Ci0gICAgaWYgKCF2LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHMg
PSB2LnRvU3RyaW5nKGV4ZWMpOwotCi0gICAgdiA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkubWVzc2FnZSk7Ci0gICAgaWYgKCF2LmlzVW5kZWZpbmVkKCkpIHsKLSAg
ICAgICAgLy8gTW96aWxsYS1jb21wYXRpYmxlIGZvcm1hdC4KLSAgICAgICAgcyArPSAiOiAiOwot
ICAgICAgICBzICs9IHYudG9TdHJpbmcoZXhlYyk7CisgICAgaWYgKCFuYW1lLmlzVW5kZWZpbmVk
KCkpIHsKKyAgICAgICAgaWYgKCFtZXNzYWdlLmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICBy
ZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIG1ha2VTdHJpbmcobmFtZS50b1N0cmluZyhl
eGVjKSwgIjogIiwgbWVzc2FnZS50b1N0cmluZyhleGVjKSkpOworICAgICAgICByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKGV4ZWMsIG5hbWUudG9TdHJpbmcoZXhlYykpOwogICAgIH0KLQotICAg
IHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgcyk7CisgICAgaWYgKCFtZXNzYWdlLmlz
VW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgbWFr
ZVN0cmluZygiRXJyb3I6ICIsIG1lc3NhZ2UudG9TdHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4g
anNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJFcnJvciIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAko
cmV2aXNpb24gNTIwMjYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBl
cnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw5ICs3Nyw3IEBAIEpTVmFsdWUgY3JlYXRlVW5k
ZWZpbmVkVmFyaWFibGVFcnJvcihFeGUKICAgICBpbnQgZW5kT2Zmc2V0ID0gMDsKICAgICBpbnQg
ZGl2b3RQb2ludCA9IDA7CiAgICAgaW50IGxpbmUgPSBjb2RlQmxvY2stPmV4cHJlc3Npb25SYW5n
ZUZvckJ5dGVjb2RlT2Zmc2V0KGV4ZWMsIGJ5dGVjb2RlT2Zmc2V0LCBkaXZvdFBvaW50LCBzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0KTsKLSAgICBVU3RyaW5nIG1lc3NhZ2UgPSAiQ2FuJ3QgZmluZCB2
YXJpYWJsZTogIjsKLSAgICBtZXNzYWdlLmFwcGVuZChpZGVudC51c3RyaW5nKCkpOwotICAgIEpT
T2JqZWN0KiBleGNlcHRpb24gPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFJlZmVyZW5jZUVycm9yLCBt
ZXNzYWdlLCBsaW5lLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5zb3VyY2VJRCgpLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5zb3VyY2VVUkwoKSk7CisgICAgSlNPYmplY3Qq
IGV4Y2VwdGlvbiA9IEVycm9yOjpjcmVhdGUoZXhlYywgUmVmZXJlbmNlRXJyb3IsIG1ha2VTdHJp
bmcoIkNhbid0IGZpbmQgdmFyaWFibGU6ICIsIGlkZW50LnVzdHJpbmcoKSksIGxpbmUsIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZUlEKCksIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCktPnNvdXJjZVVSTCgpKTsKICAgICBleGNlcHRpb24tPnB1dFdpdGhBdHRyaWJ1dGVz
KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhwcmVzc2lvbkJlZ2luT2Zmc2V0UHJvcGVydHlOYW1l
KSwganNOdW1iZXIoZXhlYywgZGl2b3RQb2ludCAtIHN0YXJ0T2Zmc2V0KSwgUmVhZE9ubHkgfCBE
b250RGVsZXRlKTsKICAgICBleGNlcHRpb24tPnB1dFdpdGhBdHRyaWJ1dGVzKGV4ZWMsIElkZW50
aWZpZXIoZXhlYywgZXhwcmVzc2lvbkNhcmV0T2Zmc2V0UHJvcGVydHlOYW1lKSwganNOdW1iZXIo
ZXhlYywgZGl2b3RQb2ludCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAgICAgZXhjZXB0aW9u
LT5wdXRXaXRoQXR0cmlidXRlcyhleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4cHJlc3Npb25FbmRP
ZmZzZXRQcm9wZXJ0eU5hbWUpLCBqc051bWJlcihleGVjLCBkaXZvdFBvaW50ICsgZW5kT2Zmc2V0
KSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKQEAgLTg4LDU5ICs4NiwzNiBAQCBKU1ZhbHVlIGNy
ZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoRXhlCiAgICAgCiBzdGF0aWMgVVN0cmluZyBjcmVh
dGVFcnJvck1lc3NhZ2UoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgaW50
LCBpbnQgZXhwcmVzc2lvblN0YXJ0LCBpbnQgZXhwcmVzc2lvblN0b3AsIEpTVmFsdWUgdmFsdWUs
IFVTdHJpbmcgZXJyb3IpCiB7Ci0gICAgaWYgKCFleHByZXNzaW9uU3RvcCB8fCBleHByZXNzaW9u
U3RhcnQgPiBjb2RlQmxvY2stPnNvdXJjZSgpLT5sZW5ndGgoKSkgewotICAgICAgICBVU3RyaW5n
IGVycm9yVGV4dCA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOwotICAgICAgICBlcnJvclRleHQuYXBw
ZW5kKCIgaXMgIik7Ci0gICAgICAgIGVycm9yVGV4dC5hcHBlbmQoZXJyb3IpOwotICAgICAgICBy
ZXR1cm4gZXJyb3JUZXh0OwotICAgIH0KKyAgICBpZiAoIWV4cHJlc3Npb25TdG9wIHx8IGV4cHJl
c3Npb25TdGFydCA+IGNvZGVCbG9jay0+c291cmNlKCktPmxlbmd0aCgpKQorICAgICAgICByZXR1
cm4gbWFrZVN0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSwgIiBpcyAiLCBlcnJvcik7CisgICAg
aWYgKGV4cHJlc3Npb25TdGFydCA8IGV4cHJlc3Npb25TdG9wKQorICAgICAgICByZXR1cm4gbWFr
ZVN0cmluZygiUmVzdWx0IG9mIGV4cHJlc3Npb24gJyIsIGNvZGVCbG9jay0+c291cmNlKCktPmdl
dFJhbmdlKGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvblN0b3ApLCAiJyBbIiwgdmFsdWUudG9T
dHJpbmcoZXhlYyksICJdIGlzICIsIGVycm9yLCAiLiIpOwogCi0gICAgVVN0cmluZyBlcnJvclRl
eHQgPSAiUmVzdWx0IG9mIGV4cHJlc3Npb24gIjsKLSAgICAKLSAgICBpZiAoZXhwcmVzc2lvblN0
YXJ0IDwgZXhwcmVzc2lvblN0b3ApIHsKLSAgICAgICAgZXJyb3JUZXh0LmFwcGVuZCgnXCcnKTsK
LSAgICAgICAgZXJyb3JUZXh0LmFwcGVuZChjb2RlQmxvY2stPnNvdXJjZSgpLT5nZXRSYW5nZShl
eHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25TdG9wKSk7Ci0gICAgICAgIGVycm9yVGV4dC5hcHBl
bmQoIicgWyIpOwotICAgICAgICBlcnJvclRleHQuYXBwZW5kKHZhbHVlLnRvU3RyaW5nKGV4ZWMp
KTsKLSAgICAgICAgZXJyb3JUZXh0LmFwcGVuZCgiXSBpcyAiKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICAvLyBObyByYW5nZSBpbmZvcm1hdGlvbiwgc28gZ2l2ZSBhIGZldyBjaGFyYWN0ZXJzIG9m
IGNvbnRleHQKLSAgICAgICAgY29uc3QgVUNoYXIqIGRhdGEgPSBjb2RlQmxvY2stPnNvdXJjZSgp
LT5kYXRhKCk7Ci0gICAgICAgIGludCBkYXRhTGVuZ3RoID0gY29kZUJsb2NrLT5zb3VyY2UoKS0+
bGVuZ3RoKCk7Ci0gICAgICAgIGludCBzdGFydCA9IGV4cHJlc3Npb25TdGFydDsKLSAgICAgICAg
aW50IHN0b3AgPSBleHByZXNzaW9uU3RhcnQ7Ci0gICAgICAgIC8vIEdldCB1cCB0byAyMCBjaGFy
YWN0ZXJzIG9mIGNvbnRleHQgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0IG9mIHRoZSBkaXZvdCwgY2xh
bXBpbmcgdG8gdGhlIGxpbmUuCi0gICAgICAgIC8vIHRoZW4gc3RyaXAgd2hpdGVzcGFjZS4KLSAg
ICAgICAgd2hpbGUgKHN0YXJ0ID4gMCAmJiAoZXhwcmVzc2lvblN0YXJ0IC0gc3RhcnQgPCAyMCkg
JiYgZGF0YVtzdGFydCAtIDFdICE9ICdcbicpCi0gICAgICAgICAgICBzdGFydC0tOwotICAgICAg
ICB3aGlsZSAoc3RhcnQgPCAoZXhwcmVzc2lvblN0YXJ0IC0gMSkgJiYgaXNTdHJXaGl0ZVNwYWNl
KGRhdGFbc3RhcnRdKSkKLSAgICAgICAgICAgIHN0YXJ0Kys7Ci0gICAgICAgIHdoaWxlIChzdG9w
IDwgZGF0YUxlbmd0aCAmJiAoc3RvcCAtIGV4cHJlc3Npb25TdGFydCA8IDIwKSAmJiBkYXRhW3N0
b3BdICE9ICdcbicpCi0gICAgICAgICAgICBzdG9wKys7Ci0gICAgICAgIHdoaWxlIChzdG9wID4g
ZXhwcmVzc2lvblN0YXJ0ICYmIGlzU3RyV2hpdGVTcGFjZShkYXRhW3N0b3BdKSkKLSAgICAgICAg
ICAgIHN0b3AtLTsKLSAgICAgICAgZXJyb3JUZXh0LmFwcGVuZCgibmVhciAnLi4uIik7Ci0gICAg
ICAgIGVycm9yVGV4dC5hcHBlbmQoY29kZUJsb2NrLT5zb3VyY2UoKS0+Z2V0UmFuZ2Uoc3RhcnQs
IHN0b3ApKTsKLSAgICAgICAgZXJyb3JUZXh0LmFwcGVuZCgiLi4uJyBbIik7Ci0gICAgICAgIGVy
cm9yVGV4dC5hcHBlbmQodmFsdWUudG9TdHJpbmcoZXhlYykpOwotICAgICAgICBlcnJvclRleHQu
YXBwZW5kKCJdIGlzICIpOwotICAgIH0KLSAgICBlcnJvclRleHQuYXBwZW5kKGVycm9yKTsKLSAg
ICBlcnJvclRleHQuYXBwZW5kKCIuIik7Ci0gICAgcmV0dXJuIGVycm9yVGV4dDsKKyAgICAvLyBO
byByYW5nZSBpbmZvcm1hdGlvbiwgc28gZ2l2ZSBhIGZldyBjaGFyYWN0ZXJzIG9mIGNvbnRleHQK
KyAgICBjb25zdCBVQ2hhciogZGF0YSA9IGNvZGVCbG9jay0+c291cmNlKCktPmRhdGEoKTsKKyAg
ICBpbnQgZGF0YUxlbmd0aCA9IGNvZGVCbG9jay0+c291cmNlKCktPmxlbmd0aCgpOworICAgIGlu
dCBzdGFydCA9IGV4cHJlc3Npb25TdGFydDsKKyAgICBpbnQgc3RvcCA9IGV4cHJlc3Npb25TdGFy
dDsKKyAgICAvLyBHZXQgdXAgdG8gMjAgY2hhcmFjdGVycyBvZiBjb250ZXh0IHRvIHRoZSBsZWZ0
IGFuZCByaWdodCBvZiB0aGUgZGl2b3QsIGNsYW1waW5nIHRvIHRoZSBsaW5lLgorICAgIC8vIHRo
ZW4gc3RyaXAgd2hpdGVzcGFjZS4KKyAgICB3aGlsZSAoc3RhcnQgPiAwICYmIChleHByZXNzaW9u
U3RhcnQgLSBzdGFydCA8IDIwKSAmJiBkYXRhW3N0YXJ0IC0gMV0gIT0gJ1xuJykKKyAgICAgICAg
c3RhcnQtLTsKKyAgICB3aGlsZSAoc3RhcnQgPCAoZXhwcmVzc2lvblN0YXJ0IC0gMSkgJiYgaXNT
dHJXaGl0ZVNwYWNlKGRhdGFbc3RhcnRdKSkKKyAgICAgICAgc3RhcnQrKzsKKyAgICB3aGlsZSAo
c3RvcCA8IGRhdGFMZW5ndGggJiYgKHN0b3AgLSBleHByZXNzaW9uU3RhcnQgPCAyMCkgJiYgZGF0
YVtzdG9wXSAhPSAnXG4nKQorICAgICAgICBzdG9wKys7CisgICAgd2hpbGUgKHN0b3AgPiBleHBy
ZXNzaW9uU3RhcnQgJiYgaXNTdHJXaGl0ZVNwYWNlKGRhdGFbc3RvcF0pKQorICAgICAgICBzdG9w
LS07CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlJlc3VsdCBvZiBleHByZXNzaW9uIG5lYXIgJy4u
LiIsIGNvZGVCbG9jay0+c291cmNlKCktPmdldFJhbmdlKHN0YXJ0LCBzdG9wKSwgIi4uLicgWyIs
IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLCAiXSBpcyAiLCBlcnJvciwgIi4iKTsKIH0KIAogSlNPYmpl
Y3QqIGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgY2hhciog
b3AsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKIHsKLSAgICBVU3RyaW5nIG1lc3NhZ2UgPSAibm90IGEgdmFsaWQgYXJndW1lbnQg
Zm9yICciOwotICAgIG1lc3NhZ2UuYXBwZW5kKG9wKTsKLSAgICBtZXNzYWdlLmFwcGVuZCgiJyIp
OwotICAgIAogICAgIGludCBzdGFydE9mZnNldCA9IDA7CiAgICAgaW50IGVuZE9mZnNldCA9IDA7
CiAgICAgaW50IGRpdm90UG9pbnQgPSAwOwogICAgIGludCBsaW5lID0gY29kZUJsb2NrLT5leHBy
ZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChleGVjLCBieXRlY29kZU9mZnNldCwgZGl2b3RQ
b2ludCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Ci0gICAgVVN0cmluZyBlcnJvck1lc3NhZ2Ug
PSBjcmVhdGVFcnJvck1lc3NhZ2UoZXhlYywgY29kZUJsb2NrLCBsaW5lLCBkaXZvdFBvaW50LCBk
aXZvdFBvaW50ICsgZW5kT2Zmc2V0LCB2YWx1ZSwgbWVzc2FnZSk7CisgICAgVVN0cmluZyBlcnJv
ck1lc3NhZ2UgPSBjcmVhdGVFcnJvck1lc3NhZ2UoZXhlYywgY29kZUJsb2NrLCBsaW5lLCBkaXZv
dFBvaW50LCBkaXZvdFBvaW50ICsgZW5kT2Zmc2V0LCB2YWx1ZSwgbWFrZVN0cmluZygibm90IGEg
dmFsaWQgYXJndW1lbnQgZm9yICciLCBvcCwgIiciKSk7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlv
biA9IEVycm9yOjpjcmVhdGUoZXhlYywgVHlwZUVycm9yLCBlcnJvck1lc3NhZ2UsIGxpbmUsIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZUlEKCksIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCktPnNvdXJjZVVSTCgpKTsKICAgICBleGNlcHRpb24tPnB1dFdpdGhBdHRyaWJ1
dGVzKGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhwcmVzc2lvbkJlZ2luT2Zmc2V0UHJvcGVydHlO
YW1lKSwganNOdW1iZXIoZXhlYywgZGl2b3RQb2ludCAtIHN0YXJ0T2Zmc2V0KSwgUmVhZE9ubHkg
fCBEb250RGVsZXRlKTsKICAgICBleGNlcHRpb24tPnB1dFdpdGhBdHRyaWJ1dGVzKGV4ZWMsIElk
ZW50aWZpZXIoZXhlYywgZXhwcmVzc2lvbkNhcmV0T2Zmc2V0UHJvcGVydHlOYW1lKSwganNOdW1i
ZXIoZXhlYywgZGl2b3RQb2ludCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkocmV2aXNpb24gNTIw
MjYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW5zZXJ0U2Vt
aWNvbG9uSWZOZWVkCiAgICAgICAgIFVDaGFyIGNoID0gZnVuY3Rpb25Cb2R5W2ldOwogICAgICAg
ICBpZiAoIUxleGVyOjppc1doaXRlU3BhY2UoY2gpICYmICFMZXhlcjo6aXNMaW5lVGVybWluYXRv
cihjaCkpIHsKICAgICAgICAgICAgIGlmIChjaCAhPSAnOycgJiYgY2ggIT0gJ30nKQotICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uQm9keSA9IGZ1bmN0aW9uQm9keS5zdWJzdHIoMCwgaSArIDEpICsg
IjsiICsgZnVuY3Rpb25Cb2R5LnN1YnN0cihpICsgMSwgZnVuY3Rpb25Cb2R5LnNpemUoKSAtIChp
ICsgMSkpOworICAgICAgICAgICAgICAgIGZ1bmN0aW9uQm9keSA9IG1ha2VTdHJpbmcoZnVuY3Rp
b25Cb2R5LnN1YnN0cigwLCBpICsgMSksICI7IiwgZnVuY3Rpb25Cb2R5LnN1YnN0cihpICsgMSwg
ZnVuY3Rpb25Cb2R5LnNpemUoKSAtIChpICsgMSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgIH0KQEAgLTkwLDEzICs5MCwxMyBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25Qcm90b0Z1bmNUCiAgICAgICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUgPSBmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCk7CiAgICAgICAgICAgICBVU3RyaW5nIHNv
dXJjZVN0cmluZyA9IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnRvU3RyaW5nKCk7CiAgICAgICAgICAg
ICBpbnNlcnRTZW1pY29sb25JZk5lZWRlZChzb3VyY2VTdHJpbmcpOwotICAgICAgICAgICAgcmV0
dXJuIGpzU3RyaW5nKGV4ZWMsICJmdW5jdGlvbiAiICsgZnVuY3Rpb24tPm5hbWUoZXhlYykgKyAi
KCIgKyBleGVjdXRhYmxlLT5wYXJhbVN0cmluZygpICsgIikgIiArIHNvdXJjZVN0cmluZyk7Cisg
ICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgbWFrZVN0cmluZygiZnVuY3Rpb24gIiwg
ZnVuY3Rpb24tPm5hbWUoZXhlYyksICIoIiwgZXhlY3V0YWJsZS0+cGFyYW1TdHJpbmcoKSwgIikg
Iiwgc291cmNlU3RyaW5nKSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAodGhpc1ZhbHVl
LmluaGVyaXRzKCZJbnRlcm5hbEZ1bmN0aW9uOjppbmZvKSkgewogICAgICAgICBJbnRlcm5hbEZ1
bmN0aW9uKiBmdW5jdGlvbiA9IGFzSW50ZXJuYWxGdW5jdGlvbih0aGlzVmFsdWUpOwotICAgICAg
ICByZXR1cm4ganNTdHJpbmcoZXhlYywgImZ1bmN0aW9uICIgKyBmdW5jdGlvbi0+bmFtZShleGVj
KSArICIoKSB7XG4gICAgW25hdGl2ZSBjb2RlXVxufSIpOworICAgICAgICByZXR1cm4ganNTdHJp
bmcoZXhlYywgbWFrZVN0cmluZygiZnVuY3Rpb24gIiwgZnVuY3Rpb24tPm5hbWUoZXhlYyksICIo
KSB7XG4gICAgW25hdGl2ZSBjb2RlXVxufSIpKTsKICAgICB9CiAKICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBUeXBlRXJyb3IpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmpl
Y3RQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gNTIwMjYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09iamVjdFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw3ICsxNDgsNyBA
QCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9MCiAKIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewotICAgIHJldHVybiBq
c05vbnRyaXZpYWxTdHJpbmcoZXhlYywgIltvYmplY3QgIiArIHRoaXNWYWx1ZS50b1RoaXNPYmpl
Y3QoZXhlYyktPmNsYXNzTmFtZSgpICsgIl0iKTsKKyAgICByZXR1cm4ganNOb250cml2aWFsU3Ry
aW5nKGV4ZWMsIG1ha2VTdHJpbmcoIltvYmplY3QgIiwgdGhpc1ZhbHVlLnRvVGhpc09iamVjdChl
eGVjKS0+Y2xhc3NOYW1lKCksICJdIikpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCShyZXZpc2lv
biA1MjAyNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDIsNyArMzAyLDcgQEAgSlNPYmplY3QqIGNvbnN0cnVjdFJl
Z0V4cChFeGVjU3RhdGUqIGV4ZQogCiAgICAgUmVmUHRyPFJlZ0V4cD4gcmVnRXhwID0gUmVnRXhw
OjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwgcGF0dGVybiwgZmxhZ3MpOwogICAgIGlmICgh
cmVnRXhwLT5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRh
eEVycm9yLCBVU3RyaW5nKCJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogIikuYXBwZW5kKHJl
Z0V4cC0+ZXJyb3JNZXNzYWdlKCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
U3ludGF4RXJyb3IsIG1ha2VTdHJpbmcoIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiAiLCBy
ZWdFeHAtPmVycm9yTWVzc2FnZSgpKSk7CiAgICAgcmV0dXJuIG5ldyAoZXhlYykgUmVnRXhwT2Jq
ZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4
cC5yZWxlYXNlKCkpOwogfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmpl
Y3QuY3BwCShyZXZpc2lvbiA1MjAyNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDcgKzE0Miw3IEBAIGJvb2wgUmVnRXhw
T2JqZWN0OjptYXRjaChFeGVjU3RhdGUqIGV4ZWMKIAogICAgIFVTdHJpbmcgaW5wdXQgPSBhcmdz
LmlzRW1wdHkoKSA/IHJlZ0V4cENvbnN0cnVjdG9yLT5pbnB1dCgpIDogYXJncy5hdCgwKS50b1N0
cmluZyhleGVjKTsKICAgICBpZiAoaW5wdXQuaXNOdWxsKCkpIHsKLSAgICAgICAgdGhyb3dFcnJv
cihleGVjLCBHZW5lcmFsRXJyb3IsICJObyBpbnB1dCB0byAiICsgdG9TdHJpbmcoZXhlYykgKyAi
LiIpOworICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJvciwgbWFrZVN0cmluZygi
Tm8gaW5wdXQgdG8gIiwgdG9TdHJpbmcoZXhlYyksICIuIikpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5
cGUuY3BwCShyZXZpc2lvbiA1MjAyNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jQ29tCiAgICAgfQogCiAgICAgaWYgKCFyZWdFeHAt
PmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3Is
IFVTdHJpbmcoIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiAiKS5hcHBlbmQocmVnRXhwLT5l
cnJvck1lc3NhZ2UoKSkpOworICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhF
cnJvciwgbWFrZVN0cmluZygiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246ICIsIHJlZ0V4cC0+
ZXJyb3JNZXNzYWdlKCkpKTsKIAogICAgIGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPnNldFJl
Z0V4cChyZWdFeHAucmVsZWFzZSgpKTsKICAgICBhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5z
ZXRMYXN0SW5kZXgoMCk7CkBAIC0xMDYsMTUgKzEwNiwxNiBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcmVnRXhwUHJvdG9GdW5jVG9TCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvcik7CiAgICAgfQogCi0gICAgVVN0cmluZyByZXN1bHQgPSAiLyIgKyBhc1JlZ0V4cE9i
amVjdCh0aGlzVmFsdWUpLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNvdXJjZSku
dG9TdHJpbmcoZXhlYyk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnLycpOworICAgIGNoYXIgcG9zdGZp
eFs1XSA9IHsgJy8nLCAwLCAwLCAwLCAwIH07CisgICAgaW50IGluZGV4ID0gMTsKICAgICBpZiAo
YXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5nbG9iYWwpLnRvQm9vbGVhbihleGVjKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgnZycpOwor
ICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ2cnOwogICAgIGlmIChhc1JlZ0V4cE9iamVjdCh0
aGlzVmFsdWUpLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmlnbm9yZUNhc2UpLnRv
Qm9vbGVhbihleGVjKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgnaScpOworICAgICAgICBwb3N0
Zml4W2luZGV4KytdID0gJ2knOwogICAgIGlmIChhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm11bHRpbGluZSkudG9Cb29sZWFuKGV4ZWMp
KQotICAgICAgICByZXN1bHQuYXBwZW5kKCdtJyk7Ci0gICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0
cmluZyhleGVjLCByZXN1bHQpOworICAgICAgICBwb3N0Zml4W2luZGV4XSA9ICdtJzsKKyAgICAK
KyAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIG1ha2VTdHJpbmcoIi8iLCBhc1Jl
Z0V4cE9iamVjdCh0aGlzVmFsdWUpLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNv
dXJjZSkudG9TdHJpbmcoZXhlYyksIHBvc3RmaXgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZp
c2lvbiA1MjAyNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzc1LDYyICs3NzUsNjIgQEAgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvRnVuY0xvYwogSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
RnVuY0JpZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1RoaXNTdHJpbmco
ZXhlYyk7Ci0gICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGJpZz4iICsgcyAr
ICI8L2JpZz4iKTsKKyAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIG1ha2VTdHJp
bmcoIjxiaWc+IiwgcywgIjwvYmlnPiIpKTsKIH0KIAogSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY1NtYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRv
VGhpc1N0cmluZyhleGVjKTsKLSAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8
c21hbGw+IiArIHMgKyAiPC9zbWFsbD4iKTsKKyAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5n
KGV4ZWMsIG1ha2VTdHJpbmcoIjxzbWFsbD4iLCBzLCAiPC9zbWFsbD4iKSk7CiB9CiAKIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNCbGluayhFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIFVTdHJp
bmcgcyA9IHRoaXNWYWx1ZS50b1RoaXNTdHJpbmcoZXhlYyk7Ci0gICAgcmV0dXJuIGpzTm9udHJp
dmlhbFN0cmluZyhleGVjLCAiPGJsaW5rPiIgKyBzICsgIjwvYmxpbms+Iik7CisgICAgcmV0dXJu
IGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBtYWtlU3RyaW5nKCI8Ymxpbms+IiwgcywgIjwvYmxp
bms+IikpOwogfQogCiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQm9sZChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1RoaXNTdHJpbmcoZXhlYyk7Ci0g
ICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGI+IiArIHMgKyAiPC9iPiIpOwor
ICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgbWFrZVN0cmluZygiPGI+Iiwgcywg
IjwvYj4iKSk7CiB9CiAKIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNGaXhl
ZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1RoaXNTdHJpbmcoZXhlYyk7
Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICI8dHQ+IiArIHMgKyAiPC90dD4iKTsKKyAgICBy
ZXR1cm4ganNTdHJpbmcoZXhlYywgbWFrZVN0cmluZygiPHR0PiIsIHMsICI8L3R0PiIpKTsKIH0K
IAogSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0l0YWxpY3MoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsK
ICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9UaGlzU3RyaW5nKGV4ZWMpOwotICAgIHJldHVy
biBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxpPiIgKyBzICsgIjwvaT4iKTsKKyAgICByZXR1
cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIG1ha2VTdHJpbmcoIjxpPiIsIHMsICI8L2k+Iikp
OwogfQogCiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3RyaWtlKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYp
CiB7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvVGhpc1N0cmluZyhleGVjKTsKLSAgICBy
ZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8c3RyaWtlPiIgKyBzICsgIjwvc3RyaWtl
PiIpOworICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgbWFrZVN0cmluZygiPHN0
cmlrZT4iLCBzLCAiPC9zdHJpa2U+IikpOwogfQogCiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jU3ViKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvVGhp
c1N0cmluZyhleGVjKTsKLSAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8c3Vi
PiIgKyBzICsgIjwvc3ViPiIpOworICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywg
bWFrZVN0cmluZygiPHN1Yj4iLCBzLCAiPC9zdWI+IikpOwogfQogCiBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jU3VwKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgVVN0cmluZyBzID0gdGhpc1Zh
bHVlLnRvVGhpc1N0cmluZyhleGVjKTsKLSAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4
ZWMsICI8c3VwPiIgKyBzICsgIjwvc3VwPiIpOworICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJp
bmcoZXhlYywgbWFrZVN0cmluZygiPHN1cD4iLCBzLCAiPC9zdXA+IikpOwogfQogCiBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRm9udGNvbG9yKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9UaGlzU3RyaW5nKGV4ZWMpOwogICAgIEpTVmFsdWUg
YTAgPSBhcmdzLmF0KDApOwotICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxm
b250IGNvbG9yPVwiIiArIGEwLnRvU3RyaW5nKGV4ZWMpICsgIlwiPiIgKyBzICsgIjwvZm9udD4i
KTsKKyAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIG1ha2VTdHJpbmcoIjxmb250
IGNvbG9yPVwiIiwgYTAudG9TdHJpbmcoZXhlYyksICJcIj4iLCBzLCAiPC9mb250PiIpKTsKIH0K
IAogSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKQEAgLTg3MSwxNCArODcxLDE0IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
b0Z1bmNGb24KICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBVU3RyaW5n
KGJ1ZmZlciwgYnVmZmVyU2l6ZSwgZmFsc2UpKTsKICAgICB9CiAKLSAgICByZXR1cm4ganNOb250
cml2aWFsU3RyaW5nKGV4ZWMsICI8Zm9udCBzaXplPVwiIiArIGEwLnRvU3RyaW5nKGV4ZWMpICsg
IlwiPiIgKyBzICsgIjwvZm9udD4iKTsKKyAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4
ZWMsIG1ha2VTdHJpbmcoIjxmb250IHNpemU9XCIiLCBhMC50b1N0cmluZyhleGVjKSwgIlwiPiIs
IHMsICI8L2ZvbnQ+IikpOwogfQogCiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9G
dW5jQW5jaG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9UaGlz
U3RyaW5nKGV4ZWMpOwogICAgIEpTVmFsdWUgYTAgPSBhcmdzLmF0KDApOwotICAgIHJldHVybiBq
c05vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxhIG5hbWU9XCIiICsgYTAudG9TdHJpbmcoZXhlYykg
KyAiXCI+IiArIHMgKyAiPC9hPiIpOworICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhl
YywgbWFrZVN0cmluZygiPGEgbmFtZT1cIiIsIGEwLnRvU3RyaW5nKGV4ZWMpLCAiXCI+Iiwgcywg
IjwvYT4iKSk7CiB9CiAKIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNMaW5r
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYgYXJncykKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCShyZXZpc2lvbiA1MjAy
NikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MzcsNiArNTM3LDI3NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAgdm9pZCBp
bml0aWFsaXplVVN0cmluZygpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZT4K
KyAgICBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlciB7CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4K
KyAgICBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxjaGFyKj4KKyAgICB7CisgICAgcHVibGljOgor
ICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxjaGFyKj4oY2hhciogYnVmZmVyKQorICAgICAgICAg
ICAgOiBtX2J1ZmZlcigodW5zaWduZWQgY2hhciopYnVmZmVyKQorICAgICAgICAgICAgLCBtX2xl
bmd0aChzdHJsZW4oYnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdW5z
aWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gbV9sZW5ndGg7IH0KKworICAgICAgICB2b2lkIHdyaXRl
VG8oVUNoYXIqIGRlc3RpbmF0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlv
bltpXSA9IG1fYnVmZmVyW2ldOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBj
b25zdCB1bnNpZ25lZCBjaGFyKiBtX2J1ZmZlcjsKKyAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7
CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxj
b25zdCBjaGFyKj4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgICBTdHJpbmdUeXBlQWRhcHRl
cjxjb25zdCBjaGFyKj4oY29uc3QgY2hhciogYnVmZmVyKQorICAgICAgICAgICAgOiBtX2J1ZmZl
cigodW5zaWduZWQgY2hhciopYnVmZmVyKQorICAgICAgICAgICAgLCBtX2xlbmd0aChzdHJsZW4o
YnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
KCkgeyByZXR1cm4gbV9sZW5ndGg7IH0KKworICAgICAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRl
c3RpbmF0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9sZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbltpXSA9IG1fYnVm
ZmVyW2ldOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBtX2J1ZmZlcjsKKyAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7CisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPD4KKyAgICBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxVU3RyaW5nPgorICAg
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyPFVTdHJpbmc+KFVTdHJp
bmcmIHN0cmluZykKKyAgICAgICAgICAgIDogbV9kYXRhKHN0cmluZy5kYXRhKCkpCisgICAgICAg
ICAgICAsIG1fbGVuZ3RoKHN0cmluZy5zaXplKCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisKKyAgICAgICAg
dm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAg
ZGVzdGluYXRpb25baV0gPSBtX2RhdGFbaV07CisgICAgICAgIH0KKworICAgIHByaXZhdGU6Cisg
ICAgICAgIGNvbnN0IFVDaGFyKiBtX2RhdGE7CisgICAgICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3Ry
aW5nVHlwZTI+CisgICAgVVN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0
cmluZ1R5cGUyIHN0cmluZzIpCisgICAgeworICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJp
bmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5nMSk7CisgICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0
cmluZ1R5cGUyPiBhZGFwdGVyMihzdHJpbmcyKTsKKworICAgICAgICBVQ2hhciogYnVmZmVyOwor
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhZGFwdGVyMS5sZW5ndGgoKSArIGFkYXB0ZXIyLmxl
bmd0aCgpOworICAgICAgICBpZiAoIXRyeUZhc3RNYWxsb2MobGVuZ3RoICogc2l6ZW9mKFVDaGFy
KSkuZ2V0VmFsdWUoYnVmZmVyKSkKKyAgICAgICAgICAgIHJldHVybiBVU3RyaW5nKCk7CisKKyAg
ICAgICAgVUNoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKKyAgICAgICAgYWRhcHRlcjEud3JpdGVUbyhy
ZXN1bHQpOworICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7CisgICAgICAgIGFk
YXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKKworICAgICAgICByZXR1cm4gVVN0cmluZyhidWZmZXIs
IGxlbmd0aCwgZmFsc2UpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5
cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTM+CisgICAgVVN0
cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIs
IFN0cmluZ1R5cGUzIHN0cmluZzMpCisgICAgeworICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxT
dHJpbmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5nMSk7CisgICAgICAgIFN0cmluZ1R5cGVBZGFwdGVy
PFN0cmluZ1R5cGUyPiBhZGFwdGVyMihzdHJpbmcyKTsKKyAgICAgICAgU3RyaW5nVHlwZUFkYXB0
ZXI8U3RyaW5nVHlwZTM+IGFkYXB0ZXIzKHN0cmluZzMpOworCisgICAgICAgIFVDaGFyKiBidWZm
ZXI7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIxLmxlbmd0aCgpICsgYWRhcHRl
cjIubGVuZ3RoKCkgKyBhZGFwdGVyMy5sZW5ndGgoKTsKKyAgICAgICAgaWYgKCF0cnlGYXN0TWFs
bG9jKGxlbmd0aCAqIHNpemVvZihVQ2hhcikpLmdldFZhbHVlKGJ1ZmZlcikpCisgICAgICAgICAg
ICByZXR1cm4gVVN0cmluZygpOworCisgICAgICAgIFVDaGFyKiByZXN1bHQgPSBidWZmZXI7Cisg
ICAgICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKKyAgICAgICAgcmVzdWx0ICs9IGFkYXB0
ZXIxLmxlbmd0aCgpOworICAgICAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7CisgICAgICAg
IHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKKyAgICAgICAgYWRhcHRlcjMud3JpdGVUbyhy
ZXN1bHQpOworCisgICAgICAgIHJldHVybiBVU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoLCBmYWxzZSk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0
cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQ+Cisg
ICAgVVN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0
cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQpCisgICAgewor
ICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5nMSk7
CisgICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFwdGVyMihzdHJpbmcy
KTsKKyAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTM+IGFkYXB0ZXIzKHN0cmlu
ZzMpOworICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlND4gYWRhcHRlcjQoc3Ry
aW5nNCk7CisKKyAgICAgICAgVUNoYXIqIGJ1ZmZlcjsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gYWRhcHRlcjEubGVuZ3RoKCkgKyBhZGFwdGVyMi5sZW5ndGgoKSArIGFkYXB0ZXIzLmxlbmd0
aCgpICsgYWRhcHRlcjQubGVuZ3RoKCk7CisgICAgICAgIGlmICghdHJ5RmFzdE1hbGxvYyhsZW5n
dGggKiBzaXplb2YoVUNoYXIpKS5nZXRWYWx1ZShidWZmZXIpKQorICAgICAgICAgICAgcmV0dXJu
IFVTdHJpbmcoKTsKKworICAgICAgICBVQ2hhciogcmVzdWx0ID0gYnVmZmVyOworICAgICAgICBh
ZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7CisgICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5n
dGgoKTsKKyAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOworICAgICAgICByZXN1bHQg
Kz0gYWRhcHRlcjIubGVuZ3RoKCk7CisgICAgICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsK
KyAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOworICAgICAgICBhZGFwdGVyNC53
cml0ZVRvKHJlc3VsdCk7CisKKyAgICAgICAgcmV0dXJuIFVTdHJpbmcoYnVmZmVyLCBsZW5ndGgs
IGZhbHNlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlw
ZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdU
eXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTU+CisgICAgVVN0cmluZyBtYWtlU3RyaW5nKFN0cmlu
Z1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMs
IFN0cmluZ1R5cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUpCisgICAgeworICAgICAg
ICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5nMSk7CisgICAg
ICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFwdGVyMihzdHJpbmcyKTsKKyAg
ICAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTM+IGFkYXB0ZXIzKHN0cmluZzMpOwor
ICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlND4gYWRhcHRlcjQoc3RyaW5nNCk7
CisgICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU1PiBhZGFwdGVyNShzdHJpbmc1
KTsKKworICAgICAgICBVQ2hhciogYnVmZmVyOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBh
ZGFwdGVyMS5sZW5ndGgoKSArIGFkYXB0ZXIyLmxlbmd0aCgpICsgYWRhcHRlcjMubGVuZ3RoKCkg
KyBhZGFwdGVyNC5sZW5ndGgoKSArIGFkYXB0ZXI1Lmxlbmd0aCgpOworICAgICAgICBpZiAoIXRy
eUZhc3RNYWxsb2MobGVuZ3RoICogc2l6ZW9mKFVDaGFyKSkuZ2V0VmFsdWUoYnVmZmVyKSkKKyAg
ICAgICAgICAgIHJldHVybiBVU3RyaW5nKCk7CisKKyAgICAgICAgVUNoYXIqIHJlc3VsdCA9IGJ1
ZmZlcjsKKyAgICAgICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOworICAgICAgICByZXN1bHQg
Kz0gYWRhcHRlcjEubGVuZ3RoKCk7CisgICAgICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsK
KyAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOworICAgICAgICBhZGFwdGVyMy53
cml0ZVRvKHJlc3VsdCk7CisgICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKKyAg
ICAgICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOworICAgICAgICByZXN1bHQgKz0gYWRhcHRl
cjQubGVuZ3RoKCk7CisgICAgICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKKworICAgICAg
ICByZXR1cm4gVVN0cmluZyhidWZmZXIsIGxlbmd0aCwgZmFsc2UpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5h
bWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0LCB0eXBlbmFtZSBTdHJpbmdUeXBl
NSwgdHlwZW5hbWUgU3RyaW5nVHlwZTY+CisgICAgVVN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5
cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0
cmluZ1R5cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5cGU2IHN0cmlu
ZzYpCisgICAgeworICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRl
cjEoc3RyaW5nMSk7CisgICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFw
dGVyMihzdHJpbmcyKTsKKyAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTM+IGFk
YXB0ZXIzKHN0cmluZzMpOworICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlND4g
YWRhcHRlcjQoc3RyaW5nNCk7CisgICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU1
PiBhZGFwdGVyNShzdHJpbmc1KTsKKyAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlw
ZTY+IGFkYXB0ZXI2KHN0cmluZzYpOworCisgICAgICAgIFVDaGFyKiBidWZmZXI7CisgICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIxLmxlbmd0aCgpICsgYWRhcHRlcjIubGVuZ3RoKCkg
KyBhZGFwdGVyMy5sZW5ndGgoKSArIGFkYXB0ZXI0Lmxlbmd0aCgpICsgYWRhcHRlcjUubGVuZ3Ro
KCkgKyBhZGFwdGVyNi5sZW5ndGgoKTsKKyAgICAgICAgaWYgKCF0cnlGYXN0TWFsbG9jKGxlbmd0
aCAqIHNpemVvZihVQ2hhcikpLmdldFZhbHVlKGJ1ZmZlcikpCisgICAgICAgICAgICByZXR1cm4g
VVN0cmluZygpOworCisgICAgICAgIFVDaGFyKiByZXN1bHQgPSBidWZmZXI7CisgICAgICAgIGFk
YXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKKyAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0
aCgpOworICAgICAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7CisgICAgICAgIHJlc3VsdCAr
PSBhZGFwdGVyMi5sZW5ndGgoKTsKKyAgICAgICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwor
ICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7CisgICAgICAgIGFkYXB0ZXI0Lndy
aXRlVG8ocmVzdWx0KTsKKyAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI0Lmxlbmd0aCgpOworICAg
ICAgICBhZGFwdGVyNS53cml0ZVRvKHJlc3VsdCk7CisgICAgICAgIHJlc3VsdCArPSBhZGFwdGVy
NS5sZW5ndGgoKTsKKyAgICAgICAgYWRhcHRlcjYud3JpdGVUbyhyZXN1bHQpOworCisgICAgICAg
IHJldHVybiBVU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoLCBmYWxzZSk7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFt
ZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1
LCB0eXBlbmFtZSBTdHJpbmdUeXBlNiwgdHlwZW5hbWUgU3RyaW5nVHlwZTc+CisgICAgVVN0cmlu
ZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0
cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmlu
ZzUsIFN0cmluZ1R5cGU2IHN0cmluZzYsIFN0cmluZ1R5cGU3IHN0cmluZzcpCisgICAgeworICAg
ICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5nMSk7Cisg
ICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFwdGVyMihzdHJpbmcyKTsK
KyAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTM+IGFkYXB0ZXIzKHN0cmluZzMp
OworICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlND4gYWRhcHRlcjQoc3RyaW5n
NCk7CisgICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU1PiBhZGFwdGVyNShzdHJp
bmc1KTsKKyAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTY+IGFkYXB0ZXI2KHN0
cmluZzYpOworICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNz4gYWRhcHRlcjco
c3RyaW5nNyk7CisKKyAgICAgICAgVUNoYXIqIGJ1ZmZlcjsKKyAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gYWRhcHRlcjEubGVuZ3RoKCkgKyBhZGFwdGVyMi5sZW5ndGgoKSArIGFkYXB0ZXIzLmxl
bmd0aCgpICsgYWRhcHRlcjQubGVuZ3RoKCkgKyBhZGFwdGVyNS5sZW5ndGgoKSArIGFkYXB0ZXI2
Lmxlbmd0aCgpICsgYWRhcHRlcjcubGVuZ3RoKCk7CisgICAgICAgIGlmICghdHJ5RmFzdE1hbGxv
YyhsZW5ndGggKiBzaXplb2YoVUNoYXIpKS5nZXRWYWx1ZShidWZmZXIpKQorICAgICAgICAgICAg
cmV0dXJuIFVTdHJpbmcoKTsKKworICAgICAgICBVQ2hhciogcmVzdWx0ID0gYnVmZmVyOworICAg
ICAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7CisgICAgICAgIHJlc3VsdCArPSBhZGFwdGVy
MS5sZW5ndGgoKTsKKyAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOworICAgICAgICBy
ZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7CisgICAgICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVz
dWx0KTsKKyAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOworICAgICAgICBhZGFw
dGVyNC53cml0ZVRvKHJlc3VsdCk7CisgICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNC5sZW5ndGgo
KTsKKyAgICAgICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQpOworICAgICAgICByZXN1bHQgKz0g
YWRhcHRlcjUubGVuZ3RoKCk7CisgICAgICAgIGFkYXB0ZXI2LndyaXRlVG8ocmVzdWx0KTsKKyAg
ICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI2Lmxlbmd0aCgpOworICAgICAgICBhZGFwdGVyNy53cml0
ZVRvKHJlc3VsdCk7CisKKyAgICAgICAgcmV0dXJuIFVTdHJpbmcoYnVmZmVyLCBsZW5ndGgsIGZh
bHNlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5h
bWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBl
NCwgdHlwZW5hbWUgU3RyaW5nVHlwZTUsIHR5cGVuYW1lIFN0cmluZ1R5cGU2LCB0eXBlbmFtZSBT
dHJpbmdUeXBlNywgdHlwZW5hbWUgU3RyaW5nVHlwZTg+CisgICAgVVN0cmluZyBtYWtlU3RyaW5n
KFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0
cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5
cGU2IHN0cmluZzYsIFN0cmluZ1R5cGU3IHN0cmluZzcsIFN0cmluZ1R5cGU4IHN0cmluZzgpCisg
ICAgeworICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3Ry
aW5nMSk7CisgICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFwdGVyMihz
dHJpbmcyKTsKKyAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTM+IGFkYXB0ZXIz
KHN0cmluZzMpOworICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlND4gYWRhcHRl
cjQoc3RyaW5nNCk7CisgICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU1PiBhZGFw
dGVyNShzdHJpbmc1KTsKKyAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTY+IGFk
YXB0ZXI2KHN0cmluZzYpOworICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNz4g
YWRhcHRlcjcoc3RyaW5nNyk7CisgICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU4
PiBhZGFwdGVyOChzdHJpbmc4KTsKKworICAgICAgICBVQ2hhciogYnVmZmVyOworICAgICAgICB1
bnNpZ25lZCBsZW5ndGggPSBhZGFwdGVyMS5sZW5ndGgoKSArIGFkYXB0ZXIyLmxlbmd0aCgpICsg
YWRhcHRlcjMubGVuZ3RoKCkgKyBhZGFwdGVyNC5sZW5ndGgoKSArIGFkYXB0ZXI1Lmxlbmd0aCgp
ICsgYWRhcHRlcjYubGVuZ3RoKCkgKyBhZGFwdGVyNy5sZW5ndGgoKSArIGFkYXB0ZXI4Lmxlbmd0
aCgpOworICAgICAgICBpZiAoIXRyeUZhc3RNYWxsb2MobGVuZ3RoICogc2l6ZW9mKFVDaGFyKSku
Z2V0VmFsdWUoYnVmZmVyKSkKKyAgICAgICAgICAgIHJldHVybiBVU3RyaW5nKCk7CisKKyAgICAg
ICAgVUNoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKKyAgICAgICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1
bHQpOworICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7CisgICAgICAgIGFkYXB0
ZXIyLndyaXRlVG8ocmVzdWx0KTsKKyAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgp
OworICAgICAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7CisgICAgICAgIHJlc3VsdCArPSBh
ZGFwdGVyMy5sZW5ndGgoKTsKKyAgICAgICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOworICAg
ICAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3RoKCk7CisgICAgICAgIGFkYXB0ZXI1LndyaXRl
VG8ocmVzdWx0KTsKKyAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI1Lmxlbmd0aCgpOworICAgICAg
ICBhZGFwdGVyNi53cml0ZVRvKHJlc3VsdCk7CisgICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNi5s
ZW5ndGgoKTsKKyAgICAgICAgYWRhcHRlcjcud3JpdGVUbyhyZXN1bHQpOworICAgICAgICByZXN1
bHQgKz0gYWRhcHRlcjcubGVuZ3RoKCk7CisgICAgICAgIGFkYXB0ZXI4LndyaXRlVG8ocmVzdWx0
KTsKKworICAgICAgICByZXR1cm4gVVN0cmluZyhidWZmZXIsIGxlbmd0aCwgZmFsc2UpOworICAg
IH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIG5hbWVzcGFjZSBXVEYgewo=
</data>
<flag name="review"
          id="26619"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>