<?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>169106</bug_id>
          
          <creation_ts>2017-03-02 15:51:33 -0800</creation_ts>
          <short_desc>Modernize ContentExtensionParser</short_desc>
          <delta_ts>2017-03-02 16:17:52 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1282945</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-03-02 15:51:33 -0800</bug_when>
    <thetext>Modernize ContentExtensionParser</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282948</commentid>
    <comment_count>1</comment_count>
      <attachid>303262</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-03-02 15:54:49 -0800</bug_when>
    <thetext>Created attachment 303262
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282955</commentid>
    <comment_count>2</comment_count>
      <attachid>303262</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2017-03-02 16:00:44 -0800</bug_when>
    <thetext>Comment on attachment 303262
Patch

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

&gt; Source/WebCore/contentextensions/ContentExtensionParser.cpp:67
&gt; -    ASSERT(vector.isEmpty());
&gt; +    Vector&lt;String&gt; domains;

I&apos;d declare this farther down, before the for loop.

&gt; Source/WebCore/contentextensions/ContentExtensionParser.cpp:86
&gt; +    return domains;

The NRVO won&apos;t apply here, so you should WTFMove() domains.

&gt; Source/WebCore/contentextensions/ContentExtensionParser.cpp:188
&gt; +    return trigger;

Ditto.

&gt; Source/WebCore/contentextensions/ContentExtensionParser.cpp:299
&gt; +    return ruleList;

Ditto.

&gt; Source/WebCore/contentextensions/ContentExtensionParser.cpp:328
&gt; +    return ruleList;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282968</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-03-02 16:17:52 -0800</bug_when>
    <thetext>http://trac.webkit.org/r213322</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303262</attachid>
            <date>2017-03-02 15:54:49 -0800</date>
            <delta_ts>2017-03-02 16:00:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169106-20170302155449.patch</filename>
            <type>text/plain</type>
            <size>20403</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzMxNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE3LTAzLTAyICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW9kZXJuaXpl
