<?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>58109</bug_id>
          
          <creation_ts>2011-04-07 18:16:31 -0700</creation_ts>
          <short_desc>Some Handle&lt;T&gt; cleanup</short_desc>
          <delta_ts>2011-04-07 23:34:54 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</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="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>381911</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-04-07 18:16:31 -0700</bug_when>
    <thetext>Some Handle&lt;T&gt; cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381920</commentid>
    <comment_count>1</comment_count>
      <attachid>88750</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-04-07 18:30:25 -0700</bug_when>
    <thetext>Created attachment 88750
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381999</commentid>
    <comment_count>2</comment_count>
      <attachid>88750</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2011-04-07 22:06:24 -0700</bug_when>
    <thetext>Comment on attachment 88750
Patch

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

r=me, but see minor comments.

&gt; Source/JavaScriptCore/collector/handles/Global.h:36
&gt; -/*
&gt; -    A Global is a persistent handle whose lifetime is not limited to any given
&gt; -    scope. Use Globals for data members and global variables.
&gt; -*/
&gt; -
&gt; +// A Global is a persistent handle whose lifetime is not limited to any given scope.

This is perhaps beyond the scope of this patch, but it seems a little odd for something named Global to be used for data members.

&gt; Source/JavaScriptCore/collector/handles/Global.h:94
&gt;      void set(JSGlobalData&amp; globalData, ExternalType value)
&gt;      {
&gt; -        if (!value) {
&gt; -            clear();
&gt; -            return;
&gt; -        }
&gt; -        if (!this-&gt;slot())
&gt; -            this-&gt;setSlot(globalData.allocateGlobalHandle());
&gt; -        internalSet(value);
&gt; +        if (!slot())
&gt; +            setSlot(globalData.allocateGlobalHandle());
&gt; +        setWithWriteBarrier(value);
&gt;      }

Looking at this, the distinction between set() and setWithWriteBarrier() seems a little unclear. set() calls setWithWriteBarrier(), so isn&apos;t it equally &quot;with write barrier&quot;? Perhaps there is a better way to draw the distinction between the two functions.

&gt; Source/JavaScriptCore/collector/handles/Local.h:98
&gt; +template &lt;typename T&gt; inline void Local&lt;T&gt;::setWithSlotCheck(ExternalType value)
&gt; +{
&gt; +    ASSERT(slot());
&gt; +    *slot() = value;
&gt; +}

Is the assert here the alluded-to &quot;slot check&quot;?

