<?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>207075</bug_id>
          
          <creation_ts>2020-01-31 15:21:40 -0800</creation_ts>
          <short_desc>Audit safe to execute</short_desc>
          <delta_ts>2020-06-05 12:32:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>206805</dependson>
    
    <dependson>207074</dependson>
    
    <dependson>207082</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>guijemont</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1613611</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-31 15:21:40 -0800</bug_when>
    <thetext>For things like:
https://bugs.webkit.org/show_bug.cgi?id=206805

For example, GetButterfly should probably be checking that its base is an object</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1613721</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-01-31 22:36:43 -0800</bug_when>
    <thetext>&lt;rdar://problem/59085094&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658809</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2020-06-03 11:36:14 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #0)
&gt; For things like:
&gt; https://bugs.webkit.org/show_bug.cgi?id=206805
&gt; 
&gt; For example, GetButterfly should probably be checking that its base is an
&gt; object

Isn’t that covered by safeToExecute’s edge processing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658821</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-03 11:52:41 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #2)
&gt; (In reply to Saam Barati from comment #0)
&gt; &gt; For things like:
&gt; &gt; https://bugs.webkit.org/show_bug.cgi?id=206805
&gt; &gt; 
&gt; &gt; For example, GetButterfly should probably be checking that its base is an
&gt; &gt; object
&gt; 
&gt; Isn’t that covered by safeToExecute’s edge processing?

GetButterfly only speculates Cell on its base.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658822</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-03 11:52:53 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #3)
&gt; (In reply to Filip Pizlo from comment #2)
&gt; &gt; (In reply to Saam Barati from comment #0)
&gt; &gt; &gt; For things like:
&gt; &gt; &gt; https://bugs.webkit.org/show_bug.cgi?id=206805
&gt; &gt; &gt; 
&gt; &gt; &gt; For example, GetButterfly should probably be checking that its base is an
&gt; &gt; &gt; object
&gt; &gt; 
&gt; &gt; Isn’t that covered by safeToExecute’s edge processing?
&gt; 
&gt; GetButterfly only speculates Cell on its base.

Probably it should speculate Object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658930</commentid>
    <comment_count>5</comment_count>
      <attachid>400984</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-03 17:14:53 -0700</bug_when>
    <thetext>Created attachment 400984
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659246</commentid>
    <comment_count>6</comment_count>
      <attachid>400984</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-04 12:21:17 -0700</bug_when>
    <thetext>Comment on attachment 400984
patch

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

&gt; Source/JavaScriptCore/tools/JSDollarVM.cpp:1220
&gt; +static const DOMJIT::Signature DOMJITFunctionObjectSignature(DOMJITFunctionObject::functionWithoutTypeCheck, DOMJITFunctionObject::info(), DOMJIT::Effect::forRead(DOMJIT::HeapRange(DOMJIT::HeapRange::ConstExpr, 0, 1)), SpecInt32Only);

we only had one test using this functionality, and it didn&apos;t rely on the old behavior, so I just changed it to this so I didn&apos;t have to create a new class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659330</commentid>
    <comment_count>7</comment_count>
      <attachid>400984</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-06-04 14:35:03 -0700</bug_when>
    <thetext>Comment on attachment 400984
patch

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGSafeToExecute.h:487
&gt; +        bool isSafe = true;
&gt; +        const ClassInfo* classInfo = node-&gt;requiredDOMJITClassInfo();
&gt; +        structures.forEach([&amp;] (RegisteredStructure structure) {
&gt; +            isSafe &amp;= structure-&gt;classInfo()-&gt;isSubClassOf(classInfo);
&gt; +        });
&gt; +        return isSafe;
&gt; +    }

What happens if structure set is empty?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659332</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-04 14:41:27 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #7)
&gt; Comment on attachment 400984 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=400984&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSafeToExecute.h:487
&gt; &gt; +        bool isSafe = true;
&gt; &gt; +        const ClassInfo* classInfo = node-&gt;requiredDOMJITClassInfo();
&gt; &gt; +        structures.forEach([&amp;] (RegisteredStructure structure) {
&gt; &gt; +            isSafe &amp;= structure-&gt;classInfo()-&gt;isSubClassOf(classInfo);
&gt; &gt; +        });
&gt; &gt; +        return isSafe;
&gt; &gt; +    }
&gt; 
&gt; What happens if structure set is empty?

We should never reach such a point in the program, so we can return true or false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659334</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2020-06-04 14:44:26 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #8)
&gt; (In reply to Yusuke Suzuki from comment #7)
&gt; &gt; Comment on attachment 400984 [details]
&gt; &gt; patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=400984&amp;action=review
&gt; &gt; 
&gt; &gt; r=me
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGSafeToExecute.h:487
&gt; &gt; &gt; +        bool isSafe = true;
&gt; &gt; &gt; +        const ClassInfo* classInfo = node-&gt;requiredDOMJITClassInfo();
&gt; &gt; &gt; +        structures.forEach([&amp;] (RegisteredStructure structure) {
&gt; &gt; &gt; +            isSafe &amp;= structure-&gt;classInfo()-&gt;isSubClassOf(classInfo);
&gt; &gt; &gt; +        });
&gt; &gt; &gt; +        return isSafe;
&gt; &gt; &gt; +    }
&gt; &gt; 
&gt; &gt; What happens if structure set is empty?
&gt; 
&gt; We should never reach such a point in the program, so we can return true or
&gt; false.

I think empty set means you have to return false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659336</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2020-06-04 14:45:25 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #4)
&gt; (In reply to Saam Barati from comment #3)
&gt; &gt; (In reply to Filip Pizlo from comment #2)
&gt; &gt; &gt; (In reply to Saam Barati from comment #0)
&gt; &gt; &gt; &gt; For things like:
&gt; &gt; &gt; &gt; https://bugs.webkit.org/show_bug.cgi?id=206805
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; For example, GetButterfly should probably be checking that its base is an
&gt; &gt; &gt; &gt; object
&gt; &gt; &gt; 
&gt; &gt; &gt; Isn’t that covered by safeToExecute’s edge processing?
&gt; &gt; 
&gt; &gt; GetButterfly only speculates Cell on its base.
&gt; 
&gt; Probably it should speculate Object.

Oh interesting. If we said it speculates object then we would really want it to be like KnownObject - so safe to execute if known object, but never actually checks it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659339</commentid>
    <comment_count>11</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-04 14:50:09 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #10)
&gt; (In reply to Saam Barati from comment #4)
&gt; &gt; (In reply to Saam Barati from comment #3)
&gt; &gt; &gt; (In reply to Filip Pizlo from comment #2)
&gt; &gt; &gt; &gt; (In reply to Saam Barati from comment #0)
&gt; &gt; &gt; &gt; &gt; For things like:
&gt; &gt; &gt; &gt; &gt; https://bugs.webkit.org/show_bug.cgi?id=206805
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; For example, GetButterfly should probably be checking that its base is an
&gt; &gt; &gt; &gt; &gt; object
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Isn’t that covered by safeToExecute’s edge processing?
&gt; &gt; &gt; 
&gt; &gt; &gt; GetButterfly only speculates Cell on its base.
&gt; &gt; 
&gt; &gt; Probably it should speculate Object.
&gt; 
&gt; Oh interesting. If we said it speculates object then we would really want it
&gt; to be like KnownObject - so safe to execute if known object, but never
&gt; actually checks it.

Yeah exactly. I fixed this issue a while ago where we only hoist GetButterfly if we prove the base is an object.

KnownObject probably sounds like the better long-term thing since it&apos;s what we really mean anyways</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659348</commentid>
    <comment_count>12</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-04 15:09:53 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #9)
&gt; (In reply to Saam Barati from comment #8)
&gt; &gt; (In reply to Yusuke Suzuki from comment #7)
&gt; &gt; &gt; Comment on attachment 400984 [details]
&gt; &gt; &gt; patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=400984&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; r=me
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGSafeToExecute.h:487
&gt; &gt; &gt; &gt; +        bool isSafe = true;
&gt; &gt; &gt; &gt; +        const ClassInfo* classInfo = node-&gt;requiredDOMJITClassInfo();
&gt; &gt; &gt; &gt; +        structures.forEach([&amp;] (RegisteredStructure structure) {
&gt; &gt; &gt; &gt; +            isSafe &amp;= structure-&gt;classInfo()-&gt;isSubClassOf(classInfo);
&gt; &gt; &gt; &gt; +        });
&gt; &gt; &gt; &gt; +        return isSafe;
&gt; &gt; &gt; &gt; +    }
&gt; &gt; &gt; 
&gt; &gt; &gt; What happens if structure set is empty?
&gt; &gt; 
&gt; &gt; We should never reach such a point in the program, so we can return true or
&gt; &gt; false.
&gt; 
&gt; I think empty set means you have to return false.

Doesn&apos;t the empty set prove we would have exitted?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659737</commentid>
    <comment_count>13</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-06-05 12:32:21 -0700</bug_when>
    <thetext>Committed r262642: &lt;https://trac.webkit.org/changeset/262642&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 400984.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400984</attachid>
            <date>2020-06-03 17:14:53 -0700</date>
            <delta_ts>2020-06-05 12:32:22 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>15286</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjI1MjUpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDIwLTA2LTAzICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIEF1ZGl0IHNhZmUgdG8gZXhlY3V0ZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MDc1CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS81OTA4NTA5ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9saWNtLWRvbS1qaXQuanM6IEFkZGVkLgorICAgICAg
ICAoYXNzZXJ0KToKKyAgICAgICAgKGZvbyk6CisgICAgICAgIChiYXIpOgorCiAyMDIwLTA2LTAz
ICBUYWRldSBaYWdhbGxvICA8dHphZ2FsbG9AYXBwbGUuY29tPgogCiAgICAgICAgIERpc2FibGUg
QjMgaG9pc3RMb29wSW52YXJpYW50VmFsdWVzIGJ5IGRlZmF1bHQKSW5kZXg6IEpTVGVzdHMvbWlj
cm9iZW5jaG1hcmtzL2xpY20tZG9tLWppdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3Jv
YmVuY2htYXJrcy9saWNtLWRvbS1qaXQuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNy
b2JlbmNobWFya3MvbGljbS1kb20taml0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzEg
QEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7IAorICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yOworfQorCitmdW5jdGlvbiBmb28obykgeworICAgIGxldCByID0gMDsKKyAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAgIHIgPSBvLmZ1bmMoKTsKKyAgICB9
CisgICAgcmV0dXJuIHI7Cit9Citub0lubGluZShmb28pOworCitmdW5jdGlvbiBiYXIobykgewor
ICAgIGxldCByID0gMDsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAg
ICAgIHIgPSBvLmN1c3RvbUdldHRlcjsKKyAgICB9CisgICAgcmV0dXJuIHI7Cit9Citub0lubGlu
ZShiYXIpOworCisKK2xldCBvMSA9ICR2bS5jcmVhdGVET01KSVRGdW5jdGlvbk9iamVjdCgpOwor
bGV0IG8yID0gJHZtLmNyZWF0ZURPTUpJVEdldHRlck5vRWZmZWN0c09iamVjdCgpOworCitmb3Ig
KGxldCBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgYXNzZXJ0KGZvbyhvMSkgPT09IDQy
KTsKKyAgICBhc3NlcnQoYmFyKG8yKSA9PT0gNDIpOworfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjI1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMjAtMDYtMDMgIFNhYW0gQmFy
YXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgQXVkaXQgc2FmZSB0byBleGVjdXRl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcwNzUK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU5MDg1MDk0PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYXVkaXQgZm91bmQgb25lIGludGVyZXN0
aW5nIGNhc2UgZm9yIERPTUpJVCBub2Rlcy4gV2UgZW1pdCBzYWZldHkgY2hlY2tzCisgICAgICAg
IGZvciBDYWxsRE9NL0NhbGxET01HZXR0ZXIgaW5zaWRlIGZpeHVwIHBoYXNlIGFuZCB0aGUgYnl0
ZWNvZGUgcGFyc2VyLiBXaGVuCisgICAgICAgIGRldGVybWluaW5nIGlmIHRoZXNlIG5vZGVzIGFy
ZSBzYWZlIHRvIGV4ZWN1dGUsIHdlIG5lZWQgdG8gYWxzbyBlbnN1cmUgdGhhdAorICAgICAgICB0
aGVzZSBjaGVja3MgaG9sZC4KKyAgICAgICAgCisgICAgICAgIEkndmUgYWxzbyBhZGRlZCBhIGhl
bHBlciB0byBKU0RvbGxhclZNIHRvIGVuc3VyZSB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCBicmVh
aworICAgICAgICBMSUNNIG9mIERPTUpJVC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2gg
YWxzbyBtb3ZlcyBzb21lIG5vZGVzIHdlIHdpbGwgbmV2ZXIgaG9pc3QgdG8gcmV0dXJuIGZhbHNl
LgorCisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlRE9NSklUR2V0dGVyKToKKyAgICAgICAgKiBkZmcv
REZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6YXR0ZW1w
dFRvTWFrZUNhbGxET00pOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6Y2xhc3NJbmZvKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpyZXF1aXJl
ZERPTUpJVENsYXNzSW5mbyk6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiB0b29scy9KU0RvbGxh
clZNLmNwcDoKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25DcmVhdGVET01KSVRHZXR0ZXJOb0VmZmVj
dHNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbik6CisK
IDIwMjAtMDYtMDMgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgRGlzYWJsZSBCMyBob2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMgYnkgZGVmYXVsdApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJl
dmlzaW9uIDI2MjQ2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODgzLDYgKzM4ODMsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVET01KSVRHZXR0ZXIoCiAgICAgQ2FsbERPTUdldHRlckRhdGEqIGNh
bGxET01HZXR0ZXJEYXRhID0gbV9ncmFwaC5tX2NhbGxET01HZXR0ZXJEYXRhLmFkZCgpOwogICAg
IGNhbGxET01HZXR0ZXJEYXRhLT5jdXN0b21BY2Nlc3NvckdldHRlciA9IHZhcmlhbnQuY3VzdG9t
QWNjZXNzb3JHZXR0ZXIoKTsKICAgICBBU1NFUlQoY2FsbERPTUdldHRlckRhdGEtPmN1c3RvbUFj
Y2Vzc29yR2V0dGVyKTsKKyAgICBjYWxsRE9NR2V0dGVyRGF0YS0+cmVxdWlyZWRDbGFzc0luZm8g
PSBkb21BdHRyaWJ1dGUtPmNsYXNzSW5mbzsKIAogICAgIGlmIChjb25zdCBhdXRvKiBkb21KSVQg
PSBkb21BdHRyaWJ1dGUtPmRvbUpJVCkgewogICAgICAgICBjYWxsRE9NR2V0dGVyRGF0YS0+ZG9t
SklUID0gZG9tSklUOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCShyZXZpc2lvbiAyNjI0NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDQwLDYgKzQwNDAsNyBAQCBw
cml2YXRlOgogICAgICAgICBub2RlLT5jb252ZXJ0VG9DYWxsRE9NKG1fZ3JhcGgpOwogICAgICAg
ICBmaXh1cENoZWNrSlNDYXN0KGNoZWNrU3ViQ2xhc3MpOwogICAgICAgICBmaXh1cENhbGxET00o
bm9kZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSA9PSB0
aGlzTm9kZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDI2MjQ2NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBACiAj
aW5jbHVkZSAiREZHVHJhbnNpdGlvbi5oIgogI2luY2x1ZGUgIkRGR1VzZUtpbmQuaCIKICNpbmNs
dWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCIKKyNpbmNsdWRlICJET01KSVRTaWduYXR1cmUu
aCIKICNpbmNsdWRlICJEZWxldGVCeUlkVmFyaWFudC5oIgogI2luY2x1ZGUgIkdldEJ5SWRWYXJp
YW50LmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgpAQCAtMjc4LDYgKzI3OSw3IEBAIHN0cnVj
dCBDYWxsRE9NR2V0dGVyRGF0YSB7CiAgICAgY29uc3QgRE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRv
bUpJVCB7IG51bGxwdHIgfTsKICAgICBET01KSVQ6OkNhbGxET01HZXR0ZXJTbmlwcGV0KiBzbmlw
cGV0IHsgbnVsbHB0ciB9OwogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgeyAwIH07Cisg
ICAgY29uc3QgQ2xhc3NJbmZvKiByZXF1aXJlZENsYXNzSW5mbyB7IG51bGxwdHIgfTsKIH07CiAK
IGVudW0gY2xhc3MgQnVja2V0T3duZXJUeXBlIDogdWludDMyX3QgewpAQCAtMjk1MSw2ICsyOTUz
LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKQogICAgIHsK
KyAgICAgICAgQVNTRVJUKGhhc0NsYXNzSW5mbygpKTsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZv
LmFzPGNvbnN0IENsYXNzSW5mbyo+KCk7CiAgICAgfQogCkBAIC0yOTY2LDYgKzI5NjksMTkgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8Y29uc3QgRE9NSklUOjpTaWduYXR1
cmUqPigpOwogICAgIH0KIAorICAgIGNvbnN0IENsYXNzSW5mbyogcmVxdWlyZWRET01KSVRDbGFz
c0luZm8oKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2UgQ2Fs
bERPTUdldHRlcjoKKyAgICAgICAgICAgIHJldHVybiBjYWxsRE9NR2V0dGVyRGF0YSgpLT5yZXF1
aXJlZENsYXNzSW5mbzsKKyAgICAgICAgY2FzZSBDYWxsRE9NOgorICAgICAgICAgICAgcmV0dXJu
IHNpZ25hdHVyZSgpLT5jbGFzc0luZm87CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKwogICAgIGJvb2wgaGFzSW50ZXJuYWxNZXRob2RUeXBlKCkgY29uc3QK
ICAgICB7CiAgICAgICAgIHJldHVybiBvcCgpID09IEhhc0luZGV4ZWRQcm9wZXJ0eTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lv
biAyNjI0NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDggKzE4Myw2IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShB
YnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICAvLyBhbHdheXMgZWZmZWN0ZnVsLCB3ZSByZXR1cm4g
ZmFsc2UgZm9yLCB0byBtYWtlIGF1ZGl0aW5nIHRoZSAicmV0dXJuIHRydWUiIGNhc2VzIGVhc2ll
ci4KIAogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgIC8vIEZJWE1FOiBBdWRpdCB0aGVz
ZToKLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MDc1
CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CiAgICAgY2Fz
ZSBJbnQ1MkNvbnN0YW50OgpAQCAtMjEzLDE0ICsyMTEsMTIgQEAgYm9vbCBzYWZlVG9FeGVjdXRl
KEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgQXJpdGhTdWI6CiAgICAgY2FzZSBBcml0
aE5lZ2F0ZToKICAgICBjYXNlIEFyaXRoTXVsOgotICAgIGNhc2UgQXJpdGhJTXVsOgogICAgIGNh
c2UgQXJpdGhEaXY6CiAgICAgY2FzZSBBcml0aE1vZDoKICAgICBjYXNlIEFyaXRoQWJzOgogICAg
IGNhc2UgQXJpdGhNaW46CiAgICAgY2FzZSBBcml0aE1heDoKICAgICBjYXNlIEFyaXRoUG93Ogot
ICAgIGNhc2UgQXJpdGhSYW5kb206CiAgICAgY2FzZSBBcml0aFNxcnQ6CiAgICAgY2FzZSBBcml0
aEZSb3VuZDoKICAgICBjYXNlIEFyaXRoUm91bmQ6CkBAIC0yMjgsMTIgKzIyNCw5IEBAIGJvb2wg
c2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEFyaXRoQ2VpbDoK
ICAgICBjYXNlIEFyaXRoVHJ1bmM6CiAgICAgY2FzZSBBcml0aFVuYXJ5OgotICAgIGNhc2UgVHJ5
R2V0QnlJZDogLy8gRklYTUU6IEF1ZGl0IHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjM4MzQKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgIGNhc2Ug
Q2hlY2tTdHJ1Y3R1cmVPckVtcHR5OgogICAgIGNhc2UgR2V0RXhlY3V0YWJsZToKLSAgICBjYXNl
IENhbGxET01HZXR0ZXI6Ci0gICAgY2FzZSBDYWxsRE9NOgogICAgIGNhc2UgQ2hlY2tKU0Nhc3Q6
CiAgICAgY2FzZSBDaGVja0FycmF5OgogICAgIGNhc2UgQ2hlY2tBcnJheU9yRW1wdHk6CkBAIC0z
MDMsOCArMjk2LDYgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAog
ICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFs
T3V0T2ZCb3VuZHM6CiAgICAgY2FzZSBHZXRQcm90b3R5cGVPZjoKLSAgICBjYXNlIFN0cmluZ1Jl
cGxhY2U6Ci0gICAgY2FzZSBTdHJpbmdSZXBsYWNlUmVnRXhwOgogICAgIGNhc2UgR2V0UmVnRXhw
T2JqZWN0TGFzdEluZGV4OgogICAgIGNhc2UgTWFwSGFzaDoKICAgICBjYXNlIE5vcm1hbGl6ZU1h
cEtleToKQEAgLTQ4MSw2ICs0NzIsMjAgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3Rh
dGVUeXBlJiBzdAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBjYXNlIENhbGxE
T01HZXR0ZXI6CisgICAgY2FzZSBDYWxsRE9NOiB7CisgICAgICAgIE5vZGUqIHRoaXNOb2RlID0g
bm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBz
dHJ1Y3R1cmVzID0gc3RhdGUuZm9yTm9kZSh0aGlzTm9kZSkubV9zdHJ1Y3R1cmU7CisgICAgICAg
IGlmICghc3RydWN0dXJlcy5pc0Zpbml0ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBib29sIGlzU2FmZSA9IHRydWU7CisgICAgICAgIGNvbnN0IENsYXNzSW5mbyogY2xh
c3NJbmZvID0gbm9kZS0+cmVxdWlyZWRET01KSVRDbGFzc0luZm8oKTsKKyAgICAgICAgc3RydWN0
dXJlcy5mb3JFYWNoKFsmXSAoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKKyAgICAg
ICAgICAgIGlzU2FmZSAmPSBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5pc1N1YkNsYXNzT2YoY2xh
c3NJbmZvKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpc1NhZmU7CisgICAgfQorCiAg
ICAgY2FzZSBUb1RoaXM6CiAgICAgY2FzZSBDcmVhdGVUaGlzOgogICAgIGNhc2UgQ3JlYXRlUHJv
bWlzZToKQEAgLTY2Nyw2ICs2NzIsMTEgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3Rh
dGVUeXBlJiBzdAogICAgIGNhc2UgRGF0YVZpZXdTZXQ6CiAgICAgY2FzZSBTZXRBZGQ6CiAgICAg
Y2FzZSBNYXBTZXQ6CisgICAgY2FzZSBTdHJpbmdSZXBsYWNlUmVnRXhwOgorICAgIGNhc2UgU3Ry
aW5nUmVwbGFjZToKKyAgICBjYXNlIEFyaXRoUmFuZG9tOgorICAgIGNhc2UgQXJpdGhJTXVsOgor
ICAgIGNhc2UgVHJ5R2V0QnlJZDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY2FzZSBJ
bmM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCShy
ZXZpc2lvbiAyNjI0NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJW
TS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzMCw2ICs5MzAsOTkgQEAgdm9pZCBET01KSVRHZXR0
ZXI6OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogICAgIHB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3VzdG9tR2V0dGVyIiksIGN1c3RvbUdldHRl
clNldHRlciwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6
OkN1c3RvbUFjY2Vzc29yKTsKIH0KIAorY2xhc3MgRE9NSklUR2V0dGVyTm9FZmZlY3RzIDogcHVi
bGljIERPTUpJVE5vZGUgeworcHVibGljOgorICAgIERPTUpJVEdldHRlck5vRWZmZWN0cyhWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkK
KyAgICB7CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgfQor
CisgICAgREVDTEFSRV9JTkZPOworICAgIHR5cGVkZWYgRE9NSklUTm9kZSBCYXNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFnczsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAg
ICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlND
OjpKU1R5cGUoTGFzdEpTQ09iamVjdFR5cGUgKyAxKSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OworICAgIH0KKworICAgIHN0YXRpYyBET01KSVRHZXR0ZXJOb0VmZmVjdHMqIGNyZWF0ZShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgRG9sbGFyVk1Bc3NlcnRT
Y29wZSBhc3NlcnRTY29wZTsKKyAgICAgICAgRE9NSklUR2V0dGVyTm9FZmZlY3RzKiBnZXR0ZXIg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxET01KSVRHZXR0ZXJOb0VmZmVjdHM+KHZtLmhl
YXApKSBET01KSVRHZXR0ZXJOb0VmZmVjdHModm0sIHN0cnVjdHVyZSk7CisgICAgICAgIGdldHRl
ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gZ2V0dGVyOworICAgIH0KKwor
ICAgIGNsYXNzIERPTUpJVEF0dHJpYnV0ZSA6IHB1YmxpYyBET01KSVQ6OkdldHRlclNldHRlciB7
CisgICAgcHVibGljOgorICAgICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0ZXhwciBET01KSVRBdHRy
aWJ1dGUoKQorICAgICAgICAgICAgOiBET01KSVQ6OkdldHRlclNldHRlcigKKyAgICAgICAgICAg
ICAgICBET01KSVRHZXR0ZXJOb0VmZmVjdHM6OmN1c3RvbUdldHRlciwKKyNpZiBFTkFCTEUoSklU
KQorICAgICAgICAgICAgICAgICZjYWxsRE9NR2V0dGVyLAorI2Vsc2UKKyAgICAgICAgICAgICAg
ICBudWxscHRyLAorI2VuZGlmCisgICAgICAgICAgICAgICAgU3BlY0ludDMyT25seSkKKyAgICAg
ICAgeworICAgICAgICB9CisKKyNpZiBFTkFCTEUoSklUKQorICAgICAgICBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBzbG93Q2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCB2b2lkKiBwb2ludGVyKQorICAgICAgICB7CisgICAgICAgICAgICBEb2xsYXJWTUFzc2Vy
dFNjb3BlIGFzc2VydFNjb3BlOworICAgICAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJB
TUUodm0pOworICAgICAgICAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bWJlcihzdGF0aWNfY2FzdDxET01KSVRHZXR0ZXJOb0VmZmVjdHMqPihwb2ludGVyKS0+
dmFsdWUoKSkpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIFJlZjxET01KSVQ6OkNhbGxE
T01HZXR0ZXJTbmlwcGV0PiBjYWxsRE9NR2V0dGVyKCkKKyAgICAgICAgeworICAgICAgICAgICAg
RG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICAgICAgICAgIFJlZjxET01KSVQ6
OkNhbGxET01HZXR0ZXJTbmlwcGV0PiBzbmlwcGV0ID0gRE9NSklUOjpDYWxsRE9NR2V0dGVyU25p
cHBldDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBzbmlwcGV0LT5lZmZlY3QgPSBET01KSVQ6OkVm
ZmVjdDo6Zm9yUmVhZChET01KSVQ6OkhlYXBSYW5nZSgxMCwgMTEpKTsKKyAgICAgICAgICAgIHNu
aXBwZXQtPnJlcXVpcmVHbG9iYWxPYmplY3QgPSB0cnVlOworICAgICAgICAgICAgc25pcHBldC0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIFNuaXBwZXRQYXJhbXMmIHBhcmFt
cykgeworICAgICAgICAgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Cisg
ICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0cyA9IHBhcmFtc1swXS5qc1ZhbHVlUmVn
cygpOworICAgICAgICAgICAgICAgIEdQUlJlZyBkb21HUFIgPSBwYXJhbXNbMV0uZ3ByKCk7Cisg
ICAgICAgICAgICAgICAgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHBhcmFtc1syXS5ncHIoKTsK
KyAgICAgICAgICAgICAgICBwYXJhbXMuYWRkU2xvd1BhdGhDYWxsKGppdC5qdW1wKCksIGppdCwg
c2xvd0NhbGwsIHJlc3VsdHMsIGdsb2JhbE9iamVjdEdQUiwgZG9tR1BSKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCgpOworCisgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIHJldHVybiBzbmlwcGV0OworICAgICAgICB9CisjZW5kaWYKKyAgICB9Owor
Citwcml2YXRlOgorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKworICAgIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBjdXN0b21HZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCisgICAgeworICAgICAgICBE
b2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgICAgIERPTUpJVE5vZGUqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWND
YXN0PERPTUpJVE5vZGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgICAg
ICBBU1NFUlQodGhpc09iamVjdCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIodGhpc09iamVjdC0+dmFsdWUoKSkpOworICAgIH0KK307CisKK3N0YXRpYyBjb25zdCBE
T01KSVRHZXR0ZXJOb0VmZmVjdHM6OkRPTUpJVEF0dHJpYnV0ZSBET01KSVRHZXR0ZXJOb0VmZmVj
dHNET01KSVQ7CisKK3ZvaWQgRE9NSklUR2V0dGVyTm9FZmZlY3RzOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgY29uc3QgRE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRv
bUpJVCA9ICZET01KSVRHZXR0ZXJOb0VmZmVjdHNET01KSVQ7CisgICAgYXV0byogY3VzdG9tR2V0
dGVyU2V0dGVyID0gRE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyOjpjcmVhdGUodm0sIGRvbUpJVC0+
Z2V0dGVyKCksIG51bGxwdHIsIERPTUF0dHJpYnV0ZUFubm90YXRpb24geyBET01KSVROb2RlOjpp
bmZvKCksIGRvbUpJVCB9KTsKKyAgICBwdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgImN1c3RvbUdldHRlciIpLCBjdXN0b21HZXR0ZXJTZXR0ZXIs
IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21B
Y2Nlc3Nvcik7Cit9CiAKIGNsYXNzIERPTUpJVEdldHRlckNvbXBsZXggOiBwdWJsaWMgRE9NSklU
Tm9kZSB7CiBwdWJsaWM6CkBAIC0xMTI0LDcgKzEyMTcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCopOwogfTsKIAotc3RhdGljIGNvbnN0
IERPTUpJVDo6U2lnbmF0dXJlIERPTUpJVEZ1bmN0aW9uT2JqZWN0U2lnbmF0dXJlKERPTUpJVEZ1
bmN0aW9uT2JqZWN0OjpmdW5jdGlvbldpdGhvdXRUeXBlQ2hlY2ssIERPTUpJVEZ1bmN0aW9uT2Jq
ZWN0OjppbmZvKCksIERPTUpJVDo6RWZmZWN0Ojpmb3JSZWFkKERPTUpJVDo6SGVhcFJhbmdlOjp0
b3AoKSksIFNwZWNJbnQzMk9ubHkpOworc3RhdGljIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlIERP
TUpJVEZ1bmN0aW9uT2JqZWN0U2lnbmF0dXJlKERPTUpJVEZ1bmN0aW9uT2JqZWN0OjpmdW5jdGlv
bldpdGhvdXRUeXBlQ2hlY2ssIERPTUpJVEZ1bmN0aW9uT2JqZWN0OjppbmZvKCksIERPTUpJVDo6
RWZmZWN0Ojpmb3JSZWFkKERPTUpJVDo6SGVhcFJhbmdlKERPTUpJVDo6SGVhcFJhbmdlOjpDb25z
dEV4cHIsIDAsIDEpKSwgU3BlY0ludDMyT25seSk7CiAKIHZvaWQgRE9NSklURnVuY3Rpb25PYmpl
Y3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
IHsKQEAgLTE0MTgsNiArMTUxMSw3IEBAIGNvbnN0IENsYXNzSW5mbyBET01KSVROb2RlOjpzX2lu
Zm8gPSB7ICIKIGNvbnN0IENsYXNzSW5mbyBET01KSVROb2RlOjpzX2luZm8gPSB7ICJET01KSVRO
b2RlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShET01KSVROb2RlKSB9OwogI2VuZGlmCiBjb25zdCBDbGFzc0luZm8gRE9NSklUR2V0dGVyOjpz
X2luZm8gPSB7ICJET01KSVRHZXR0ZXIiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKERPTUpJVEdldHRlcikgfTsKK2NvbnN0IENsYXNzSW5mbyBE
T01KSVRHZXR0ZXJOb0VmZmVjdHM6OnNfaW5mbyA9IHsgIkRPTUpJVEdldHRlck5vRWZmZWN0cyIs
ICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoRE9N
SklUR2V0dGVyTm9FZmZlY3RzKSB9OwogY29uc3QgQ2xhc3NJbmZvIERPTUpJVEdldHRlckNvbXBs
ZXg6OnNfaW5mbyA9IHsgIkRPTUpJVEdldHRlckNvbXBsZXgiLCAmQmFzZTo6c19pbmZvLCBudWxs
cHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKERPTUpJVEdldHRlckNvbXBsZXgpIH07
CiBjb25zdCBDbGFzc0luZm8gRE9NSklUR2V0dGVyQmFzZUpTT2JqZWN0OjpzX2luZm8gPSB7ICJE
T01KSVRHZXR0ZXJCYXNlSlNPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKERPTUpJVEdldHRlckJhc2VKU09iamVjdCkgfTsKICNpZiBF
TkFCTEUoSklUKQpAQCAtMjMzNyw2ICsyNDMxLDE2IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmMKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9
CiAKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRE9N
SklUR2V0dGVyTm9FZmZlY3RzT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSopCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwor
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gRE9NSklUR2V0dGVyTm9FZmZlY3RzOjpjcmVhdGVT
dHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwganNOdWxsKCkpOworICAgIERPTUpJVEdldHRlck5v
RWZmZWN0cyogcmVzdWx0ID0gRE9NSklUR2V0dGVyTm9FZmZlY3RzOjpjcmVhdGUodm0sIHN0cnVj
dHVyZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCiBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZURPTUpJVEdldHRlckNv
bXBsZXhPYmplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKikKIHsK
ICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwpAQCAtMzA2OCw2ICszMTcyLDcg
QEAgdm9pZCBKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgYWRkRnVuY3Rp
b24odm0sICJjcmVhdGVDdXN0b21HZXR0ZXJPYmplY3QiLCBmdW5jdGlvbkNyZWF0ZUN1c3RvbUdl
dHRlck9iamVjdCwgMCk7CiAgICAgYWRkRnVuY3Rpb24odm0sICJjcmVhdGVET01KSVROb2RlT2Jq
ZWN0IiwgZnVuY3Rpb25DcmVhdGVET01KSVROb2RlT2JqZWN0LCAwKTsKICAgICBhZGRGdW5jdGlv
bih2bSwgImNyZWF0ZURPTUpJVEdldHRlck9iamVjdCIsIGZ1bmN0aW9uQ3JlYXRlRE9NSklUR2V0
dGVyT2JqZWN0LCAwKTsKKyAgICBhZGRGdW5jdGlvbih2bSwgImNyZWF0ZURPTUpJVEdldHRlck5v
RWZmZWN0c09iamVjdCIsIGZ1bmN0aW9uQ3JlYXRlRE9NSklUR2V0dGVyTm9FZmZlY3RzT2JqZWN0
LCAwKTsKICAgICBhZGRGdW5jdGlvbih2bSwgImNyZWF0ZURPTUpJVEdldHRlckNvbXBsZXhPYmpl
Y3QiLCBmdW5jdGlvbkNyZWF0ZURPTUpJVEdldHRlckNvbXBsZXhPYmplY3QsIDApOwogICAgIGFk
ZEZ1bmN0aW9uKHZtLCAiY3JlYXRlRE9NSklURnVuY3Rpb25PYmplY3QiLCBmdW5jdGlvbkNyZWF0
ZURPTUpJVEZ1bmN0aW9uT2JqZWN0LCAwKTsKICAgICBhZGRGdW5jdGlvbih2bSwgImNyZWF0ZURP
TUpJVENoZWNrSlNDYXN0T2JqZWN0IiwgZnVuY3Rpb25DcmVhdGVET01KSVRDaGVja0pTQ2FzdE9i
amVjdCwgMCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>