IENvbnRlbnRFeHRlbnNpb25QYXJzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2OTEwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdlIHdlcmUgcmV0dXJuaW5nIHN0ZDo6ZXJyb3JfY29kZSBhbmQgcGFz
c2luZyB0aGUgcmV0dXJuIHZhbHVlIGFzIGEgcGFyYW1ldGVyIHJlZmVyZW5jZS4KKyAgICAgICAg
YmVjYXVzZSB3ZSB3cm90ZSB0aGlzIGNvZGUgYmVmb3JlIHdlIGhhZCBXVEY6OkV4cGVjdGVkLgor
CisgICAgICAgIE5vIGNoYW5nZSBpbiBiZWhhdmlvciwgdmVyaWZpZWQgYnkgbWFueSBBUEkgdGVz
dHMuCisKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGls
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxl
TGlzdCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Z2V0RG9tYWluTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6bG9hZFRyaWdnZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmxvYWRBY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmxvYWRSdWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpsb2FkRW5jb2RlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpwYXJzZVJ1bGVMaXN0KToKKyAgICAgICAgKiBjb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmg6CisgICAgICAgICogY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25SdWxlOjpDb250ZW50RXh0ZW5zaW9uUnVs
ZSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUuaDoK
KwogMjAxNy0wMi0yOCAgTWF0dCBSYWpjYSAgPG1yYWpjYUBhcHBsZS5jb20+CiAKICAgICAgICAg
TWVkaWE6IHNlbmQgImRpZCBpbnRlcmZlcmUgd2l0aCBwbGF5YmFjayIgZXZlbnRzIHdoZW4gdGhl
IHVzZXIgcGF1c2VzIGFuIGF1dG9wbGF5aW5nIGVsZW1lbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNv
bXBpbGVyLmNwcAkocmV2aXNpb24gMjEzMjkzKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjA1LDEzICsyMDUsMTIgQEAgc3RhdGljIHZvaWQgYWRkVW5pdmVyc2FsQWN0aW9uc1RvREZBKERG
QQogICAgIHJvb3Quc2V0QWN0aW9ucyhhY3Rpb25zU3RhcnQsIHN0YXRpY19jYXN0PHVpbnQxNl90
PihhY3Rpb25zTGVuZ3RoKSk7CiB9CiAKLXN0ZDo6ZXJyb3JfY29kZSBjb21waWxlUnVsZUxpc3Qo
Q29udGVudEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2xpZW50JiBjbGllbnQsIFN0cmluZyYmIHJ1bGVM
aXN0KQorc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RXh0ZW5zaW9uQ29t
cGlsYXRpb25DbGllbnQmIGNsaWVudCwgU3RyaW5nJiYgcnVsZUpTT04pCiB7Ci0gICAgVmVjdG9y
PENvbnRlbnRFeHRlbnNpb25SdWxlPiBwYXJzZWRSdWxlTGlzdDsKLSAgICBhdXRvIHBhcnNlckVy
cm9yID0gcGFyc2VSdWxlTGlzdChydWxlTGlzdCwgcGFyc2VkUnVsZUxpc3QpOwotICAgIHJ1bGVM
aXN0ID0gU3RyaW5nKCk7Ci0gICAgaWYgKHBhcnNlckVycm9yKQotICAgICAgICByZXR1cm4gcGFy
c2VyRXJyb3I7CisgICAgYXV0byBydWxlTGlzdCA9IHBhcnNlUnVsZUxpc3QoV1RGTW92ZShydWxl
SlNPTikpOworICAgIGlmICghcnVsZUxpc3QuaGFzVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIHJ1
bGVMaXN0LmVycm9yKCk7CisgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiBwYXJzZWRS
dWxlTGlzdCA9IFdURk1vdmUocnVsZUxpc3QudmFsdWUoKSk7CiAKICNpZiBDT05URU5UX0VYVEVO
U0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HCiAgICAgZG91YmxlIHBhdHRlcm5QYXJ0aXRpb25p
bmdTdGFydCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
blBhcnNlci5jcHAJKHJldmlzaW9uIDIxMzI5MykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPTk9iamVjdC5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1ZNLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkBAIC01OCwzMSArNTksMzEgQEAgc3RhdGljIGJv
b2wgY29udGFpbnNPbmx5QVNDSUlXaXRoTm9VcHBlcgogICAgIHJldHVybiB0cnVlOwogfQogICAg
IAotc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBnZXREb21haW5MaXN0KEV4ZWNTdGF0ZSYgZXhlYywg
Y29uc3QgSlNPYmplY3QqIGFycmF5T2JqZWN0LCBWZWN0b3I8U3RyaW5nPiYgdmVjdG9yKQorc3Rh
dGljIEV4cGVjdGVkPFZlY3RvcjxTdHJpbmc+LCBzdGQ6OmVycm9yX2NvZGU+IGdldERvbWFpbkxp
c3QoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBKU09iamVjdCogYXJyYXlPYmplY3QpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAotICAgIEFTU0VSVCh2ZWN0b3IuaXNFbXB0eSgpKTsKKyAgICBWZWN0b3I8U3RyaW5n
PiBkb21haW5zOwogICAgIGlmICghYXJyYXlPYmplY3QgfHwgIWlzSlNBcnJheShhcnJheU9iamVj
dCkpCi0gICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkRG9t
YWluTGlzdDsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25F
cnJvcjo6SlNPTkludmFsaWREb21haW5MaXN0KTsKICAgICBjb25zdCBKU0FycmF5KiBhcnJheSA9
IGpzQ2FzdDxjb25zdCBKU0FycmF5Kj4oYXJyYXlPYmplY3QpOwogICAgIAogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKICAgICAgICAgY29uc3QgSlNWYWx1ZSB2YWx1ZSA9IGFycmF5LT5nZXRJ
bmRleCgmZXhlYywgaSk7CiAgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8fCAhdmFsdWUu
aXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpT
T05JbnZhbGlkRG9tYWluTGlzdDsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChD
b250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkRG9tYWluTGlzdCk7CiAgICAgICAgIAog
ICAgICAgICAvLyBEb21haW5zIHNob3VsZCBiZSBwdW55Y29kZSBlbmNvZGVkIGxvd2VyIGNhc2Uu
CiAgICAgICAgIGNvbnN0IFN0cmluZyYgZG9tYWluID0gYXNTdHJpbmcodmFsdWUpLT52YWx1ZSgm
ZXhlYyk7CiAgICAgICAgIGlmIChkb21haW4uaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJu
IENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWREb21haW5MaXN0OworICAgICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFs
aWREb21haW5MaXN0KTsKICAgICAgICAgaWYgKCFjb250YWluc09ubHlBU0NJSVdpdGhOb1VwcGVy
Y2FzZShkb21haW4pKQotICAgICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6
SlNPTkRvbWFpbk5vdExvd2VyQ2FzZUFTQ0lJOwotICAgICAgICB2ZWN0b3IuYXBwZW5kKGRvbWFp
bik7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVy
cm9yOjpKU09ORG9tYWluTm90TG93ZXJDYXNlQVNDSUkpOworICAgICAgICBkb21haW5zLmFwcGVu
ZChkb21haW4pOwogICAgIH0KLSAgICByZXR1cm4geyB9OworICAgIHJldHVybiBkb21haW5zOwog
fQogCiBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGdldFR5cGVGbGFncyhFeGVjU3RhdGUmIGV4ZWMs
IGNvbnN0IEpTVmFsdWUmIHR5cGVWYWx1ZSwgUmVzb3VyY2VGbGFncyYgZmxhZ3MsIHVpbnQxNl90
ICgqc3RyaW5nVG9UeXBlKShjb25zdCBTdHJpbmcmKSkKQEAgLTExNywyMyArMTE4LDI0IEBAIHN0
YXRpYyBzdGQ6OmVycm9yX2NvZGUgZ2V0VHlwZUZsYWdzKEV4ZWMKICAgICByZXR1cm4geyB9Owog
fQogICAgIAotc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2FkVHJpZ2dlcihFeGVjU3RhdGUmIGV4
ZWMsIGNvbnN0IEpTT2JqZWN0JiBydWxlT2JqZWN0LCBUcmlnZ2VyJiB0cmlnZ2VyKQorc3RhdGlj
IEV4cGVjdGVkPFRyaWdnZXIsIHN0ZDo6ZXJyb3JfY29kZT4gbG9hZFRyaWdnZXIoRXhlY1N0YXRl
JiBleGVjLCBjb25zdCBKU09iamVjdCYgcnVsZU9iamVjdCkKIHsKICAgICBWTSYgdm0gPSBleGVj
LnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAg
Y29uc3QgSlNWYWx1ZSB0cmlnZ2VyT2JqZWN0ID0gcnVsZU9iamVjdC5nZXQoJmV4ZWMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJ0cmlnZ2VyIikpOwogICAgIGlmICghdHJpZ2dlck9i
amVjdCB8fCBzY29wZS5leGNlcHRpb24oKSB8fCAhdHJpZ2dlck9iamVjdC5pc09iamVjdCgpKQot
ICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFRyaWdnZXI7
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpT
T05JbnZhbGlkVHJpZ2dlcik7CiAgICAgCiAgICAgY29uc3QgSlNWYWx1ZSB1cmxGaWx0ZXJPYmpl
Y3QgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhl
YywgInVybC1maWx0ZXIiKSk7CiAgICAgaWYgKCF1cmxGaWx0ZXJPYmplY3QgfHwgc2NvcGUuZXhj
ZXB0aW9uKCkgfHwgIXVybEZpbHRlck9iamVjdC5pc1N0cmluZygpKQotICAgICAgICByZXR1cm4g
Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFVSTEZpbHRlckluVHJpZ2dlcjsKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTklu
dmFsaWRVUkxGaWx0ZXJJblRyaWdnZXIpOwogCiAgICAgU3RyaW5nIHVybEZpbHRlciA9IGFzU3Ry
aW5nKHVybEZpbHRlck9iamVjdCktPnZhbHVlKCZleGVjKTsKICAgICBpZiAodXJsRmlsdGVyLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFs
aWRVUkxGaWx0ZXJJblRyaWdnZXI7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVVJMRmlsdGVySW5UcmlnZ2VyKTsKIAorICAg
IFRyaWdnZXIgdHJpZ2dlcjsKICAgICB0cmlnZ2VyLnVybEZpbHRlciA9IHVybEZpbHRlcjsKIAog
ICAgIGNvbnN0IEpTVmFsdWUgdXJsRmlsdGVyQ2FzZVZhbHVlID0gdHJpZ2dlck9iamVjdC5nZXQo
JmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJ1cmwtZmlsdGVyLWlzLWNhc2Ut
c2Vuc2l0aXZlIikpOwpAQCAtMTQ0LDQ0ICsxNDYsNDYgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29k
ZSBsb2FkVHJpZ2dlcihFeGVjUwogICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgcmVzb3Vy
Y2VUeXBlVmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICBhdXRvIHR5cGVGbGFnc0Vycm9yID0g
Z2V0VHlwZUZsYWdzKGV4ZWMsIHJlc291cmNlVHlwZVZhbHVlLCB0cmlnZ2VyLmZsYWdzLCByZWFk
UmVzb3VyY2VUeXBlKTsKICAgICAgICAgaWYgKHR5cGVGbGFnc0Vycm9yKQotICAgICAgICAgICAg
cmV0dXJuIHR5cGVGbGFnc0Vycm9yOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KHR5cGVGbGFnc0Vycm9yKTsKICAgICB9IGVsc2UgaWYgKCFyZXNvdXJjZVR5cGVWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52
YWxpZFRyaWdnZXJGbGFnc0FycmF5OworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29u
dGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFRyaWdnZXJGbGFnc0FycmF5KTsKIAogICAg
IGNvbnN0IEpTVmFsdWUgbG9hZFR5cGVWYWx1ZSA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAibG9hZC10eXBlIikpOwogICAgIGlmICghc2Nv
cGUuZXhjZXB0aW9uKCkgJiYgbG9hZFR5cGVWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgIGF1
dG8gdHlwZUZsYWdzRXJyb3IgPSBnZXRUeXBlRmxhZ3MoZXhlYywgbG9hZFR5cGVWYWx1ZSwgdHJp
Z2dlci5mbGFncywgcmVhZExvYWRUeXBlKTsKICAgICAgICAgaWYgKHR5cGVGbGFnc0Vycm9yKQot
ICAgICAgICAgICAgcmV0dXJuIHR5cGVGbGFnc0Vycm9yOworICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKHR5cGVGbGFnc0Vycm9yKTsKICAgICB9IGVsc2UgaWYgKCFsb2FkVHlwZVZh
bHVlLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6
OkpTT05JbnZhbGlkVHJpZ2dlckZsYWdzQXJyYXk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVHJpZ2dlckZsYWdzQXJyYXkp
OwogCi0gICAgY29uc3QgSlNWYWx1ZSBpZkRvbWFpbiA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVj
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAiaWYtZG9tYWluIikpOwotICAgIGlmICgh
c2NvcGUuZXhjZXB0aW9uKCkgJiYgaWZEb21haW4uaXNPYmplY3QoKSkgewotICAgICAgICBhdXRv
IGlmRG9tYWluRXJyb3IgPSBnZXREb21haW5MaXN0KGV4ZWMsIGFzT2JqZWN0KGlmRG9tYWluKSwg
dHJpZ2dlci5kb21haW5zKTsKLSAgICAgICAgaWYgKGlmRG9tYWluRXJyb3IpCi0gICAgICAgICAg
ICByZXR1cm4gaWZEb21haW5FcnJvcjsKKyAgICBjb25zdCBKU1ZhbHVlIGlmRG9tYWluVmFsdWUg
PSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywg
ImlmLWRvbWFpbiIpKTsKKyAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpICYmIGlmRG9tYWluVmFs
dWUuaXNPYmplY3QoKSkgeworICAgICAgICBhdXRvIGlmRG9tYWluID0gZ2V0RG9tYWluTGlzdChl
eGVjLCBhc09iamVjdChpZkRvbWFpblZhbHVlKSk7CisgICAgICAgIGlmICghaWZEb21haW4uaGFz
VmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChpZkRvbWFpbi5lcnJv
cigpKTsKKyAgICAgICAgdHJpZ2dlci5kb21haW5zID0gV1RGTW92ZShpZkRvbWFpbi52YWx1ZSgp
KTsKICAgICAgICAgaWYgKHRyaWdnZXIuZG9tYWlucy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZERvbWFpbkxpc3Q7CisgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09O
SW52YWxpZERvbWFpbkxpc3QpOwogICAgICAgICBBU1NFUlQodHJpZ2dlci5kb21haW5Db25kaXRp
b24gPT0gVHJpZ2dlcjo6RG9tYWluQ29uZGl0aW9uOjpOb25lKTsKICAgICAgICAgdHJpZ2dlci5k
b21haW5Db25kaXRpb24gPSBUcmlnZ2VyOjpEb21haW5Db25kaXRpb246OklmRG9tYWluOwotICAg
IH0gZWxzZSBpZiAoIWlmRG9tYWluLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiBDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkRG9tYWluTGlzdDsKKyAgICB9IGVsc2UgaWYg
KCFpZkRvbWFpblZhbHVlLmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkRG9tYWluTGlzdCk7CiAgICAg
Ci0gICAgY29uc3QgSlNWYWx1ZSB1bmxlc3NEb21haW4gPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhl
YywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgInVubGVzcy1kb21haW4iKSk7Ci0gICAg
aWYgKCFzY29wZS5leGNlcHRpb24oKSAmJiB1bmxlc3NEb21haW4uaXNPYmplY3QoKSkgeworICAg
IGNvbnN0IEpTVmFsdWUgdW5sZXNzRG9tYWluVmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhl
YywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgInVubGVzcy1kb21haW4iKSk7CisgICAg
aWYgKCFzY29wZS5leGNlcHRpb24oKSAmJiB1bmxlc3NEb21haW5WYWx1ZS5pc09iamVjdCgpKSB7
CiAgICAgICAgIGlmICh0cmlnZ2VyLmRvbWFpbkNvbmRpdGlvbiAhPSBUcmlnZ2VyOjpEb21haW5D
b25kaXRpb246Ok5vbmUpCi0gICAgICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9y
OjpKU09OVW5sZXNzQW5kSWZEb21haW47Ci0gICAgICAgIGF1dG8gdW5sZXNzRG9tYWluRXJyb3Ig
PSBnZXREb21haW5MaXN0KGV4ZWMsIGFzT2JqZWN0KHVubGVzc0RvbWFpbiksIHRyaWdnZXIuZG9t
YWlucyk7Ci0gICAgICAgIGlmICh1bmxlc3NEb21haW5FcnJvcikKLSAgICAgICAgICAgIHJldHVy
biB1bmxlc3NEb21haW5FcnJvcjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChD
b250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Vbmxlc3NBbmRJZkRvbWFpbik7CisgICAgICAgIGF1
dG8gdW5sZXNzRG9tYWluID0gZ2V0RG9tYWluTGlzdChleGVjLCBhc09iamVjdCh1bmxlc3NEb21h
aW5WYWx1ZSkpOworICAgICAgICBpZiAoIXVubGVzc0RvbWFpbi5oYXNWYWx1ZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHVubGVzc0RvbWFpbi5lcnJvcigpKTsKKyAgICAg
ICAgdHJpZ2dlci5kb21haW5zID0gV1RGTW92ZSh1bmxlc3NEb21haW4udmFsdWUoKSk7CiAgICAg
ICAgIGlmICh0cmlnZ2VyLmRvbWFpbnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIENv
bnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWREb21haW5MaXN0OworICAgICAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRE
b21haW5MaXN0KTsKICAgICAgICAgdHJpZ2dlci5kb21haW5Db25kaXRpb24gPSBUcmlnZ2VyOjpE
b21haW5Db25kaXRpb246OlVubGVzc0RvbWFpbjsKLSAgICB9IGVsc2UgaWYgKCF1bmxlc3NEb21h
aW4uaXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6
SlNPTkludmFsaWREb21haW5MaXN0OworICAgIH0gZWxzZSBpZiAoIXVubGVzc0RvbWFpblZhbHVl
LmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0
ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkRG9tYWluTGlzdCk7CiAKLSAgICByZXR1cm4geyB9Owor
ICAgIHJldHVybiB0cmlnZ2VyOwogfQogCiBzdGF0aWMgYm9vbCBpc1ZhbGlkU2VsZWN0b3IoY29u
c3QgU3RyaW5nJiBzZWxlY3RvcikKQEAgLTE5MywxMTQgKzE5NywxMDkgQEAgc3RhdGljIGJvb2wg
aXNWYWxpZFNlbGVjdG9yKGNvbnN0IFN0cmluZwogICAgIHJldHVybiBzZWxlY3Rvckxpc3QuaXNW
YWxpZCgpOwogfQogCi1zdGF0aWMgc3RkOjplcnJvcl9jb2RlIGxvYWRBY3Rpb24oRXhlY1N0YXRl
JiBleGVjLCBjb25zdCBKU09iamVjdCYgcnVsZU9iamVjdCwgQWN0aW9uJiBhY3Rpb24sIGJvb2wm
IHZhbGlkU2VsZWN0b3IpCitzdGF0aWMgRXhwZWN0ZWQ8c3RkOjpvcHRpb25hbDxBY3Rpb24+LCBz
dGQ6OmVycm9yX2NvZGU+IGxvYWRBY3Rpb24oRXhlY1N0YXRlJiBleGVjLCBjb25zdCBKU09iamVj
dCYgcnVsZU9iamVjdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgdmFsaWRTZWxlY3RvciA9IHRydWU7
CiAgICAgY29uc3QgSlNWYWx1ZSBhY3Rpb25PYmplY3QgPSBydWxlT2JqZWN0LmdldCgmZXhlYywg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgImFjdGlvbiIpKTsKICAgICBpZiAoIWFjdGlv
bk9iamVjdCB8fCBzY29wZS5leGNlcHRpb24oKSB8fCAhYWN0aW9uT2JqZWN0LmlzT2JqZWN0KCkp
Ci0gICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkQWN0aW9u
OworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpK
U09OSW52YWxpZEFjdGlvbik7CiAKICAgICBjb25zdCBKU1ZhbHVlIHR5cGVPYmplY3QgPSBhY3Rp
b25PYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAidHlwZSIp
KTsKICAgICBpZiAoIXR5cGVPYmplY3QgfHwgc2NvcGUuZXhjZXB0aW9uKCkgfHwgIXR5cGVPYmpl
Y3QuaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNP
TkludmFsaWRBY3Rpb25UeXBlOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVu
dEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZEFjdGlvblR5cGUpOwogCiAgICAgU3RyaW5nIGFj
dGlvblR5cGUgPSBhc1N0cmluZyh0eXBlT2JqZWN0KS0+dmFsdWUoJmV4ZWMpOwogCiAgICAgaWYg
KGFjdGlvblR5cGUgPT0gImJsb2NrIikKLSAgICAgICAgYWN0aW9uID0gQWN0aW9uVHlwZTo6Qmxv
Y2tMb2FkOwotICAgIGVsc2UgaWYgKGFjdGlvblR5cGUgPT0gImlnbm9yZS1wcmV2aW91cy1ydWxl
cyIpCi0gICAgICAgIGFjdGlvbiA9IEFjdGlvblR5cGU6Oklnbm9yZVByZXZpb3VzUnVsZXM7Ci0g
ICAgZWxzZSBpZiAoYWN0aW9uVHlwZSA9PSAiYmxvY2stY29va2llcyIpCi0gICAgICAgIGFjdGlv
biA9IEFjdGlvblR5cGU6OkJsb2NrQ29va2llczsKLSAgICBlbHNlIGlmIChhY3Rpb25UeXBlID09
ICJjc3MtZGlzcGxheS1ub25lIikgeworICAgICAgICByZXR1cm4ge3tBY3Rpb25UeXBlOjpCbG9j
a0xvYWR9fTsKKyAgICBpZiAoYWN0aW9uVHlwZSA9PSAiaWdub3JlLXByZXZpb3VzLXJ1bGVzIikK
KyAgICAgICAgcmV0dXJuIHt7QWN0aW9uVHlwZTo6SWdub3JlUHJldmlvdXNSdWxlc319OworICAg
IGlmIChhY3Rpb25UeXBlID09ICJibG9jay1jb29raWVzIikKKyAgICAgICAgcmV0dXJuIHt7QWN0
aW9uVHlwZTo6QmxvY2tDb29raWVzfX07CisgICAgaWYgKGFjdGlvblR5cGUgPT0gImNzcy1kaXNw
bGF5LW5vbmUiKSB7CiAgICAgICAgIEpTVmFsdWUgc2VsZWN0b3IgPSBhY3Rpb25PYmplY3QuZ2V0
KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAic2VsZWN0b3IiKSk7CiAgICAg
ICAgIGlmICghc2VsZWN0b3IgfHwgc2NvcGUuZXhjZXB0aW9uKCkgfHwgIXNlbGVjdG9yLmlzU3Ry
aW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52
YWxpZENTU0Rpc3BsYXlOb25lQWN0aW9uVHlwZTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkQ1NTRGlzcGxheU5vbmVB
Y3Rpb25UeXBlKTsKIAogICAgICAgICBTdHJpbmcgc2VsZWN0b3JTdHJpbmcgPSBhc1N0cmluZyhz
ZWxlY3RvciktPnZhbHVlKCZleGVjKTsKICAgICAgICAgaWYgKCFpc1ZhbGlkU2VsZWN0b3Ioc2Vs
ZWN0b3JTdHJpbmcpKSB7CiAgICAgICAgICAgICAvLyBTa2lwIHJ1bGVzIHdpdGggaW52YWxpZCBz
ZWxlY3RvcnMgdG8gYmUgYmFja3dhcmRzLWNvbXBhdGlibGUuCi0gICAgICAgICAgICB2YWxpZFNl
bGVjdG9yID0gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgcmV0
dXJuIHtzdGQ6Om51bGxvcHR9OwogICAgICAgICB9Ci0gICAgICAgIGFjdGlvbiA9IEFjdGlvbihB
Y3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCBzZWxlY3RvclN0cmluZyk7Ci0gICAg
fSBlbHNlIGlmIChhY3Rpb25UeXBlID09ICJtYWtlLWh0dHBzIikgewotICAgICAgICBhY3Rpb24g
PSBBY3Rpb25UeXBlOjpNYWtlSFRUUFM7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkQWN0aW9uVHlwZTsKLQotICAgIHJldHVybiB7
IH07CisgICAgICAgIHJldHVybiB7QWN0aW9uKEFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2Vs
ZWN0b3IsIHNlbGVjdG9yU3RyaW5nKX07CisgICAgfQorICAgIGlmIChhY3Rpb25UeXBlID09ICJt
YWtlLWh0dHBzIikKKyAgICAgICAgcmV0dXJuIHt7QWN0aW9uVHlwZTo6TWFrZUhUVFBTfX07Cisg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFs
aWRBY3Rpb25UeXBlKTsKIH0KIAotc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2FkUnVsZShFeGVj
U3RhdGUmIGV4ZWMsIGNvbnN0IEpTT2JqZWN0JiBydWxlT2JqZWN0LCBWZWN0b3I8Q29udGVudEV4
dGVuc2lvblJ1bGU+JiBydWxlTGlzdCkKK3N0YXRpYyBFeHBlY3RlZDxzdGQ6Om9wdGlvbmFsPENv
bnRlbnRFeHRlbnNpb25SdWxlPiwgc3RkOjplcnJvcl9jb2RlPiBsb2FkUnVsZShFeGVjU3RhdGUm
IGV4ZWMsIGNvbnN0IEpTT2JqZWN0JiBydWxlT2JqZWN0KQogewotICAgIFRyaWdnZXIgdHJpZ2dl
cjsKLSAgICBhdXRvIHRyaWdnZXJFcnJvciA9IGxvYWRUcmlnZ2VyKGV4ZWMsIHJ1bGVPYmplY3Qs
IHRyaWdnZXIpOwotICAgIGlmICh0cmlnZ2VyRXJyb3IpCi0gICAgICAgIHJldHVybiB0cmlnZ2Vy
RXJyb3I7Ci0KLSAgICBBY3Rpb24gYWN0aW9uOwotICAgIGJvb2wgdmFsaWRTZWxlY3RvcjsKLSAg
ICBhdXRvIGFjdGlvbkVycm9yID0gbG9hZEFjdGlvbihleGVjLCBydWxlT2JqZWN0LCBhY3Rpb24s
IHZhbGlkU2VsZWN0b3IpOwotICAgIGlmIChhY3Rpb25FcnJvcikKLSAgICAgICAgcmV0dXJuIGFj
dGlvbkVycm9yOworICAgIGF1dG8gdHJpZ2dlciA9IGxvYWRUcmlnZ2VyKGV4ZWMsIHJ1bGVPYmpl
Y3QpOworICAgIGlmICghdHJpZ2dlci5oYXNWYWx1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQodHJpZ2dlci5lcnJvcigpKTsKKworICAgIGF1dG8gYWN0aW9uID0gbG9hZEFjdGlv
bihleGVjLCBydWxlT2JqZWN0KTsKKyAgICBpZiAoIWFjdGlvbi5oYXNWYWx1ZSgpKQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoYWN0aW9uLmVycm9yKCkpOwogCi0gICAgaWYgKHZhbGlk
U2VsZWN0b3IpCi0gICAgICAgIHJ1bGVMaXN0LmFwcGVuZChDb250ZW50RXh0ZW5zaW9uUnVsZSh0
cmlnZ2VyLCBhY3Rpb24pKTsKLSAgICByZXR1cm4geyB9OworICAgIGlmIChhY3Rpb24udmFsdWUo
KSkKKyAgICAgICAgcmV0dXJuIHt7e1dURk1vdmUodHJpZ2dlci52YWx1ZSgpKSwgV1RGTW92ZShh
Y3Rpb24udmFsdWUoKS52YWx1ZSgpKX19fTsKKworICAgIHJldHVybiB7c3RkOjpudWxsb3B0fTsK
IH0KIAotc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2FkRW5jb2RlZFJ1bGVzKEV4ZWNTdGF0ZSYg
ZXhlYywgY29uc3QgU3RyaW5nJiBydWxlcywgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiYg
cnVsZUxpc3QpCitzdGF0aWMgRXhwZWN0ZWQ8VmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiwg
c3RkOjplcnJvcl9jb2RlPiBsb2FkRW5jb2RlZFJ1bGVzKEV4ZWNTdGF0ZSYgZXhlYywgU3RyaW5n
JiYgcnVsZUpTT04pCiB7CiAgICAgVk0mIHZtID0gZXhlYy52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIEZJWE1FOiBKU09OUGFyc2Ugc2hv
dWxkIHJlcXVpcmUgY2FsbGJhY2tzIGluc3RlYWQgb2YgYW4gRXhlY1N0YXRlLgotICAgIGNvbnN0
IEpTVmFsdWUgZGVjb2RlZFJ1bGVzID0gSlNPTlBhcnNlKCZleGVjLCBydWxlcyk7CisgICAgY29u
c3QgSlNWYWx1ZSBkZWNvZGVkUnVsZXMgPSBKU09OUGFyc2UoJmV4ZWMsIHJ1bGVKU09OKTsKIAog
ICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8fCAhZGVjb2RlZFJ1bGVzKQotICAgICAgICByZXR1
cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZDsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWQpOwogCiAgICAg
aWYgKCFkZWNvZGVkUnVsZXMuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRl
bnNpb25FcnJvcjo6SlNPTlRvcExldmVsU3RydWN0dXJlTm90QW5PYmplY3Q7CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Ub3BMZXZlbFN0
cnVjdHVyZU5vdEFuT2JqZWN0KTsKIAogICAgIGNvbnN0IEpTT2JqZWN0KiB0b3BMZXZlbE9iamVj
dCA9IGRlY29kZWRSdWxlcy50b09iamVjdCgmZXhlYyk7CiAgICAgaWYgKCF0b3BMZXZlbE9iamVj
dCB8fCBzY29wZS5leGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25F
cnJvcjo6SlNPTlRvcExldmVsU3RydWN0dXJlTm90QW5PYmplY3Q7CisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Ub3BMZXZlbFN0cnVjdHVy
ZU5vdEFuT2JqZWN0KTsKICAgICAKICAgICBpZiAoIWlzSlNBcnJheSh0b3BMZXZlbE9iamVjdCkp
Ci0gICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Ub3BMZXZlbFN0cnVj
dHVyZU5vdEFuQXJyYXk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0
ZW5zaW9uRXJyb3I6OkpTT05Ub3BMZXZlbFN0cnVjdHVyZU5vdEFuQXJyYXkpOwogCiAgICAgY29u
c3QgSlNBcnJheSogdG9wTGV2ZWxBcnJheSA9IGpzQ2FzdDxjb25zdCBKU0FycmF5Kj4odG9wTGV2
ZWxPYmplY3QpOwogCi0gICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiBsb2NhbFJ1bGVM
aXN0OworICAgIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uUnVsZT4gcnVsZUxpc3Q7CiAKICAgICB1
bnNpZ25lZCBsZW5ndGggPSB0b3BMZXZlbEFycmF5LT5sZW5ndGgoKTsKICAgICBjb25zdCB1bnNp
Z25lZCBtYXhSdWxlQ291bnQgPSA1MDAwMDsKICAgICBpZiAobGVuZ3RoID4gbWF4UnVsZUNvdW50
KQotICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OVG9vTWFueVJ1bGVz
OworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpK
U09OVG9vTWFueVJ1bGVzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKICAgICAgICAgY29uc3QgSlNWYWx1ZSB2YWx1ZSA9IHRvcExldmVsQXJyYXktPmdldElu
ZGV4KCZleGVjLCBpKTsKICAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8ICF2YWx1ZSkK
LSAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkT2Jq
ZWN0SW5Ub3BMZXZlbEFycmF5OworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENv
bnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRPYmplY3RJblRvcExldmVsQXJyYXkpOwog
CiAgICAgICAgIGNvbnN0IEpTT2JqZWN0KiBydWxlT2JqZWN0ID0gdmFsdWUudG9PYmplY3QoJmV4
ZWMpOwogICAgICAgICBpZiAoIXJ1bGVPYmplY3QgfHwgc2NvcGUuZXhjZXB0aW9uKCkpCi0gICAg
ICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFJ1bGU7Cisg
ICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpK
U09OSW52YWxpZFJ1bGUpOwogCi0gICAgICAgIGF1dG8gZXJyb3IgPSBsb2FkUnVsZShleGVjLCAq
cnVsZU9iamVjdCwgbG9jYWxSdWxlTGlzdCk7Ci0gICAgICAgIGlmIChlcnJvcikKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcjsKKyAgICAgICAgYXV0byBydWxlID0gbG9hZFJ1bGUoZXhlYywgKnJ1
bGVPYmplY3QpOworICAgICAgICBpZiAoIXJ1bGUuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChydWxlLmVycm9yKCkpOworICAgICAgICBpZiAocnVsZS52YWx1
ZSgpKQorICAgICAgICAgICAgcnVsZUxpc3QuYXBwZW5kKCpydWxlLnZhbHVlKCkpOwogICAgIH0K
IAotICAgIHJ1bGVMaXN0ID0gV1RGTW92ZShsb2NhbFJ1bGVMaXN0KTsKLSAgICByZXR1cm4geyB9
OworICAgIHJldHVybiBydWxlTGlzdDsKIH0KIAotc3RkOjplcnJvcl9jb2RlIHBhcnNlUnVsZUxp
c3QoY29uc3QgU3RyaW5nJiBydWxlcywgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiYgcnVs
ZUxpc3QpCitFeHBlY3RlZDxWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+LCBzdGQ6OmVycm9y
X2NvZGU+IHBhcnNlUnVsZUxpc3QoU3RyaW5nJiYgcnVsZUpTT04pCiB7CiAjaWYgQ09OVEVOVF9F
WFRFTlNJT05TX1BFUkZPUk1BTkNFX1JFUE9SVElORwogICAgIGRvdWJsZSBsb2FkRXh0ZW5zaW9u
U3RhcnRUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CkBAIC0zMTEsMjIgKzMx
MCwyMiBAQCBzdGQ6OmVycm9yX2NvZGUgcGFyc2VSdWxlTGlzdChjb25zdCBTdHJpCiAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTR2xvYmFsT2JqZWN0OjpjcmVhdGUoKnZtLCBK
U0dsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCp2bSwganNOdWxsKCkpKTsKIAogICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIGF1dG8gZXJy
b3IgPSBsb2FkRW5jb2RlZFJ1bGVzKCpleGVjLCBydWxlcywgcnVsZUxpc3QpOworICAgIGF1dG8g
cnVsZUxpc3QgPSBsb2FkRW5jb2RlZFJ1bGVzKCpleGVjLCBXVEZNb3ZlKHJ1bGVKU09OKSk7CiAK
ICAgICB2bSA9IG51bGxwdHI7CiAKLSAgICBpZiAoZXJyb3IpCi0gICAgICAgIHJldHVybiBlcnJv
cjsKKyAgICBpZiAoIXJ1bGVMaXN0Lmhhc1ZhbHVlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChydWxlTGlzdC5lcnJvcigpKTsKIAotICAgIGlmIChydWxlTGlzdC5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Db250YWluc05vUnVs
ZXM7CisgICAgaWYgKHJ1bGVMaXN0LT5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Db250YWluc05vUnVsZXMpOwogCiAj
aWYgQ09OVEVOVF9FWFRFTlNJT05TX1BFUkZPUk1BTkNFX1JFUE9SVElORwogICAgIGRvdWJsZSBs
b2FkRXh0ZW5zaW9uRW5kVGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwogICAg
IGRhdGFMb2dGKCJUaW1lIHNwZW50IGxvYWRpbmcgZXh0ZW5zaW9uICVmXG4iLCAobG9hZEV4dGVu
c2lvbkVuZFRpbWUgLSBsb2FkRXh0ZW5zaW9uU3RhcnRUaW1lKSk7CiAjZW5kaWYKIAotICAgIHJl
dHVybiB7IH07CisgICAgcmV0dXJuIHJ1bGVMaXN0OwogfQogCiB9IC8vIG5hbWVzcGFjZSBDb250
ZW50RXh0ZW5zaW9ucwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29u
dGVudEV4dGVuc2lvblBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuaAkocmV2aXNpb24gMjEzMjkzKQor
KysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKIAogI2luY2x1ZGUgPHN5c3RlbV9lcnJvcj4KKyNpbmNsdWRlIDx3dGYvRXhw
ZWN0ZWQuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIApAQCAtMzcsNyArMzgsNyBAQCBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewogCiBj
bGFzcyBDb250ZW50RXh0ZW5zaW9uUnVsZTsKIAotc3RkOjplcnJvcl9jb2RlIHBhcnNlUnVsZUxp
c3QoY29uc3QgU3RyaW5nJiBydWxlcywgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiYpOwor
RXhwZWN0ZWQ8VmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiwgc3RkOjplcnJvcl9jb2RlPiBw
YXJzZVJ1bGVMaXN0KFN0cmluZyYmKTsKIAogfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lv
bnMKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5jcHAJKHJldmlz
aW9uIDIxMzI5MykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb25SdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIsOSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CiAKLUNvbnRlbnRF
eHRlbnNpb25SdWxlOjpDb250ZW50RXh0ZW5zaW9uUnVsZShjb25zdCBUcmlnZ2VyJiB0cmlnZ2Vy
LCBjb25zdCBBY3Rpb24mIGFjdGlvbikKLSAgICA6IG1fdHJpZ2dlcih0cmlnZ2VyKQotICAgICwg
bV9hY3Rpb24oYWN0aW9uKQorQ29udGVudEV4dGVuc2lvblJ1bGU6OkNvbnRlbnRFeHRlbnNpb25S
dWxlKFRyaWdnZXImJiB0cmlnZ2VyLCBBY3Rpb24mJiBhY3Rpb24pCisgICAgOiBtX3RyaWdnZXIo
V1RGTW92ZSh0cmlnZ2VyKSkKKyAgICAsIG1fYWN0aW9uKFdURk1vdmUoYWN0aW9uKSkKIHsKICAg
ICBBU1NFUlQoIW1fdHJpZ2dlci51cmxGaWx0ZXIuaXNFbXB0eSgpKTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
blJ1bGUuaAkocmV2aXNpb24gMjEzMjkzKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDcgKzE3
NSw3IEBAIHByaXZhdGU6CiAgICAgCiBjbGFzcyBDb250ZW50RXh0ZW5zaW9uUnVsZSB7CiBwdWJs
aWM6Ci0gICAgQ29udGVudEV4dGVuc2lvblJ1bGUoY29uc3QgVHJpZ2dlciYsIGNvbnN0IEFjdGlv
biYpOworICAgIENvbnRlbnRFeHRlbnNpb25SdWxlKFRyaWdnZXImJiwgQWN0aW9uJiYpOwogCiAg
ICAgY29uc3QgVHJpZ2dlciYgdHJpZ2dlcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJpZ2dlcjsgfQog
ICAgIGNvbnN0IEFjdGlvbiYgYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hY3Rpb247IH0K
</data>
<flag name="review"
          id="324934"
          type_id="1"
          status="+"
          setter="aestes"
    />
          </attachment>
      

    </bug>

</bugzilla>