&gt; Source/JavaScriptCore/runtime/WeakGCPtr.h:37
&gt; +// A smart pointer that becomes 0 when the value it points to is garbage collected.
&gt; +template &lt;typename T&gt; class WeakGCPtr : public Handle&lt;T&gt; {

Maybe it would be appropriate to rename this to WeakHandle or something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382016</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-04-07 23:08:17 -0700</bug_when>
    <thetext>&gt; &gt; -/*
&gt; &gt; -    A Global is a persistent handle whose lifetime is not limited to any given
&gt; &gt; -    scope. Use Globals for data members and global variables.
&gt; &gt; -*/
&gt; &gt; -
&gt; &gt; +// A Global is a persistent handle whose lifetime is not limited to any given scope.
&gt; 
&gt; This is perhaps beyond the scope of this patch, but it seems a little odd for something named Global to be used for data members.

Yeah, a bit odd. I chose the name because it was a good opposite to &quot;Local&lt;T&gt;&quot;, which is local to a given scope. I&apos;m not sure what would be better. Maybe &quot;Root&quot; or &quot;Persistent&quot;?

&gt; Looking at this, the distinction between set() and setWithWriteBarrier() seems a little unclear. set() calls setWithWriteBarrier(), so isn&apos;t it equally &quot;with write barrier&quot;? Perhaps there is a better way to draw the distinction between the two functions.
&gt; 
&gt; &gt; Source/JavaScriptCore/collector/handles/Local.h:98
&gt; &gt; +template &lt;typename T&gt; inline void Local&lt;T&gt;::setWithSlotCheck(ExternalType value)
&gt; &gt; +{
&gt; &gt; +    ASSERT(slot());
&gt; &gt; +    *slot() = value;
&gt; &gt; +}
&gt; 
&gt; Is the assert here the alluded-to &quot;slot check&quot;?

I just renamed both to set.

&gt; &gt; Source/JavaScriptCore/runtime/WeakGCPtr.h:37
&gt; &gt; +// A smart pointer that becomes 0 when the value it points to is garbage collected.
&gt; &gt; +template &lt;typename T&gt; class WeakGCPtr : public Handle&lt;T&gt; {
&gt; 
&gt; Maybe it would be appropriate to rename this to WeakHandle or something?

Yeah, maybe WeakHandle&lt;T&gt;, Weak&lt;T&gt;, or WeakGlobal&lt;T&gt; would be better.  I&apos;ll check with Oliver to see what he thinks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382023</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-04-07 23:34:54 -0700</bug_when>
    <thetext>Committed r83259: &lt;http://trac.webkit.org/changeset/83259&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88750</attachid>
            <date>2011-04-07 18:30:25 -0700</date>
            <delta_ts>2011-04-07 22:06:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58109-20110407183024.patch</filename>
            <type>text/plain</type>
            <size>32274</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODMyMzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODggQEAK
KzIwMTEtMDQtMDcgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTb21lIEhhbmRsZTxUPiBj
bGVhbnVwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
ODEwOQorCisgICAgICAgICogYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmg6IFNvcnRlZCBhbHBoYWJl
dGljYWxseSBiZWNhdXNlIHRoYXQncyB0aGUKKyAgICAgICAgV2ViS2l0IHN0eWxlLiBBZGRlZCBh
IEdsb2JhbC5oICNpbmNsdWRlIHRoYXQgd2FzIHByZXZpb3VzbHkgbWlzc2luZworICAgICAgICBi
dXQgaGFybWxlc3MuCisKKyAgICAgICAgKiBjb2xsZWN0b3IvaGFuZGxlcy9HbG9iYWwuaDoKKyAg
ICAgICAgKEpTQzo6R2xvYmFsOjpHbG9iYWwpOiBBZGRlZCBhIG51bGwgY29uc3RydWN0b3IuIE5v
IG5lZWQgZm9yIGEgc3BlY2lhbAorICAgICAgICB0YWcsIGFuZCB0aGUgdGFnIGlzIGluY29tcGF0
aWJsZSB3aXRoIHNvbWUgZGF0YSBzdHJ1Y3R1cmVzLgorICAgICAgICAKKyAgICAgICAgKEpTQzo6
R2xvYmFsOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6Okdsb2JhbDo6
fkdsb2JhbCk6CisgICAgICAgIChKU0M6Okdsb2JhbDo6c2V0KToKKyAgICAgICAgKEpTQzo6R2xv
YmFsOjpvcGVyYXRvcj0pOgorICAgICAgICAoSlNDOjpHbG9iYWw6OmNsZWFyKToKKyAgICAgICAg
KEpTQzo6R2xvYmFsOjpoYXNoVGFibGVEZWxldGVkVmFsdWUpOiBSZW9yZGVyZWQgY29uc3RydWN0
b3JzIHRvIGJlIG5lYXIKKyAgICAgICAgZWFjaCBvdGhlci4KKworICAgICAgICAoSlNDOjpHbG9i
YWw6OnNldFdpdGhXcml0ZUJhcnJpZXIpOiBSZW5hbWVkIGludGVybmFsU2V0IHRvCisgICAgICAg
IHNldFdpdGhXcml0ZUJhcnJpZXIgZm9yIGNsYXJpdHksIGFuZCBmdW5uZWxlZCBtb3JlIGNvZGUg
aW50byB1c2luZyBzZXQKKyAgICAgICAgYW5kIHNldFdpdGhXcml0ZUJhcnJpZXIgdG8gcmVkdWNl
IGR1cGxpY2F0aW9uLgorCisgICAgICAgICogY29sbGVjdG9yL2hhbmRsZXMvSGFuZGxlLmg6Cisg
ICAgICAgIChKU0M6OkhhbmRsZUJhc2U6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkhhbmRs
ZUJhc2U6OkhhbmRsZUJhc2UpOiBSZW1vdmVkIGlzRW1wdHkoKSwgc2luY2Ugd2UgYWxyZWFkeSBo
YXZlCisgICAgICAgIGJvb2xlYW4gYW5kICEgb3BlcmF0b3JzLgorCisgICAgICAgIChKU0M6Okhh
bmRsZUJhc2U6OnNsb3QpOgorICAgICAgICAoSlNDOjpIYW5kbGVCYXNlOjpzZXRTbG90KToKKyAg
ICAgICAgKEpTQzo6SGFuZGxlOjpIYW5kbGUpOiBBZGRlZCBnZW5lcmFsIHN1cHBvcnQgZm9yIG51
bGwgSGFuZGxlcy4gVGhpcyB3YXMKKyAgICAgICAgcHJldmlvdXNseSBvdXRsYXdlZCBieSBBU1NF
UlRzLCBidXQgb3VyIGNvZGUgaGFzIGdyb3duIHRvIHN1cHBvcnQgYW5kCisgICAgICAgIHJlbHkg
b24gbnVsbCBIYW5kbGVzLgorICAgICAgICAKKyAgICAgICAgKiBjb2xsZWN0b3IvaGFuZGxlcy9I
YW5kbGVIZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGFuZGxlSGVhcDo6bWFya1dlYWtIYW5kbGVz
KToKKyAgICAgICAgKEpTQzo6SGFuZGxlSGVhcDo6ZmluYWxpemVXZWFrSGFuZGxlcyk6CisgICAg
ICAgIChKU0M6OkhhbmRsZUhlYXA6OmlzVmFsaWRXZWFrTm9kZSk6IE1pZ3JhdGVkIGZyb20gaXNW
YWxpZFdlYWtIYW5kbGUsCisgICAgICAgIGFuZCBiZWVmZWQgdGhpcyB1cCBhIGJpdC4KKworICAg
ICAgICAqIGNvbGxlY3Rvci9oYW5kbGVzL0hhbmRsZUhlYXAuaDoKKyAgICAgICAgKEpTQzo6SGFu
ZGxlSGVhcDo6Z2xvYmFsRGF0YSk6IEFkZGVkIGFjY2Vzc29yLCB1c2VkIGJ5IHNvbWUgbmV3IHNl
dCBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBjb2xsZWN0b3IvaGFuZGxlcy9Mb2NhbC5oOiBNb3Zl
ZCBoYXNoIHRyYWl0cyB0byB0aGUgYm90dG9tIG9mIHRoZSBmaWxlLAorICAgICAgICBzaW5jZSB0
aGlzIGZpbGUgaXMgYWJvdXQgdGhlIExvY2FsIGNsYXNzLCBub3QgdGhlIHRyYWl0cy4KKworICAg
ICAgICAoSlNDOjo6OkxvY2FsKTogVXBkYXRlZCBmb3IgcmVtb3ZhbCBvZiBpbnZhbGlkYXRlKCku
CisKKyAgICAgICAgKEpTQzo6OjpvcGVyYXRvcik6IERlcGxveWVkICJ1c2luZyIgdG8gYXZvaWQg
YSBsb3Qgb2YgdGhpcy0+CisgICAgICAgIHRlbXBsYXRlIGZ1bm55IGJ1c2luZXNzLgorCisgICAg
ICAgIChKU0M6Ojo6c2V0V2l0aFNsb3RDaGVjayk6IFJlbmFtZWQgZnJvbSBpbnRlcm5hbFNldCwg
bW9yZSBzcGVjaWZpYyBub3cuCisKKyAgICAgICAgKiBpbnRlcnByZXRlci9SZWdpc3RlckZpbGUu
aDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJGaWxlOjpSZWdpc3RlckZpbGUpOiBVcGRhdGVkIHRv
IHVzZSBudWxsIGNvbnN0cnVjdG9yLgorCisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKToKKworICAgICAgICAqIHJ1
bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OnNldEVudW1lcmF0aW9uQ2FjaGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6IFJl
bW92ZWQgY2xlYXJFbnVtZXJhdGlvbkNhY2hlCisgICAgICAgIGJlY2F1c2UgaXQgd2FzIGFuIHVu
dXNlZCBob2xkb3ZlciBmcm9tIHdoZW4gdGhlIGVudW1lcmF0aW9uIGNhY2hlIHdhcworICAgICAg
ICBub3QgYSBoYW5kbGUuCisKKyAgICAgICAgKiBydW50aW1lL1dlYWtHQ01hcC5oOgorICAgICAg
ICAoSlNDOjpXZWFrR0NNYXA6OnNldCk6IEZpbmlzaCBpbml0aWFsaXppbmcgb3VyIGhhbmRsZSBi
ZWZvcmUgcHV0dGluZyBpdAorICAgICAgICBpbiB0aGUgdGFibGUuIFRoaXMgc2VlbWVkIG1vcmUg
bG9naWNhbCwgYW5kIGF0IG9uZSBwb2ludCB3YXMgcmVxdWlyZWQKKyAgICAgICAgdG8gYXZvaWQg
dHJpZ2dlcmluZyBhbiBBU1NFUlQuCisKKyAgICAgICAgKiBydW50aW1lL1dlYWtHQ1B0ci5oOiBJ
bmhlcml0IGZyb20gSGFuZGxlIGluc3RlYWQgb2Ygcm9sbGluZyBvdXIgb3duCisgICAgICAgIGhh
bmRsZS1saWtlIGJlaGF2aW9yLCB0byBhdm9pZCBkdXBsaWNhdGlvbi4KKworICAgICAgICAoSlND
OjpXZWFrR0NQdHI6OldlYWtHQ1B0cik6CisgICAgICAgIChKU0M6OldlYWtHQ1B0cjo6fldlYWtH
Q1B0cik6CisgICAgICAgIChKU0M6OldlYWtHQ1B0cjo6Z2V0KToKKyAgICAgICAgKEpTQzo6V2Vh
a0dDUHRyOjpjbGVhcik6CisgICAgICAgIChKU0M6OldlYWtHQ1B0cjo6c2V0KToKKyAgICAgICAg
KEpTQzo6V2Vha0dDUHRyOjpzZXRXaXRoV3JpdGVCYXJyaWVyKTogUmVtb3ZlZCBkdXBsaWNhdGUg
Y29kZSBhbmQKKyAgICAgICAgc3RhbmRhcmRpemVkIG9uIEhhbmRsZSBpZGlvbXMuCisKIDIwMTEt
MDQtMDcgIFpvbHRhbiBIZXJjemVnICA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBHYXZpbiBCYXJyYWNsb3VnaC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmgJKHJldmlzaW9uIDgzMjE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSwxMyArMjksMTMgQEAKICNpZm5kZWYgU2FtcGxpbmdUb29sX2gKICNkZWZpbmUgU2FtcGxp
bmdUb29sX2gKIAorI2luY2x1ZGUgIkdsb2JhbC5oIgorI2luY2x1ZGUgIk5vZGVzLmgiCisjaW5j
bHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAotI2luY2x1ZGUgIk5v
ZGVzLmgiCi0jaW5jbHVkZSAiT3Bjb2RlLmgiCi0KIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xh
c3MgU2NyaXB0RXhlY3V0YWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb2xsZWN0
b3IvaGFuZGxlcy9HbG9iYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Y29sbGVjdG9yL2hhbmRsZXMvR2xvYmFsLmgJKHJldmlzaW9uIDgzMjE0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2NvbGxlY3Rvci9oYW5kbGVzL0dsb2JhbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMywxMTQgKzMzLDEwNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotLyoKLSAgICBBIEdsb2Jh
bCBpcyBhIHBlcnNpc3RlbnQgaGFuZGxlIHdob3NlIGxpZmV0aW1lIGlzIG5vdCBsaW1pdGVkIHRv
IGFueSBnaXZlbgotICAgIHNjb3BlLiBVc2UgR2xvYmFscyBmb3IgZGF0YSBtZW1iZXJzIGFuZCBn
bG9iYWwgdmFyaWFibGVzLgotKi8KLQorLy8gQSBHbG9iYWwgaXMgYSBwZXJzaXN0ZW50IGhhbmRs
ZSB3aG9zZSBsaWZldGltZSBpcyBub3QgbGltaXRlZCB0byBhbnkgZ2l2ZW4gc2NvcGUuCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgR2xvYmFsIDogcHVibGljIEhhbmRsZTxUPiB7CisgICAg
dXNpbmcgSGFuZGxlPFQ+OjpzbG90OworICAgIHVzaW5nIEhhbmRsZTxUPjo6c2V0U2xvdDsKKwog
cHVibGljOgogICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFuZGxlPFQ+OjpFeHRlcm5hbFR5cGUgRXh0
ZXJuYWxUeXBlOwotICAgIEdsb2JhbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEV4dGVybmFs
VHlwZSBwdHIgPSBFeHRlcm5hbFR5cGUoKSkKKyAgICAKKyAgICBHbG9iYWwoKQorICAgICAgICA6
IEhhbmRsZTxUPigpCisgICAgeworICAgIH0KKyAgICAKKyAgICBHbG9iYWwoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBFeHRlcm5hbFR5cGUgdmFsdWUgPSBFeHRlcm5hbFR5cGUoKSkKICAgICAg
ICAgOiBIYW5kbGU8VD4oZ2xvYmFsRGF0YS5hbGxvY2F0ZUdsb2JhbEhhbmRsZSgpKQogICAgIHsK
LSAgICAgICAgaW50ZXJuYWxTZXQocHRyKTsKKyAgICAgICAgc2V0V2l0aFdyaXRlQmFycmllcih2
YWx1ZSk7CiAgICAgfQogCiAgICAgR2xvYmFsKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSGFu
ZGxlPFQ+IGhhbmRsZSkKICAgICAgICAgOiBIYW5kbGU8VD4oZ2xvYmFsRGF0YS5hbGxvY2F0ZUds
b2JhbEhhbmRsZSgpKQogICAgIHsKLSAgICAgICAgaW50ZXJuYWxTZXQoaGFuZGxlLmdldCgpKTsK
KyAgICAgICAgc2V0V2l0aFdyaXRlQmFycmllcihoYW5kbGUuZ2V0KCkpOworICAgIH0KKyAgICAK
KyAgICBHbG9iYWwoY29uc3QgR2xvYmFsJiBvdGhlcikKKyAgICAgICAgOiBIYW5kbGU8VD4ob3Ro
ZXIuc2xvdCgpID8gSGFuZGxlSGVhcDo6aGVhcEZvcihvdGhlci5zbG90KCkpLT5hbGxvY2F0ZSgp
IDogMCkKKyAgICB7CisgICAgICAgIGlmICghb3RoZXIuc2xvdCgpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBzZXRXaXRoV3JpdGVCYXJyaWVyKG90aGVyLmdldCgpKTsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gR2xvYmFsKGNvbnN0IEdsb2JhbDxVPiYgb3RoZXIp
CisgICAgICAgIDogSGFuZGxlPFQ+KG90aGVyLnNsb3QoKSA/IEhhbmRsZUhlYXA6OmhlYXBGb3Io
b3RoZXIuc2xvdCgpKS0+YWxsb2NhdGUoKSA6IDApCisgICAgeworICAgICAgICBpZiAoIW90aGVy
LnNsb3QoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc2V0V2l0aFdyaXRlQmFycmll
cihvdGhlci5nZXQoKSk7CiAgICAgfQogICAgIAotICAgIGVudW0gRW1wdHlWYWx1ZVRhZyB7IEVt
cHR5VmFsdWUgfTsKLSAgICBHbG9iYWwoRW1wdHlWYWx1ZVRhZykKLSAgICAgICAgOiBIYW5kbGU8
VD4oMCwgSGFuZGxlQmFzZTo6RG9udE51bGxDaGVja1Nsb3QpCisgICAgZW51bSBIYXNoVGFibGVE
ZWxldGVkVmFsdWVUYWcgeyBIYXNoVGFibGVEZWxldGVkVmFsdWUgfTsKKyAgICBib29sIGlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gc2xvdCgpID09IGhhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpOyB9CisgICAgR2xvYmFsKEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVRhZykKKyAg
ICAgICAgOiBIYW5kbGU8VD4oaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpCiAgICAgewogICAgIH0K
IAogICAgIH5HbG9iYWwoKQogICAgIHsKLSAgICAgICAgSGFuZGxlU2xvdCBzbG90ID0gdGhpcy0+
c2xvdCgpOwotICAgICAgICBpZiAoc2xvdCkKLSAgICAgICAgICAgIEhhbmRsZUhlYXA6OmhlYXBG
b3Ioc2xvdCktPmRlYWxsb2NhdGUoc2xvdCk7CisgICAgICAgIGNsZWFyKCk7CiAgICAgfQogCiAg
ICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBFeHRlcm5hbFR5cGUgdmFsdWUp
CiAgICAgewotICAgICAgICBpZiAoIXZhbHVlKSB7Ci0gICAgICAgICAgICBjbGVhcigpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmICghdGhpcy0+c2xvdCgpKQot
ICAgICAgICAgICAgdGhpcy0+c2V0U2xvdChnbG9iYWxEYXRhLmFsbG9jYXRlR2xvYmFsSGFuZGxl
KCkpOwotICAgICAgICBpbnRlcm5hbFNldCh2YWx1ZSk7CisgICAgICAgIGlmICghc2xvdCgpKQor
ICAgICAgICAgICAgc2V0U2xvdChnbG9iYWxEYXRhLmFsbG9jYXRlR2xvYmFsSGFuZGxlKCkpOwor
ICAgICAgICBzZXRXaXRoV3JpdGVCYXJyaWVyKHZhbHVlKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVT4gR2xvYmFsJiBvcGVyYXRvcj0oY29uc3QgR2xvYmFsPFU+JiBoYW5kbGUp
Ci0gICAgewotICAgICAgICBpZiAoaGFuZGxlLnNsb3QoKSkgewotICAgICAgICAgICAgaWYgKCF0
aGlzLT5zbG90KCkpCi0gICAgICAgICAgICAgICAgdGhpcy0+c2V0U2xvdChIYW5kbGVIZWFwOjpo
ZWFwRm9yKGhhbmRsZS5zbG90KCkpLT5hbGxvY2F0ZSgpKTsKLSAgICAgICAgICAgIGludGVybmFs
U2V0KGhhbmRsZS5nZXQoKSk7Ci0gICAgICAgIH0gZWxzZQorICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBVPiBHbG9iYWwmIG9wZXJhdG9yPShjb25zdCBHbG9iYWw8VT4mIG90aGVyKQorICAgIHsKKyAg
ICAgICAgaWYgKCFvdGhlci5zbG90KCkpIHsKICAgICAgICAgICAgIGNsZWFyKCk7Ci0gICAgICAg
IAorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgc2V0KCpI
YW5kbGVIZWFwOjpoZWFwRm9yKG90aGVyLnNsb3QoKSktPmdsb2JhbERhdGEoKSwgb3RoZXIuZ2V0
KCkpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogICAgIAotICAgIEdsb2JhbCYgb3Bl
cmF0b3I9KGNvbnN0IEdsb2JhbCYgaGFuZGxlKQorICAgIEdsb2JhbCYgb3BlcmF0b3I9KGNvbnN0
IEdsb2JhbCYgb3RoZXIpCiAgICAgewotICAgICAgICBpZiAoaGFuZGxlLnNsb3QoKSkgewotICAg
ICAgICAgICAgaWYgKCF0aGlzLT5zbG90KCkpCi0gICAgICAgICAgICAgICAgdGhpcy0+c2V0U2xv
dChIYW5kbGVIZWFwOjpoZWFwRm9yKGhhbmRsZS5zbG90KCkpLT5hbGxvY2F0ZSgpKTsKLSAgICAg
ICAgICAgIGludGVybmFsU2V0KGhhbmRsZS5nZXQoKSk7Ci0gICAgICAgIH0gZWxzZQorICAgICAg
ICBpZiAoIW90aGVyLnNsb3QoKSkgewogICAgICAgICAgICAgY2xlYXIoKTsKLSAgICAgICAgCisg
ICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBzZXQoKkhhbmRs
ZUhlYXA6OmhlYXBGb3Iob3RoZXIuc2xvdCgpKS0+Z2xvYmFsRGF0YSgpLCBvdGhlci5nZXQoKSk7
CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKICAgICB2b2lkIGNsZWFyKCkKICAgICB7
Ci0gICAgICAgIGlmICh0aGlzLT5zbG90KCkpCi0gICAgICAgICAgICBpbnRlcm5hbFNldChFeHRl
cm5hbFR5cGUoKSk7CisgICAgICAgIGlmICghc2xvdCgpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QoKSktPmRlYWxsb2NhdGUoc2xvdCgpKTsK
KyAgICAgICAgc2V0U2xvdCgwKTsKICAgICB9CiAKLSAgICBlbnVtIEhhc2hUYWJsZURlbGV0ZWRW
YWx1ZVR5cGUgeyBIYXNoVGFibGVEZWxldGVkVmFsdWUgfTsKLSAgICBjb25zdCBzdGF0aWMgaW50
cHRyX3QgSGFzaFRhYmxlRGVsZXRlZFZhbHVlVGFnID0gMHgxOwotICAgIEdsb2JhbChIYXNoVGFi
bGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IEhhbmRsZTxUPihyZWludGVycHJldF9jYXN0
PEhhbmRsZVNsb3Q+KEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVRhZykpCi0gICAgewotICAgIH0KLSAg
ICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gc2xvdCgpID09
IHJlaW50ZXJwcmV0X2Nhc3Q8SGFuZGxlU2xvdD4oSGFzaFRhYmxlRGVsZXRlZFZhbHVlVGFnKTsg
fQorcHJpdmF0ZToKKyAgICBzdGF0aWMgSGFuZGxlU2xvdCBoYXNoVGFibGVEZWxldGVkVmFsdWUo
KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PEhhbmRsZVNsb3Q+KC0xKTsgfQogCi0gICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFU+IEdsb2JhbChjb25zdCBHbG9iYWw8VT4mIG90aGVyKQotICAgICAg
ICA6IEhhbmRsZTxUPihvdGhlci5zbG90KCkgPyBIYW5kbGVIZWFwOjpoZWFwRm9yKG90aGVyLnNs
b3QoKSktPmFsbG9jYXRlKCkgOiAwLCBIYW5kbGU8VD46OkRvbnROdWxsQ2hlY2tTbG90KQorICAg
IHZvaWQgc2V0V2l0aFdyaXRlQmFycmllcihFeHRlcm5hbFR5cGUgZXh0ZXJuYWxUeXBlKQogICAg
IHsKLSAgICAgICAgaWYgKG90aGVyLnNsb3QoKSkKLSAgICAgICAgICAgIGludGVybmFsU2V0KG90
aGVyLmdldCgpKTsKKyAgICAgICAgQVNTRVJUKHNsb3QoKSk7CisgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBIYW5kbGVUeXBlczxUPjo6dG9KU1ZhbHVlKGV4dGVybmFsVHlwZSk7CisgICAgICAgIEhh
bmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+d3JpdGVCYXJyaWVyKHNsb3QoKSwgdmFsdWUpOwor
ICAgICAgICAqc2xvdCgpID0gdmFsdWU7CiAgICAgfQotICAgIAotICAgIEdsb2JhbChjb25zdCBH
bG9iYWwmIG90aGVyKQotICAgICAgICA6IEhhbmRsZTxUPihvdGhlci5zbG90KCkgPyBIYW5kbGVI
ZWFwOjpoZWFwRm9yKG90aGVyLnNsb3QoKSktPmFsbG9jYXRlKCkgOiAwLCBIYW5kbGU8VD46OkRv
bnROdWxsQ2hlY2tTbG90KQotICAgIHsKLSAgICAgICAgaWYgKG90aGVyLnNsb3QoKSkKLSAgICAg
ICAgICAgIGludGVybmFsU2V0KG90aGVyLmdldCgpKTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAg
ICB2b2lkIGludGVybmFsU2V0KEV4dGVybmFsVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpT
VmFsdWUgbmV3VmFsdWUoSGFuZGxlVHlwZXM8VD46OnRvSlNWYWx1ZSh2YWx1ZSkpOwotICAgICAg
ICBIYW5kbGVTbG90IHNsb3QgPSB0aGlzLT5zbG90KCk7Ci0gICAgICAgIEFTU0VSVChzbG90KTsK
LSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KS0+d3JpdGVCYXJyaWVyKHNsb3QsIG5l
d1ZhbHVlKTsKLSAgICAgICAgKnNsb3QgPSBuZXdWYWx1ZTsKLSAgICB9Ci0KLSAgICB1c2luZyBI
YW5kbGU8VD46OnNsb3Q7Ci0gICAgCiB9OwogCiB9CkBAIC0xNDksNyArMTQxLDcgQEAgbmFtZXNw
YWNlIFdURiB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFA+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6
R2xvYmFsPFA+ID4gOiBHZW5lcmljSGFzaFRyYWl0czxKU0M6Okdsb2JhbDxQPiA+IHsKICAgICBz
dGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKLSAgICBzdGF0aWMgSlND
OjpHbG9iYWw8UD4gZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIEpTQzo6R2xvYmFsPFA+KEpTQzo6R2xv
YmFsPFA+OjpFbXB0eVZhbHVlKTsgfQorICAgIHN0YXRpYyBKU0M6Okdsb2JhbDxQPiBlbXB0eVZh
bHVlKCkgeyByZXR1cm4gSlNDOjpHbG9iYWw8UD4oKTsgfQogICAgIHN0YXRpYyB2b2lkIGNvbnN0
cnVjdERlbGV0ZWRWYWx1ZShKU0M6Okdsb2JhbDxQPiYgc2xvdCkgeyBuZXcgKCZzbG90KSBKU0M6
Okdsb2JhbDxQPihKU0M6Okdsb2JhbDxQPjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsgfQogICAg
IHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IEpTQzo6R2xvYmFsPFA+JiB2YWx1ZSkg
eyByZXR1cm4gdmFsdWUuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQogfTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9jb2xsZWN0b3IvaGFuZGxlcy9IYW5kbGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvY29sbGVjdG9yL2hhbmRsZXMvSGFuZGxlLmgJKHJl
dmlzaW9uIDgzMjE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbGxlY3Rvci9oYW5kbGVz
L0hhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwzOSArNDksMjEgQEAgY2xhc3MgSGFuZGxl
QmFzZSB7CiAgICAgZnJpZW5kIGNsYXNzIEhhbmRsZUhlYXA7CiAKIHB1YmxpYzoKLSAgICBib29s
IG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIGlzRW1wdHkoKTsgfQorICAgIGJvb2wgb3BlcmF0
b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fc2xvdCB8fCAhKm1fc2xvdDsgfQogCiAgICAgLy8gVGhp
cyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGJvb2wg
YnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgogICAgIHR5cGVkZWYgSlNWYWx1ZSAoSGFu
ZGxlQmFzZTo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOwogICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVk
Qm9vbFR5cGUqKCkgY29uc3QgeyByZXR1cm4gKG1fc2xvdCAmJiAqbV9zbG90KSA/IHJlaW50ZXJw
cmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KDEpIDogMDsgfQogCi0gICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gIW1fc2xvdCB8fCAhKm1fc2xvdDsgfQotCiBwcm90ZWN0ZWQ6
CiAgICAgSGFuZGxlQmFzZShIYW5kbGVTbG90IHNsb3QpCiAgICAgICAgIDogbV9zbG90KHNsb3Qp
CiAgICAgewotICAgICAgICBBU1NFUlQoc2xvdCk7CiAgICAgfQogCi0gICAgZW51bSBEb250TnVs
bENoZWNrU2xvdFRhZyB7IERvbnROdWxsQ2hlY2tTbG90IH07Ci0gICAgSGFuZGxlQmFzZShIYW5k
bGVTbG90IHNsb3QsIERvbnROdWxsQ2hlY2tTbG90VGFnKQotICAgICAgICA6IG1fc2xvdChzbG90
KQotICAgIHsKLSAgICB9Ci0gICAgCiAgICAgSGFuZGxlU2xvdCBzbG90KCkgY29uc3QgeyByZXR1
cm4gbV9zbG90OyB9Ci0gICAgdm9pZCBpbnZhbGlkYXRlKCkKLSAgICB7Ci0gICAgICAgIC8vIEl0
IGlzIHVuc2FmZSB0byB1c2UgYSBoYW5kbGUgYWZ0ZXIgaW52YWxpZGF0aW5nIGl0LgotICAgICAg
ICBtX3Nsb3QgPSAwOwotICAgIH0KLQotICAgIC8vIG5lZWRlZCBieSBHbG9iYWw8Pjo6b3BlcmF0
b3I9IGFuZCBHbG9iYWw8Pjo6c2V0IGlmIGl0J3MgYW4gZW1wdHkgaGFuZGxlCiAgICAgdm9pZCBz
ZXRTbG90KEhhbmRsZVNsb3Qgc2xvdCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9zbG90KTsK
LSAgICAgICAgQVNTRVJUKHNsb3QpOwogICAgICAgICBtX3Nsb3QgPSBzbG90OwogICAgIH0KIApA
QCAtMTY1LDE1ICsxNDcsMTAgQEAgcHVibGljOgogICAgIEV4dGVybmFsVHlwZSBnZXQoKSBjb25z
dCB7IHJldHVybiBIYW5kbGVUeXBlczxUPjo6Z2V0RnJvbVNsb3QodGhpcy0+c2xvdCgpKTsgfQog
CiBwcm90ZWN0ZWQ6Ci0KLSAgICBIYW5kbGUoSGFuZGxlU2xvdCBzbG90KQorICAgIEhhbmRsZShI
YW5kbGVTbG90IHNsb3QgPSAwKQogICAgICAgICA6IEhhbmRsZUJhc2Uoc2xvdCkKICAgICB7CiAg
ICAgfQotICAgIEhhbmRsZShIYW5kbGVTbG90IHNsb3QsIEhhbmRsZUJhc2U6OkRvbnROdWxsQ2hl
Y2tTbG90VGFnKQotICAgICAgICA6IEhhbmRsZUJhc2Uoc2xvdCwgSGFuZGxlQmFzZTo6RG9udE51
bGxDaGVja1Nsb3QpCi0gICAgewotICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIEhhbmRsZUhlYXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvY29sbGVjdG9yL2hh
bmRsZXMvSGFuZGxlSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2NvbGxlY3Rvci9oYW5kbGVzL0hhbmRsZUhlYXAuY3BwCShyZXZpc2lvbiA4MzIxNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9jb2xsZWN0b3IvaGFuZGxlcy9IYW5kbGVIZWFwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsMjYgKzMwLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSNpZiAh
QVNTRVJUX0RJU0FCTEVECi1zdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZFdlYWtIYW5kbGUoSGFu
ZGxlU2xvdCBoYW5kbGUpCi17Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9ICpoYW5kbGU7Ci0gICAgaWYg
KCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwotICAgIGlmICghY2VsbCB8fCAhY2VsbC0+
c3RydWN0dXJlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lmIEVOQUJMRShKU0NfWk9N
QklFUykKLSAgICBpZiAoY2VsbC0+aXNab21iaWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
I2VuZGlmCi0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgotCiBXZWFrSGFuZGxlT3duZXI6
On5XZWFrSGFuZGxlT3duZXIoKQogewogfQpAQCAtOTcsNyArNzcsNyBAQCB2b2lkIEhhbmRsZUhl
YXA6Om1hcmtXZWFrSGFuZGxlcyhIZWFwUm9vCiAKICAgICAgICAgTm9kZSogZW5kID0gbV93ZWFr
TGlzdC5lbmQoKTsKICAgICAgICAgZm9yIChOb2RlKiBub2RlID0gbV93ZWFrTGlzdC5iZWdpbigp
OyBub2RlICE9IGVuZDsgbm9kZSA9IG5vZGUtPm5leHQoKSkgewotICAgICAgICAgICAgQVNTRVJU
KGlzVmFsaWRXZWFrSGFuZGxlKG5vZGUtPnNsb3QoKSkpOworICAgICAgICAgICAgQVNTRVJUKGlz
VmFsaWRXZWFrTm9kZShub2RlKSk7CiAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBub2RlLT5z
bG90KCktPmFzQ2VsbCgpOwogICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGNlbGwpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTIwLDcgKzEwMCw3IEBAIHZvaWQgSGFuZGxl
SGVhcDo6ZmluYWxpemVXZWFrSGFuZGxlcygpCiAgICAgZm9yIChOb2RlKiBub2RlID0gbV93ZWFr
TGlzdC5iZWdpbigpOyBub2RlICE9IGVuZDsgbm9kZSA9IG1fbmV4dFRvRmluYWxpemUpIHsKICAg
ICAgICAgbV9uZXh0VG9GaW5hbGl6ZSA9IG5vZGUtPm5leHQoKTsKIAotICAgICAgICBBU1NFUlQo
aXNWYWxpZFdlYWtIYW5kbGUobm9kZS0+c2xvdCgpKSk7CisgICAgICAgIEFTU0VSVChpc1ZhbGlk
V2Vha05vZGUobm9kZSkpOwogICAgICAgICBKU0NlbGwqIGNlbGwgPSBub2RlLT5zbG90KCktPmFz
Q2VsbCgpOwogICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoY2VsbCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKQEAgLTE3Myw0ICsxNTMsMjcgQEAgdW5zaWduZWQgSGFuZGxlSGVhcDo6cHJvdGVj
dGVkR2xvYmFsT2JqZQogICAgIHJldHVybiBjb3VudDsKIH0KIAorI2lmICFBU1NFUlRfRElTQUJM
RUQKK2Jvb2wgSGFuZGxlSGVhcDo6aXNWYWxpZFdlYWtOb2RlKE5vZGUqIG5vZGUpCit7CisgICAg
aWYgKCFub2RlLT5pc1dlYWsoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSlNWYWx1
ZSB2YWx1ZSA9ICpub2RlLT5zbG90KCk7CisgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxs
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFz
Q2VsbCgpOworICAgIGlmICghY2VsbCB8fCAhY2VsbC0+c3RydWN0dXJlKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworI2lmIEVOQUJMRShKU0NfWk9NQklFUykKKyAgICBpZiAoY2VsbC0+aXNa
b21iaWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9jb2xsZWN0b3IvaGFuZGxlcy9IYW5kbGVIZWFwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2NvbGxlY3Rvci9oYW5kbGVzL0hhbmRsZUhlYXAuaAkocmV2aXNp
b24gODMyMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvY29sbGVjdG9yL2hhbmRsZXMvSGFu
ZGxlSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw4IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgSGFuZGxlSGVhcCogaGVhcEZvcihIYW5kbGVTbG90KTsKIAogICAgIEhhbmRsZUhlYXAo
SlNHbG9iYWxEYXRhKik7CisgICAgCisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCk7CiAK
ICAgICBIYW5kbGVTbG90IGFsbG9jYXRlKCk7CiAgICAgdm9pZCBkZWFsbG9jYXRlKEhhbmRsZVNs
b3QpOwpAQCAtMTA1LDYgKzEwNywxMCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBOb2RlKiB0b05v
ZGUoSGFuZGxlU2xvdCk7CiAKICAgICB2b2lkIGdyb3coKTsKKyAgICAKKyNpZiAhQVNTRVJUX0RJ
U0FCTEVECisgICAgYm9vbCBpc1ZhbGlkV2Vha05vZGUoTm9kZSopOworI2VuZGlmCiAKICAgICBK
U0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKICAgICBCbG9ja1N0YWNrPE5vZGU+IG1fYmxvY2tT
dGFjazsKQEAgLTEyMSw2ICsxMjcsMTEgQEAgaW5saW5lIEhhbmRsZUhlYXAqIEhhbmRsZUhlYXA6
OmhlYXBGb3IoSAogICAgIHJldHVybiB0b05vZGUoaGFuZGxlKS0+aGFuZGxlSGVhcCgpOwogfQog
CitpbmxpbmUgSlNHbG9iYWxEYXRhKiBIYW5kbGVIZWFwOjpnbG9iYWxEYXRhKCkKK3sKKyAgICBy
ZXR1cm4gbV9nbG9iYWxEYXRhOworfQorCiBpbmxpbmUgSGFuZGxlU2xvdCBIYW5kbGVIZWFwOjp0
b0hhbmRsZShOb2RlKiBub2RlKQogewogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEhhbmRs
ZVNsb3Q+KG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbGxlY3Rvci9oYW5k
bGVzL0xvY2FsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbGxlY3Rv
ci9oYW5kbGVzL0xvY2FsLmgJKHJldmlzaW9uIDgzMjE0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2NvbGxlY3Rvci9oYW5kbGVzL0xvY2FsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDY0ICsz
Niw0MiBAQAogKi8KIAogbmFtZXNwYWNlIEpTQyB7Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xh
c3MgTG9jYWw7Ci19Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgVmVjdG9yVHJhaXRzPEpTQzo6TG9jYWw8VD4gPiB7Ci0gICAgc3RhdGljIGNvbnN0IGJv
b2wgbmVlZHNEZXN0cnVjdGlvbiA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRz
SW5pdGlhbGl6YXRpb24gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdCBib29sIGNhbkluaXRpYWxp
emVXaXRoTWVtc2V0ID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgY2FuTW92ZVdpdGhN
ZW1jcHkgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdCBib29sIGNhbkNvcHlXaXRoTWVtY3B5ID0g
ZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgY2FuRmlsbFdpdGhNZW1zZXQgPSBmYWxzZTsK
LSAgICBzdGF0aWMgY29uc3QgYm9vbCBjYW5Db21wYXJlV2l0aE1lbWNtcCA9IHRydWU7Ci19Owot
Ci19Ci0KLW5hbWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgTG9j
YWwgOiBwdWJsaWMgSGFuZGxlPFQ+IHsKICAgICBmcmllbmQgY2xhc3MgTG9jYWxTY29wZTsKKyAg
ICB1c2luZyBIYW5kbGU8VD46OnNsb3Q7CisKIHB1YmxpYzoKICAgICB0eXBlZGVmIHR5cGVuYW1l
IEhhbmRsZTxUPjo6RXh0ZXJuYWxUeXBlIEV4dGVybmFsVHlwZTsKKwogICAgIExvY2FsKEpTR2xv
YmFsRGF0YSYsIEV4dGVybmFsVHlwZSA9IEV4dGVybmFsVHlwZSgpKTsKICAgICBMb2NhbChKU0ds
b2JhbERhdGEmLCBIYW5kbGU8VD4pOwogICAgIExvY2FsKGNvbnN0IExvY2FsPFQ+Jik7IC8vIEFk
b3B0aW5nIGNvbnN0cnVjdG9yLiBVc2VkIHRvIHJldHVybiBhIExvY2FsIHRvIGEgY2FsbGluZyBm
dW5jdGlvbi4KIAogICAgIExvY2FsJiBvcGVyYXRvcj0oRXh0ZXJuYWxUeXBlKTsKICAgICBMb2Nh
bCYgb3BlcmF0b3I9KEhhbmRsZTxUPik7Ci0gICAgCi0gICAgdXNpbmcgSGFuZGxlPFQ+OjpzbG90
OwogCiBwcml2YXRlOgogICAgIExvY2FsKEhhbmRsZVNsb3QsIEV4dGVybmFsVHlwZSk7IC8vIFVz
ZWQgYnkgTG9jYWxTY29wZTo6cmVsZWFzZSgpIHRvIG1vdmUgYSBMb2NhbCB0byBhIGNvbnRhaW5p
bmcgc2NvcGUuCi0gICAgdm9pZCBpbnRlcm5hbFNldChFeHRlcm5hbFR5cGUgdmFsdWUpCi0gICAg
ewotICAgICAgICBKU1ZhbHVlIG5ld1ZhbHVlKEhhbmRsZVR5cGVzPFQ+Ojp0b0pTVmFsdWUodmFs
dWUpKTsKLSAgICAgICAgSGFuZGxlU2xvdCBzbG90ID0gdGhpcy0+c2xvdCgpOwotICAgICAgICAq
c2xvdCA9IG5ld1ZhbHVlOwotICAgIH0KKyAgICB2b2lkIHNldFdpdGhTbG90Q2hlY2soRXh0ZXJu
YWxUeXBlKTsKIH07CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgTG9jYWw8VD46Okxv
Y2FsKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXh0ZXJuYWxUeXBlIHZhbHVlKQogICAgIDog
SGFuZGxlPFQ+KGdsb2JhbERhdGEuYWxsb2NhdGVMb2NhbEhhbmRsZSgpKQogewotICAgIGludGVy
bmFsU2V0KHZhbHVlKTsKKyAgICBzZXRXaXRoU2xvdENoZWNrKHZhbHVlKTsKIH0KIAotdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IGlubGluZSBMb2NhbDxUPjo6TG9jYWwoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBIYW5kbGU8VD4gaGFuZGxlKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBM
b2NhbDxUPjo6TG9jYWwoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBIYW5kbGU8VD4gb3RoZXIp
CiAgICAgOiBIYW5kbGU8VD4oZ2xvYmFsRGF0YS5hbGxvY2F0ZUxvY2FsSGFuZGxlKCkpCiB7Ci0g
ICAgaW50ZXJuYWxTZXQoaGFuZGxlLmdldCgpKTsKKyAgICBzZXRXaXRoU2xvdENoZWNrKG90aGVy
LmdldCgpKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBMb2NhbDxUPjo6TG9j
YWwoY29uc3QgTG9jYWw8VD4mIG8pCi0gICAgOiBIYW5kbGU8VD4oby5zbG90KCkpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gaW5saW5lIExvY2FsPFQ+OjpMb2NhbChjb25zdCBMb2NhbDxUPiYgb3Ro
ZXIpCisgICAgOiBIYW5kbGU8VD4ob3RoZXIuc2xvdCgpKQogewotICAgIGNvbnN0X2Nhc3Q8TG9j
YWw8VD4mPihvKS5pbnZhbGlkYXRlKCk7IC8vIFByZXZlbnQgYWNjaWRlbnRhbCBzaGFyaW5nLgor
ICAgIGNvbnN0X2Nhc3Q8TG9jYWw8VD4mPihvdGhlcikuc2V0U2xvdCgwKTsgLy8gUHJldmVudCBh
Y2NpZGVudGFsIHNoYXJpbmcuCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgTG9j
YWw8VD46OkxvY2FsKEhhbmRsZVNsb3Qgc2xvdCwgRXh0ZXJuYWxUeXBlIHZhbHVlKQpAQCAtMTAz
LDE2ICs4MSwyMyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIExvY2FsPFQ+OjpMCiAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgTG9jYWw8VD4mIExvY2FsPFQ+OjpvcGVyYXRv
cj0oRXh0ZXJuYWxUeXBlIHZhbHVlKQogewotICAgIGludGVybmFsU2V0KHZhbHVlKTsKKyAgICBz
ZXRXaXRoU2xvdENoZWNrKHZhbHVlKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLXRlbXBsYXRl
IDx0eXBlbmFtZSBUPiBpbmxpbmUgTG9jYWw8VD4mIExvY2FsPFQ+OjpvcGVyYXRvcj0oSGFuZGxl
PFQ+IGhhbmRsZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgTG9jYWw8VD4mIExvY2Fs
PFQ+OjpvcGVyYXRvcj0oSGFuZGxlPFQ+IG90aGVyKQogewotICAgIGludGVybmFsU2V0KGhhbmRs
ZS5nZXQoKSk7CisgICAgc2V0V2l0aFNsb3RDaGVjayhvdGhlci5nZXQoKSk7CiAgICAgcmV0dXJu
ICp0aGlzOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgTG9jYWw8VD46
OnNldFdpdGhTbG90Q2hlY2soRXh0ZXJuYWxUeXBlIHZhbHVlKQoreworICAgIEFTU0VSVChzbG90
KCkpOworICAgICpzbG90KCkgPSB2YWx1ZTsKK30KKworCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dW5zaWduZWQgaW5saW5lQ2FwYWNpdHkgPSAwPiBjbGFzcyBMb2NhbFN0YWNrIHsKICAgICB0eXBl
ZGVmIHR5cGVuYW1lIEhhbmRsZTxUPjo6RXh0ZXJuYWxUeXBlIEV4dGVybmFsVHlwZTsKIHB1Ymxp
YzoKQEAgLTE1NCw0ICsxMzksMTggQEAgcHJpdmF0ZToKIAogfQogCituYW1lc3BhY2UgV1RGIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFZlY3RvclRyYWl0czxKU0M6OkxvY2FsPFQ+
ID4geworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSBmYWxzZTsKKyAg
ICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0luaXRpYWxpemF0aW9uID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3QgYm9vbCBjYW5Jbml0aWFsaXplV2l0aE1lbXNldCA9IGZhbHNlOworICAgIHN0YXRp
YyBjb25zdCBib29sIGNhbk1vdmVXaXRoTWVtY3B5ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBjYW5Db3B5V2l0aE1lbWNweSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdCBib29sIGNh
bkZpbGxXaXRoTWVtc2V0ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgY2FuQ29tcGFy
ZVdpdGhNZW1jbXAgPSB0cnVlOworfTsKKworfQorCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgJKHJldmlzaW9uIDgz
MjE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNyArMTY3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICwgbV9zdGFydCgwKQogICAgICAgICAsIG1fZW5kKDApCiAgICAgICAgICwgbV9tYXgoMCkK
LSAgICAgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxEYXRhLCAmbV9nbG9iYWxPYmplY3RPd25l
ciwgdGhpcykKKyAgICAgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxEYXRhLCAwLCAmbV9nbG9i
YWxPYmplY3RPd25lciwgdGhpcykKICAgICB7CiAgICAgICAgIEFTU0VSVChtYXhHbG9iYWxzICYm
IGlzUGFnZUFsaWduZWQobWF4R2xvYmFscykpOwogICAgICAgICBBU1NFUlQoY2FwYWNpdHkgJiYg
aXNQYWdlQWxpZ25lZChjYXBhY2l0eSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5jcHAJKHJldmlzaW9uIDgzMjE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0OTUsNyArMzQ5NSw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBKSVRUaHVua3M6OmN0aVN0dWIKIAogTmF0aXZlRXhlY3V0YWJsZSog
SklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0
aXZlRnVuY3Rpb24gZnVuY3Rpb24pCiB7Ci0gICAgc3RkOjpwYWlyPEhvc3RGdW5jdGlvblN0dWJN
YXA6Oml0ZXJhdG9yLCBib29sPiBlbnRyeSA9IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcC0+YWRkKGZ1
bmN0aW9uLCBHbG9iYWw8TmF0aXZlRXhlY3V0YWJsZT4oR2xvYmFsPE5hdGl2ZUV4ZWN1dGFibGU+
OjpFbXB0eVZhbHVlKSk7CisgICAgc3RkOjpwYWlyPEhvc3RGdW5jdGlvblN0dWJNYXA6Oml0ZXJh
dG9yLCBib29sPiBlbnRyeSA9IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcC0+YWRkKGZ1bmN0aW9uLCBH
bG9iYWw8TmF0aXZlRXhlY3V0YWJsZT4oKSk7CiAgICAgaWYgKGVudHJ5LnNlY29uZCkKICAgICAg
ICAgZW50cnkuZmlyc3QtPnNlY29uZC5zZXQoKmdsb2JhbERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6
OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgSklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRh
LCBtX2V4ZWN1dGFibGVQb29sLCBmdW5jdGlvbiksIGZ1bmN0aW9uLCBjdGlOYXRpdmVDb25zdHJ1
Y3QoKSwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpKTsKICAgICByZXR1cm4gZW50cnku
Zmlyc3QtPnNlY29uZC5nZXQoKTsKQEAgLTM1MDMsNyArMzUwMyw3IEBAIE5hdGl2ZUV4ZWN1dGFi
bGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW8KIAogTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtz
Ojpob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rp
b24gZnVuY3Rpb24sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKLSAgICBzdGQ6OnBhaXI8
SG9zdEZ1bmN0aW9uU3R1Yk1hcDo6aXRlcmF0b3IsIGJvb2w+IGVudHJ5ID0gbV9ob3N0RnVuY3Rp
b25TdHViTWFwLT5hZGQoZnVuY3Rpb24sIEdsb2JhbDxOYXRpdmVFeGVjdXRhYmxlPihHbG9iYWw8
TmF0aXZlRXhlY3V0YWJsZT46OkVtcHR5VmFsdWUpKTsKKyAgICBzdGQ6OnBhaXI8SG9zdEZ1bmN0
aW9uU3R1Yk1hcDo6aXRlcmF0b3IsIGJvb2w+IGVudHJ5ID0gbV9ob3N0RnVuY3Rpb25TdHViTWFw
LT5hZGQoZnVuY3Rpb24sIEdsb2JhbDxOYXRpdmVFeGVjdXRhYmxlPigpKTsKICAgICBpZiAoZW50
cnkuc2Vjb25kKSB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlID0gZ2xvYmFs
RGF0YS0+Y2FuVXNlSklUKCkgPyBnZW5lcmF0b3IoZ2xvYmFsRGF0YSwgbV9leGVjdXRhYmxlUG9v
bC5nZXQoKSkgOiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKICAgICAgICAgZW50cnkuZmlyc3Qt
PnNlY29uZC5zZXQoKmdsb2JhbERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFs
RGF0YSwgY29kZSwgZnVuY3Rpb24sIGN0aU5hdGl2ZUNvbnN0cnVjdCgpLCBjYWxsSG9zdEZ1bmN0
aW9uQXNDb25zdHJ1Y3RvcikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaAkocmV2aXNpb24gODMyMTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTkzLDEyICs5Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGlu
bGluZSB2b2lkIFN0cnVjdHVyZTo6c2V0RW51bWVyYXRpb25DYWNoZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGVudW1lcmF0aW9uQ2FjaGUpCiAgICAg
ewogICAgICAgICBBU1NFUlQoIWlzRGljdGlvbmFyeSgpKTsKLSAgICAgICAgbV9lbnVtZXJhdGlv
bkNhY2hlLnNldChnbG9iYWxEYXRhLCBlbnVtZXJhdGlvbkNhY2hlLCAwKTsKLSAgICB9Ci0KLSAg
ICBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OmNsZWFyRW51bWVyYXRpb25DYWNoZSgpCi0gICAgewot
ICAgICAgICBtX2VudW1lcmF0aW9uQ2FjaGUuY2xlYXIoKTsKKyAgICAgICAgbV9lbnVtZXJhdGlv
bkNhY2hlLnNldChnbG9iYWxEYXRhLCBlbnVtZXJhdGlvbkNhY2hlKTsKICAgICB9CiAKICAgICBp
bmxpbmUgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogU3RydWN0dXJlOjplbnVtZXJhdGlvbkNhY2hl
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZp
c2lvbiA4MzIxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgZGlzYWJsZVNwZWNpZmljRnVuY3Rpb25UcmFja2luZygpIHsgbV9zcGVjaWZpY0Z1
bmN0aW9uVGhyYXNoQ291bnQgPSBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQ7IH0KIAog
ICAgICAgICB2b2lkIHNldEVudW1lcmF0aW9uQ2FjaGUoSlNHbG9iYWxEYXRhJiwgSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvciogZW51bWVyYXRpb25DYWNoZSk7IC8vIERlZmluZWQgaW4gSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvci5oLgotICAgICAgICB2b2lkIGNsZWFyRW51bWVyYXRpb25DYWNoZSgpOyAv
LyBEZWZpbmVkIGluIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaC4KICAgICAgICAgSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvciogZW51bWVyYXRpb25DYWNoZSgpOyAvLyBEZWZpbmVkIGluIEpTUHJvcGVy
dHlOYW1lSXRlcmF0b3IuaC4KICAgICAgICAgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlIG1vZGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAuaAkocmV2aXNpb24gODMyMTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtOTQs
OCArOTQsOCBAQCBwdWJsaWM6CiAgICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9IGl0ZXIuZmlyc3Qt
PnNlY29uZDsKICAgICAgICAgaWYgKGl0ZXIuc2Vjb25kKSB7CiAgICAgICAgICAgICBzbG90ID0g
Z2xvYmFsRGF0YS5hbGxvY2F0ZUdsb2JhbEhhbmRsZSgpOwotICAgICAgICAgICAgaXRlci5maXJz
dC0+c2Vjb25kID0gc2xvdDsKICAgICAgICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCkt
Pm1ha2VXZWFrKHNsb3QsIHRoaXMsIGtleSk7CisgICAgICAgICAgICBpdGVyLmZpcnN0LT5zZWNv
bmQgPSBzbG90OwogICAgICAgICB9CiAgICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCkt
PndyaXRlQmFycmllcihzbG90LCB2YWx1ZSk7CiAgICAgICAgICpzbG90ID0gdmFsdWU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NQdHIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NQdHIuaAkocmV2aXNpb24gODMy
MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NQdHIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNzcgKzI2LDgyIEBACiAjaWZuZGVmIFdlYWtHQ1B0cl9oCiAjZGVmaW5l
IFdlYWtHQ1B0cl9oCiAKLSNpbmNsdWRlICJHbG9iYWwuaCIKLSNpbmNsdWRlICJIZWFwLmgiCisj
aW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgIkhhbmRsZS5oIgorI2luY2x1ZGUgIkhh
bmRsZUhlYXAuaCIKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKIAogbmFtZXNwYWNlIEpTQyB7
Ci0vLyBBIHNtYXJ0IHBvaW50ZXIgd2hvc2UgZ2V0KCkgZnVuY3Rpb24gcmV0dXJucyAwIGZvciBj
ZWxscyB0aGF0IGhhdmUgZGllZAogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2Vha0dD
UHRyIDogcHVibGljIEhhbmRsZUNvbnZlcnRlcjxXZWFrR0NQdHI8VD4sIFQ+IHsKLSAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShXZWFrR0NQdHIpOworLy8gQSBzbWFydCBwb2ludGVyIHRoYXQgYmVj
b21lcyAwIHdoZW4gdGhlIHZhbHVlIGl0IHBvaW50cyB0byBpcyBnYXJiYWdlIGNvbGxlY3RlZC4K
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrR0NQdHIgOiBwdWJsaWMgSGFuZGxlPFQ+
IHsKKyAgICB1c2luZyBIYW5kbGU8VD46OnNsb3Q7CisgICAgdXNpbmcgSGFuZGxlPFQ+OjpzZXRT
bG90OwogCiBwdWJsaWM6Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBIYW5kbGVUeXBlczxUPjo6RXh0
ZXJuYWxUeXBlIEV4dGVybmFsVHlwZTsKLSAgICAKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEhhbmRs
ZTxUPjo6RXh0ZXJuYWxUeXBlIEV4dGVybmFsVHlwZTsKKwogICAgIFdlYWtHQ1B0cigpCi0gICAg
ICAgIDogbV9zbG90KDApCisgICAgICAgIDogSGFuZGxlPFQ+KCkKICAgICB7CiAgICAgfQotICAg
IAotICAgIFdlYWtHQ1B0cihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFdlYWtIYW5kbGVPd25l
ciogd2Vha093bmVyID0gMCwgdm9pZCogY29udGV4dCA9IDApCi0gICAgICAgIDogbV9zbG90KGds
b2JhbERhdGEuYWxsb2NhdGVHbG9iYWxIYW5kbGUoKSkKKworICAgIFdlYWtHQ1B0cihKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEV4dGVybmFsVHlwZSB2YWx1ZSA9IEV4dGVybmFsVHlwZSgpLCBX
ZWFrSGFuZGxlT3duZXIqIHdlYWtPd25lciA9IDAsIHZvaWQqIGNvbnRleHQgPSAwKQorICAgICAg
ICA6IEhhbmRsZTxUPihnbG9iYWxEYXRhLmFsbG9jYXRlR2xvYmFsSGFuZGxlKCkpCiAgICAgewot
ICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKG1fc2xvdCktPm1ha2VXZWFrKG1fc2xvdCwgd2Vh
a093bmVyLCBjb250ZXh0KTsKKyAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihzbG90KCkpLT5t
YWtlV2VhayhzbG90KCksIHdlYWtPd25lciwgY29udGV4dCk7CisgICAgICAgIHNldFdpdGhXcml0
ZUJhcnJpZXIodmFsdWUpOwogICAgIH0KLSAgICAKLSAgICBXZWFrR0NQdHIoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBFeHRlcm5hbFR5cGUgdmFsdWUsIFdlYWtIYW5kbGVPd25lciogd2Vha093
bmVyID0gMCwgdm9pZCogY29udGV4dCA9IDApCi0gICAgICAgIDogbV9zbG90KGdsb2JhbERhdGEu
YWxsb2NhdGVHbG9iYWxIYW5kbGUoKSkKKworICAgIFdlYWtHQ1B0cihjb25zdCBXZWFrR0NQdHIm
IG90aGVyKQorICAgICAgICA6IEhhbmRsZTxUPihvdGhlci5zbG90KCkgPyBIYW5kbGVIZWFwOjpo
ZWFwRm9yKG90aGVyLnNsb3QoKSktPmFsbG9jYXRlKCkgOiAwKQogICAgIHsKLSAgICAgICAgSGFu
ZGxlSGVhcDo6aGVhcEZvcihtX3Nsb3QpLT5tYWtlV2VhayhtX3Nsb3QsIHdlYWtPd25lciwgY29u
dGV4dCk7Ci0gICAgICAgIGludGVybmFsU2V0KHZhbHVlKTsKKyAgICAgICAgaWYgKCFvdGhlci5z
bG90KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHNldFdpdGhXcml0ZUJhcnJpZXIo
b3RoZXIuZ2V0KCkpOwogICAgIH0KIAotICAgIEV4dGVybmFsVHlwZSBnZXQoKSBjb25zdCB7IHJl
dHVybiAgSGFuZGxlVHlwZXM8VD46OmdldEZyb21TbG90KG1fc2xvdCk7IH0KLSAgICAKLSAgICB2
b2lkIGNsZWFyKCkKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gV2Vha0dDUHRyKGNvbnN0IFdl
YWtHQ1B0cjxVPiYgb3RoZXIpCisgICAgICAgIDogSGFuZGxlPFQ+KG90aGVyLnNsb3QoKSA/IEhh
bmRsZUhlYXA6OmhlYXBGb3Iob3RoZXIuc2xvdCgpKS0+YWxsb2NhdGUoKSA6IDApCiAgICAgewot
ICAgICAgICBpZiAobV9zbG90KQotICAgICAgICAgICAgaW50ZXJuYWxTZXQoRXh0ZXJuYWxUeXBl
KCkpOworICAgICAgICBpZiAoIW90aGVyLnNsb3QoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgc2V0V2l0aFdyaXRlQmFycmllcihvdGhlci5nZXQoKSk7CiAgICAgfQogICAgIAotICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fc2xvdCB8fCAhKm1fc2xvdDsgfQot
Ci0gICAgLy8gVGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJz
aW9uIHRvIGJvb2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgotICAgIHR5cGVkZWYg
RXh0ZXJuYWxUeXBlIChXZWFrR0NQdHI6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKLSAgICBvcGVy
YXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0IHsgcmV0dXJuICEqdGhpcyA/IDAgOiBy
ZWludGVycHJldF9jYXN0PFVuc3BlY2lmaWVkQm9vbFR5cGUqPigxKTsgfQotCiAgICAgfldlYWtH
Q1B0cigpCiAgICAgewotICAgICAgICBpZiAoIW1fc2xvdCkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihtX3Nsb3QpLT5kZWFsbG9jYXRlKG1fc2xvdCk7
CisgICAgICAgIGNsZWFyKCk7CiAgICAgfQogCisgICAgRXh0ZXJuYWxUeXBlIGdldCgpIGNvbnN0
IHsgcmV0dXJuICBIYW5kbGVUeXBlczxUPjo6Z2V0RnJvbVNsb3Qoc2xvdCgpKTsgfQorICAgIAor
ICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgaWYgKCFzbG90KCkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+ZGVhbGxvY2F0
ZShzbG90KCkpOworICAgICAgICBzZXRTbG90KDApOworICAgIH0KKyAgICAKICAgICB2b2lkIHNl
dChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEV4dGVybmFsVHlwZSB2YWx1ZSwgV2Vha0hhbmRs
ZU93bmVyKiB3ZWFrT3duZXIgPSAwLCB2b2lkKiBjb250ZXh0ID0gMCkKICAgICB7Ci0gICAgICAg
IGlmICghdGhpcy0+bV9zbG90KSB7Ci0gICAgICAgICAgICB0aGlzLT5tX3Nsb3QgPSBnbG9iYWxE
YXRhLmFsbG9jYXRlR2xvYmFsSGFuZGxlKCk7Ci0gICAgICAgICAgICBIYW5kbGVIZWFwOjpoZWFw
Rm9yKHRoaXMtPm1fc2xvdCktPm1ha2VXZWFrKHRoaXMtPm1fc2xvdCwgd2Vha093bmVyLCBjb250
ZXh0KTsKKyAgICAgICAgaWYgKCFzbG90KCkpIHsKKyAgICAgICAgICAgIHNldFNsb3QoZ2xvYmFs
RGF0YS5hbGxvY2F0ZUdsb2JhbEhhbmRsZSgpKTsKKyAgICAgICAgICAgIEhhbmRsZUhlYXA6Omhl
YXBGb3Ioc2xvdCgpKS0+bWFrZVdlYWsoc2xvdCgpLCB3ZWFrT3duZXIsIGNvbnRleHQpOwogICAg
ICAgICB9Ci0gICAgICAgIEFTU0VSVChIYW5kbGVIZWFwOjpoZWFwRm9yKHRoaXMtPm1fc2xvdCkt
Pmhhc1dlYWtPd25lcih0aGlzLT5tX3Nsb3QsIHdlYWtPd25lcikpOwotICAgICAgICB0aGlzLT5p
bnRlcm5hbFNldCh2YWx1ZSk7CisgICAgICAgIEFTU0VSVChIYW5kbGVIZWFwOjpoZWFwRm9yKHNs
b3QoKSktPmhhc1dlYWtPd25lcihzbG90KCksIHdlYWtPd25lcikpOworICAgICAgICBzZXRXaXRo
V3JpdGVCYXJyaWVyKHZhbHVlKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBpbnRlcm5h
bFNldChFeHRlcm5hbFR5cGUgdmFsdWUpCisgICAgdm9pZCBzZXRXaXRoV3JpdGVCYXJyaWVyKEV4
dGVybmFsVHlwZSBleHRlcm5hbFR5cGUpCiAgICAgewotICAgICAgICBBU1NFUlQobV9zbG90KTsK
LSAgICAgICAgSlNWYWx1ZSBuZXdWYWx1ZShIYW5kbGVUeXBlczxUPjo6dG9KU1ZhbHVlKHZhbHVl
KSk7Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3IobV9zbG90KS0+d3JpdGVCYXJyaWVyKG1f
c2xvdCwgbmV3VmFsdWUpOwotICAgICAgICAqbV9zbG90ID0gbmV3VmFsdWU7CisgICAgICAgIEFT
U0VSVChzbG90KCkpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSGFuZGxlVHlwZXM8VD46OnRv
SlNWYWx1ZShleHRlcm5hbFR5cGUpOworICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3Qo
KSktPndyaXRlQmFycmllcihzbG90KCksIHZhbHVlKTsKKyAgICAgICAgKnNsb3QoKSA9IHZhbHVl
OwogICAgIH0KLQotICAgIEhhbmRsZVNsb3QgbV9zbG90OwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMjM3KQorKysgU291
cmNlL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0
IEBACisyMDExLTA0LTA3ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU29tZSBIYW5kbGU8
VD4gY2xlYW51cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTgxMDkKKworICAgICAgICAqIEpTUnVuLmg6CisgICAgICAgICogSlNWYWx1ZVdyYXBwZXIu
aDogI2luY2x1ZGUgYSBmaWxlIHRoYXQgd2FzIG1pc3NpbmcgYmVmb3JlLCBidXQgd2FzCisgICAg
ICAgIGhhcm1sZXNzbHkgc28gdW50aWwgbm93LgorCiAyMDExLTAzLTMwICBUaW11ciBJc2tob2R6
aGFub3YgIDx0aW11cnJyckBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFsZXhl
eSBQcm9za3VyeWFrb3YuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvSlNSdW4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvSlNSdW4uaAkocmV2aXNpb24gODMyMTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvSlNSdW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjks
NiArMjksNyBAQAogI2lmbmRlZiBKU1J1bl9oCiAjZGVmaW5lIEpTUnVuX2gKIAorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0dsb2JhbC5oPgogI2luY2x1ZGUgIkpTQmFzZS5oIgogI2luY2x1ZGUg
IkpTVXRpbHMuaCIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFwcGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFwcGVyLmgJ
KHJldmlzaW9uIDgzMjE0KQorKysgU291cmNlL0phdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFwcGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZm5kZWYgSlNWYWx1ZVdyYXBw
ZXJfaAogI2RlZmluZSBKU1ZhbHVlV3JhcHBlcl9oCiAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9HbG9iYWwuaD4KICNpbmNsdWRlICJKU1V0aWxzLmgiCiAjaW5jbHVkZSAiSlNCYXNlLmgiCiAj
aW5jbHVkZSAiSlNPYmplY3QuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMjM3KQorKysg
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTEtMDQtMDcgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTb21lIEhhbmRsZTxUPiBj
bGVhbnVwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
ODEwOQorCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdFZhbHVlOjpTY3JpcHRWYWx1ZSk6IFVwZGF0ZWQgZm9yIG5ldyBudWxsIGNv
bnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0VmFsdWU6Omhhc05vVmFsdWUpOiBV
cGRhdGVkIGZvciByZW1vdmFsIG9mIGlzRW1wdHkoKS4KKwogMjAxMS0wNC0wNyAgTmFva2kgVGFr
YW5vICA8dGFrYW5vLm5hb2tpQGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFt
IEJhcnRoLgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oCShy
ZXZpc2lvbiA4MzIxNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3MgU2VyaWFsaXplZFNjcmlw
dFZhbHVlOwogCiBjbGFzcyBTY3JpcHRWYWx1ZSB7CiBwdWJsaWM6Ci0gICAgU2NyaXB0VmFsdWUo
KSA6IG1fdmFsdWUoSlNDOjpHbG9iYWw8SlNDOjpVbmtub3duPjo6RW1wdHlWYWx1ZSkgeyB9Cisg
ICAgU2NyaXB0VmFsdWUoKSB7IH0KICAgICBTY3JpcHRWYWx1ZShKU0M6OkpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSA6IG1fdmFsdWUoZ2xvYmFsRGF0YSwgdmFs
dWUpIHt9CiAgICAgdmlydHVhbCB+U2NyaXB0VmFsdWUoKSB7fQogCkBAIC01Nyw3ICs1Nyw3IEBA
IHB1YmxpYzoKICAgICBib29sIGlzVW5kZWZpbmVkKCkgY29uc3Q7CiAgICAgYm9vbCBpc09iamVj
dCgpIGNvbnN0OwogICAgIGJvb2wgaXNGdW5jdGlvbigpIGNvbnN0OwotICAgIGJvb2wgaGFzTm9W
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBoYXNO
b1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gIW1fdmFsdWU7IH0KIAogICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBTY3JpcHRWYWx1ZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPT0gb3Ro
ZXIubV92YWx1ZTsgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MzIzNykKKysrIFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExIEBACisyMDEx
LTA0LTA3ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgU29t
ZSBIYW5kbGU8VD4gY2xlYW51cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTgxMDkKKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2Fw
ZS9OUEpTT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6TlBKU09iamVj
dCk6IFVwZGF0ZWQgZm9yIG5ldyBudWxsIGNvbnN0cnVjdG9yLgorCiAyMDExLTA0LTA3ICBKZXNz
aWUgQmVybGluICA8amJlcmxpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQnJp
YW4gV2VpbnN0ZWluLgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL05QSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAkocmV2aXNpb24gODMyMTQpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDYgQEAgTlBKU09iamVjdCogTlBKU09iamVj
dDo6Y3JlYXRlKEpTR2xvYmFsRAogCiBOUEpTT2JqZWN0OjpOUEpTT2JqZWN0KCkKICAgICA6IG1f
b2JqZWN0TWFwKDApCi0gICAgLCBtX2pzT2JqZWN0KEdsb2JhbDxKU09iamVjdD46OkVtcHR5VmFs
dWUpCiB7CiB9CiAK
</data>
<flag name="review"
          id="81312"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>