<?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>150347</bug_id>
          
          <creation_ts>2015-10-19 16:50:52 -0700</creation_ts>
          <short_desc>Use tighter typing for collections / node lists&apos; item() / namedItem() methods</short_desc>
          <delta_ts>2015-10-20 13:37:51 -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>DOM</component>
          <version>Other</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="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1134748</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-19 16:50:52 -0700</bug_when>
    <thetext>Use tighter typing for collections / node lists&apos; item() / namedItem() methods</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134779</commentid>
    <comment_count>1</comment_count>
      <attachid>263540</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-19 18:39:28 -0700</bug_when>
    <thetext>Created attachment 263540
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134884</commentid>
    <comment_count>2</comment_count>
      <attachid>263540</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-10-20 08:57:45 -0700</bug_when>
    <thetext>Comment on attachment 263540
Patch

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

More elegant; seems good.

A little sad to have to remove the final from some of the item functions, just so we can narrow the type in a derived class. We don’t gain anything by calling the derived class’s override when calling the function on the base class at runtime except maybe an assertion in debug builds. But I can’t think of a simple alternative.

These function bodies are messy enough that I would prefer to see them after the classes rather than inside the class definitions.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1783
&gt; +    for (unsigned i = 0; auto* current = links-&gt;item(i); ++i) {

Would be nice to eventually come up with a cleaner idiom for iterating an HTMLCollection in C++ code. We could probably make begin/end and iterators to make this work with a modern for loop.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1786
&gt; +            RefPtr&lt;AccessibilityObject&gt; axObject = document.axObjectCache()-&gt;getOrCreate(renderer);
&gt; +            ASSERT(axObject);

Makes me wonder why getOrCreate doesn’t return a Ref.

&gt; Source/WebCore/html/HTMLSelectElement.cpp:458
&gt; +        before = options()-&gt;item(index + 1);

Seems like we could call our own item() here rather than explicitly calling options()-&gt;item().

&gt; Source/WebCore/html/HTMLTableRowElement.cpp:136
&gt; -        RefPtr&lt;Node&gt; cell = children-&gt;item(index);
&gt; +        RefPtr&lt;Element&gt; cell = children-&gt;item(index);

I suggest removing this local variable entirely so we don’t have to state the type.

&gt; Source/WebCore/html/HTMLTableSectionElement.cpp:91
&gt; -        RefPtr&lt;Node&gt; row = children-&gt;item(index);
&gt; +        RefPtr&lt;Element&gt; row = children-&gt;item(index);

I suggest removing this local variable entirely so we don’t have to state the type.

&gt; Source/WebCore/html/RadioNodeList.h:46
&gt; +    HTMLElement* item(unsigned offset) const override { return downcast&lt;HTMLElement&gt;(CachedLiveNodeList&lt;RadioNodeList&gt;::item(offset)); }
&gt; +
&gt; +    virtual ~RadioNodeList();

I think the override should come after the destructor, not before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134921</commentid>
    <comment_count>3</comment_count>
      <attachid>263540</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-20 10:25:34 -0700</bug_when>
    <thetext>Comment on attachment 263540
Patch

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

&gt;&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1783
&gt;&gt; +    for (unsigned i = 0; auto* current = links-&gt;item(i); ++i) {
&gt; 
&gt; Would be nice to eventually come up with a cleaner idiom for iterating an HTMLCollection in C++ code. We could probably make begin/end and iterators to make this work with a modern for loop.

Agreed.

&gt;&gt; Source/WebCore/html/HTMLSelectElement.cpp:458
&gt;&gt; +        before = options()-&gt;item(index + 1);
&gt; 
&gt; Seems like we could call our own item() here rather than explicitly calling options()-&gt;item().

Ok.

&gt;&gt; Source/WebCore/html/HTMLTableRowElement.cpp:136
&gt;&gt; +        RefPtr&lt;Element&gt; cell = children-&gt;item(index);
&gt; 
&gt; I suggest removing this local variable entirely so we don’t have to state the type.

Ok

&gt;&gt; Source/WebCore/html/HTMLTableSectionElement.cpp:91
&gt;&gt; +        RefPtr&lt;Element&gt; row = children-&gt;item(index);
&gt; 
&gt; I suggest removing this local variable entirely so we don’t have to state the type.

Ok.

&gt;&gt; Source/WebCore/html/RadioNodeList.h:46
&gt;&gt; +    virtual ~RadioNodeList();
&gt; 
&gt; I think the override should come after the destructor, not before.

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134932</commentid>
    <comment_count>4</comment_count>
      <attachid>263592</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-20 11:01:03 -0700</bug_when>
    <thetext>Created attachment 263592
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134953</commentid>
    <comment_count>5</comment_count>
      <attachid>263592</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-20 11:49:07 -0700</bug_when>
    <thetext>Comment on attachment 263592
Patch

Clearing flags on attachment: 263592

Committed r191351: &lt;http://trac.webkit.org/changeset/191351&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134954</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-20 11:49:13 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134983</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-10-20 13:37:51 -0700</bug_when>
    <thetext>This broke EFL:
DerivedSources/webkitdom/WebKitDOMHTMLFormElement.cpp:31:56: fatal error: WebKitDOMHTMLFormControlsCollectionPrivate.h: No such file or directory
 #include &quot;WebKitDOMHTMLFormControlsCollectionPrivate.h&quot;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263540</attachid>
            <date>2015-10-19 18:39:28 -0700</date>
            <delta_ts>2015-10-20 11:01:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150347-20151019183848.patch</filename>
            <type>text/plain</type>
            <size>26998</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxMzIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2I5MjFjNWYwODEzNjQy
M2ExMzNlNTkzMzBkODFmMTJiNjdjMGY4ZS4uOTdhNWVkZjQyNjdlM2U2ZTAyOGY0MjFlM2E0Nzlm
NWU5NGU4NGMzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDE1LTEwLTE5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIHRpZ2h0ZXIgdHlwaW5n
IGZvciBjb2xsZWN0aW9ucyAvIG5vZGUgbGlzdHMnIGl0ZW0oKSAvIG5hbWVkSXRlbSgpIG1ldGhv
ZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDM0
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSB0
aWdodGVyIHR5cGluZyBmb3IgY29sbGVjdGlvbnMgLyBub2RlIGxpc3RzJyBpdGVtKCkgLyBuYW1l
ZEl0ZW0oKSBtZXRob2RzLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmdldERvY3VtZW50TGlua3MpOgorICAgICAgICAqIGRvbS9MaXZlTm9kZUxpc3QuaDoK
KyAgICAgICAgKiBkb20vU3RhdGljTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3Rh
dGljRWxlbWVudExpc3Q6Oml0ZW0pOgorICAgICAgICAqIGRvbS9TdGF0aWNOb2RlTGlzdC5oOgor
ICAgICAgICAqIGh0bWwvQ2FjaGVkSFRNTENvbGxlY3Rpb24uaDoKKyAgICAgICAgKiBodG1sL0hU
TUxBbGxDb2xsZWN0aW9uLmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxDb2xsZWN0aW9uLmlkbDoK
KyAgICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6ZWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEZpZWxkU2V0RWxlbWVudDo6ZWxlbWVudHNGb3JPYmpDKToKKyAgICAgICAgKiBodG1sL0hUTUxG
aWVsZFNldEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaWRs
OgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb246OmN1c3RvbUVsZW1lbnRBZnRl
cik6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5oOgorICAgICAg
ICAqIGh0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaWRsOgorICAgICAgICAqIGh0bWwv
SFRNTEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6
aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmVsZW1lbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6ZWxlbWVudHNGb3JPYmpDKToKKyAgICAg
ICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVt
ZW50LmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uc0NvbGxlY3Rpb246OmFkZCk6CisgICAgICAgICogaHRt
bC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaDoKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25zQ29s
bGVjdGlvbi5pZGw6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6bmFtZWRJdGVtKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxT
ZWxlY3RFbGVtZW50OjpzZXRPcHRpb24pOgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1l
bnQuaWRsOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MVGFibGVSb3dFbGVtZW50OjpkZWxldGVDZWxsKToKKyAgICAgICAgKiBo
dG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50OjpkZWxldGVSb3cpOgorICAgICAgICAqIGh0bWwvUmFkaW9Ob2Rl
TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1JhZGlvQnV0dG9uSW5wdXRFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlJhZGlvTm9kZUxpc3Q6OnZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJhZGlvTm9kZUxpc3Q6OnNldFZhbHVlKToKKyAgICAgICAgKiBodG1sL1JhZGlvTm9kZUxp
c3QuaDoKKyAgICAgICAgKiBodG1sL1JhZGlvTm9kZUxpc3QuaWRsOgorCiAyMDE1LTEwLTE5ICBU
aW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFdLVmlldyBi
ZWluZyBpbnNpZGUgV0tXZWJWaWV3IGxlYWRzIHRvIHdlaXJkIEFQSSBpc3N1ZXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwCmluZGV4IDQ0NDQ1YTNkMzJhODU5NTQyNzJmMTE3MzRiNDRjYzRmY2QzYWQzODQu
LmQ1ZDNiNjQ0NzA0ZjQxODA5ZTM4YzMwMjYyODVkYTkzNjQ2NzYxZTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcApAQCAtMTc4MCwxOSArMTc4MCwxOCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmdldERvY3VtZW50TGlua3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiByZQog
ewogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IG1fcmVuZGVyZXItPmRvY3VtZW50KCk7CiAgICAg
UmVmPEhUTUxDb2xsZWN0aW9uPiBsaW5rcyA9IGRvY3VtZW50LmxpbmtzKCk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgTm9kZSogY3VyciA9IGxpbmtzLT5pdGVtKGkpOyBpKyspIHsKLSAgICAg
ICAgUmVuZGVyT2JqZWN0KiBvYmogPSBjdXJyLT5yZW5kZXJlcigpOwotICAgICAgICBpZiAob2Jq
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gYXhvYmogPSBkb2N1
bWVudC5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKG9iaik7Ci0gICAgICAgICAgICBBU1NF
UlQoYXhvYmopOwotICAgICAgICAgICAgaWYgKCFheG9iai0+YWNjZXNzaWJpbGl0eUlzSWdub3Jl
ZCgpICYmIGF4b2JqLT5pc0xpbmsoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGF4
b2JqKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBhdXRvKiBjdXJyZW50ID0gbGlua3MtPml0
ZW0oaSk7ICsraSkgeworICAgICAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBjdXJyZW50LT5yZW5k
ZXJlcigpKSB7CisgICAgICAgICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gYXhPYmpl
Y3QgPSBkb2N1bWVudC5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHJlbmRlcmVyKTsKKyAg
ICAgICAgICAgIEFTU0VSVChheE9iamVjdCk7CisgICAgICAgICAgICBpZiAoIWF4T2JqZWN0LT5h
Y2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgJiYgYXhPYmplY3QtPmlzTGluaygpKQorICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoYXhPYmplY3QpOwogICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgTm9kZSogcGFyZW50ID0gY3Vyci0+cGFyZW50Tm9kZSgpOwotICAgICAgICAgICAgaWYg
KGlzPEhUTUxBcmVhRWxlbWVudD4oKmN1cnIpICYmIGlzPEhUTUxNYXBFbGVtZW50PihwYXJlbnQp
KSB7CisgICAgICAgICAgICBhdXRvKiBwYXJlbnQgPSBjdXJyZW50LT5wYXJlbnROb2RlKCk7Cisg
ICAgICAgICAgICBpZiAoaXM8SFRNTEFyZWFFbGVtZW50PigqY3VycmVudCkgJiYgaXM8SFRNTE1h
cEVsZW1lbnQ+KHBhcmVudCkpIHsKICAgICAgICAgICAgICAgICBhdXRvJiBhcmVhT2JqZWN0ID0g
ZG93bmNhc3Q8QWNjZXNzaWJpbGl0eUltYWdlTWFwTGluaz4oKmF4T2JqZWN0Q2FjaGUoKS0+Z2V0
T3JDcmVhdGUoSW1hZ2VNYXBMaW5rUm9sZSkpOwogICAgICAgICAgICAgICAgIEhUTUxNYXBFbGVt
ZW50JiBtYXAgPSBkb3duY2FzdDxIVE1MTWFwRWxlbWVudD4oKnBhcmVudCk7Ci0gICAgICAgICAg
ICAgICAgYXJlYU9iamVjdC5zZXRIVE1MQXJlYUVsZW1lbnQoZG93bmNhc3Q8SFRNTEFyZWFFbGVt
ZW50PihjdXJyKSk7CisgICAgICAgICAgICAgICAgYXJlYU9iamVjdC5zZXRIVE1MQXJlYUVsZW1l
bnQoZG93bmNhc3Q8SFRNTEFyZWFFbGVtZW50PihjdXJyZW50KSk7CiAgICAgICAgICAgICAgICAg
YXJlYU9iamVjdC5zZXRIVE1MTWFwRWxlbWVudCgmbWFwKTsKICAgICAgICAgICAgICAgICBhcmVh
T2JqZWN0LnNldFBhcmVudChhY2Nlc3NpYmlsaXR5UGFyZW50Rm9ySW1hZ2VNYXAoJm1hcCkpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTGl2ZU5vZGVMaXN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vTGl2ZU5vZGVMaXN0LmgKaW5kZXggZGRkMjg1YWU0NDYyNjA0OWJmNzg3ZTUz
ODEwYTdkYWIyMDUxYTJhMi4uMjUzMjZlYmMyMGQxNmY1ZmQ3ODZlNDljZDE4YmU4NTM4MGRjZmU3
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0xpdmVOb2RlTGlzdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9MaXZlTm9kZUxpc3QuaApAQCAtODAsNyArODAsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB+Q2FjaGVkTGl2ZU5vZGVMaXN0KCk7CiAKICAgICB1bnNpZ25lZCBsZW5n
dGgoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBtX2luZGV4Q2FjaGUubm9kZUNvdW50
KG5vZGVMaXN0KCkpOyB9Ci0gICAgTm9kZSogaXRlbSh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0IG92
ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG1faW5kZXhDYWNoZS5ub2RlQXQobm9kZUxpc3QoKSwgb2Zm
c2V0KTsgfQorICAgIEVsZW1lbnQqIGl0ZW0odW5zaWduZWQgb2Zmc2V0KSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX2luZGV4Q2FjaGUubm9kZUF0KG5vZGVMaXN0KCksIG9mZnNldCk7IH0KIAog
ICAgIC8vIEZvciBDb2xsZWN0aW9uSW5kZXhDYWNoZQogICAgIEVsZW1lbnREZXNjZW5kYW50SXRl
cmF0b3IgY29sbGVjdGlvbkJlZ2luKCkgY29uc3QgeyByZXR1cm4gQ29sbGVjdGlvblRyYXZlcnNh
bDxDb2xsZWN0aW9uVHJhdmVyc2FsVHlwZTo6RGVzY2VuZGFudHM+OjpiZWdpbihub2RlTGlzdCgp
LCByb290Tm9kZSgpKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY05v
ZGVMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNOb2RlTGlzdC5jcHAKaW5kZXgg
NmM2OGM2ZTI5YmRjZTZhZTk1ZDUzZDg3OTg5N2VjNjZlYmQ3ZWU5YS4uNGFmZjJjZTVmM2VjZjI2
MTM5NDU1MjZlNWZmNmVjZjZhZDMwODA2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1N0YXRpY05vZGVMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljTm9kZUxp
c3QuY3BwCkBAIC00OCw3ICs0OCw3IEBAIHVuc2lnbmVkIFN0YXRpY0VsZW1lbnRMaXN0OjpsZW5n
dGgoKSBjb25zdAogICAgIHJldHVybiBtX2VsZW1lbnRzLnNpemUoKTsKIH0KIAotTm9kZSogU3Rh
dGljRWxlbWVudExpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CitFbGVtZW50KiBTdGF0
aWNFbGVtZW50TGlzdDo6aXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKICAgICBpZiAoaW5k
ZXggPCBtX2VsZW1lbnRzLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8RWxlbWVu
dCo+KG1fZWxlbWVudHNbaW5kZXhdLnB0cigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TdGF0aWNOb2RlTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY05vZGVMaXN0
LmgKaW5kZXggYmJmOTNkNTczNWQxNWVkZTBlYTY1YmU4N2FmM2FhZGVlODU2MzA5MS4uMmE4YTBh
YzM1ZTM1MWE5NDFiOTM0NjY5ZWViZGYzYWY5M2I0NzdiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1N0YXRpY05vZGVMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0YXRp
Y05vZGVMaXN0LmgKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZpcnR1
YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBOb2RlKiBp
dGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIEVsZW1lbnQq
IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFN0
YXRpY0VsZW1lbnRMaXN0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2FjaGVk
SFRNTENvbGxlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2FjaGVkSFRNTENvbGxlY3Rp
b24uaAppbmRleCA4MTc2MDIwYjExMWY0ZTZjN2NmNGQ1ZWI0NDVjMzNkZWEwNDdjYjYzLi5kY2Iw
MjJiMWJjYzgyM2QxMzM0M2FlOGQ2NWU3NTM2MzE5YjUwYjY3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0NhY2hlZEhUTUxDb2xsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9DYWNoZWRIVE1MQ29sbGVjdGlvbi5oCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5DYWNoZWRIVE1MQ29sbGVjdGlvbigpOwogCiAgICAgdmlydHVhbCB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBtX2luZGV4Q2FjaGUubm9k
ZUNvdW50KGNvbGxlY3Rpb24oKSk7IH0KLSAgICB2aXJ0dWFsIEVsZW1lbnQqIGl0ZW0odW5zaWdu
ZWQgb2Zmc2V0KSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBtX2luZGV4Q2FjaGUubm9k
ZUF0KGNvbGxlY3Rpb24oKSwgb2Zmc2V0KTsgfQorICAgIHZpcnR1YWwgRWxlbWVudCogaXRlbSh1
bnNpZ25lZCBvZmZzZXQpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faW5kZXhDYWNoZS5ub2Rl
QXQoY29sbGVjdGlvbigpLCBvZmZzZXQpOyB9CiAgICAgdmlydHVhbCBFbGVtZW50KiBuYW1lZEl0
ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gbV9pbmRl
eENhY2hlLm1lbW9yeUNvc3QoKSArIEhUTUxDb2xsZWN0aW9uOjptZW1vcnlDb3N0KCk7IH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmlkbAppbmRleCBhOGU0NDM0ZWIz
YmNmMTgwNzJiZjZlZTUxMzM5NzUwY2EwOWEyOTgxLi5iYzVlNjNhYjJhYTJhY2I4OTMyNzVjZWI1
MjhjNzU1OWZlNTExODQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbGxD
b2xsZWN0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9u
LmlkbApAQCAtMjksOCArMjksOCBAQAogICAgIEdlbmVyYXRlSXNSZWFjaGFibGU9SW1wbE93bmVy
Tm9kZVJvb3QsCiBdIGludGVyZmFjZSBIVE1MQWxsQ29sbGVjdGlvbiB7CiAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIFtDdXN0b21dIGdldHRlciBOb2Rl
IGl0ZW0oW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCB1bnNpZ25lZCBsb25nIGluZGV4KTsK
LSAgICBbQ3VzdG9tXSBnZXR0ZXIgTm9kZSBuYW1lZEl0ZW0oRE9NU3RyaW5nIG5hbWUpOworICAg
IFtDdXN0b21dIGdldHRlciBFbGVtZW50IGl0ZW0oW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25h
bCB1bnNpZ25lZCBsb25nIGluZGV4KTsKKyAgICBbQ3VzdG9tXSBnZXR0ZXIgRWxlbWVudCBuYW1l
ZEl0ZW0oRE9NU3RyaW5nIG5hbWUpOwogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZXR1cm4g
YW4gSFRNTEFsbENvbGxlY3Rpb24uCiAgICAgTm9kZUxpc3QgdGFncyhET01TdHJpbmcgbmFtZSk7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmlkbAppbmRleCBiM2U3OGZiMTBi
Mzk0MTk1ZDRmN2I4ZmMwN2UyMjEzYzI4OTVjNWRjLi45YzkwYjY1NjMzNTg0ZGU0YmZiY2VjYjFh
MzEwMzU2NzZmN2MzYjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xs
ZWN0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmlkbApA
QCAtMjUsOCArMjUsMTQgQEAKICAgICBSZXBvcnRFeHRyYU1lbW9yeUNvc3QsCiBdIGludGVyZmFj
ZSBIVE1MQ29sbGVjdGlvbiB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcg
bGVuZ3RoOworCisjaWYgZGVmaW5lZChMQU5HVUFHRV9PQkpFQ1RJVkVfQykgJiYgTEFOR1VBR0Vf
T0JKRUNUSVZFX0MKICAgICBnZXR0ZXIgTm9kZSBpdGVtKFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0
aW9uYWwgdW5zaWduZWQgbG9uZyBpbmRleCk7CiAgICAgZ2V0dGVyIE5vZGUgbmFtZWRJdGVtKFtE
ZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgRE9NU3RyaW5nIG5hbWUpOworI2Vsc2UKKyAgICBn
ZXR0ZXIgRWxlbWVudCBpdGVtKFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgdW5zaWduZWQg
bG9uZyBpbmRleCk7CisgICAgZ2V0dGVyIEVsZW1lbnQgbmFtZWRJdGVtKFtEZWZhdWx0PVVuZGVm
aW5lZF0gb3B0aW9uYWwgRE9NU3RyaW5nIG5hbWUpOworI2VuZGlmCiAKICNpZiBkZWZpbmVkKExB
TkdVQUdFX09CSkVDVElWRV9DKSAmJiBMQU5HVUFHRV9PQkpFQ1RJVkVfQwogICAgIE5vZGVMaXN0
IHRhZ3MoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBET01TdHJpbmcgbmFtZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAppbmRleCAyZjZhYmYwOGNl
OGMxZTNkZDg2NDgzZjkxZDJkYTM5MDNlMjE5N2I5Li5hMTYxYTJkMThlNGI5ZDU2NzFlMzkyYjY1
YzU1MjA4ZmNkMDMxODExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVs
ZFNldEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxl
bWVudC5jcHAKQEAgLTE2MCwxMSArMTYwLDE2IEBAIEhUTUxMZWdlbmRFbGVtZW50KiBIVE1MRmll
bGRTZXRFbGVtZW50OjpsZWdlbmQoKSBjb25zdAogICAgIHJldHVybiBjb25zdF9jYXN0PEhUTUxM
ZWdlbmRFbGVtZW50Kj4oY2hpbGRyZW5PZlR5cGU8SFRNTExlZ2VuZEVsZW1lbnQ+KCp0aGlzKS5m
aXJzdCgpKTsKIH0KIAotUmVmPEhUTUxDb2xsZWN0aW9uPiBIVE1MRmllbGRTZXRFbGVtZW50Ojpl
bGVtZW50cygpCitSZWY8SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24+IEhUTUxGaWVsZFNldEVs
ZW1lbnQ6OmVsZW1lbnRzKCkKIHsKICAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS5lbnN1cmVO
b2RlTGlzdHMoKS5hZGRDYWNoZWRDb2xsZWN0aW9uPEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9u
PigqdGhpcywgRm9ybUNvbnRyb2xzKTsKIH0KIAorUmVmPEhUTUxDb2xsZWN0aW9uPiBIVE1MRmll
bGRTZXRFbGVtZW50OjplbGVtZW50c0Zvck9iakMoKQoreworICAgIHJldHVybiBlbGVtZW50cygp
OworfQorCiB2b2lkIEhUTUxGaWVsZFNldEVsZW1lbnQ6OnJlZnJlc2hFbGVtZW50c0lmTmVlZGVk
KCkgY29uc3QKIHsKICAgICB1aW50NjRfdCBkb2N1bWVudFZlcnNpb24gPSBkb2N1bWVudCgpLmRv
bVRyZWVWZXJzaW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVs
ZFNldEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5o
CmluZGV4IDBkNGUzNjcwNmYxNmFjMGViZGNiZWMwNjg5Yzk0MGJlZWNkOWQ3ZjUuLjNiNTE2YTUz
YTI5ZjI5YmUxOGMzM2VjZDFiMzI5NjY0NmQwNDIzNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZpZWxkU2V0RWxlbWVudC5oCkBAIC0zMCwxNCArMzAsMTYgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgRm9ybUFzc29jaWF0ZWRFbGVtZW50OwotY2xhc3MgSFRNTENvbGxlY3Rp
b247CitjbGFzcyBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjsKIAogY2xhc3MgSFRNTEZpZWxk
U2V0RWxlbWVudCBmaW5hbCA6IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50IHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUmVmPEhUTUxGaWVsZFNldEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQmLCBIVE1MRm9ybUVsZW1lbnQqKTsKIAogICAgIEhUTUxMZWdl
bmRFbGVtZW50KiBsZWdlbmQoKSBjb25zdDsKLSAgICBSZWY8SFRNTENvbGxlY3Rpb24+IGVsZW1l
bnRzKCk7CisKKyAgICBSZWY8SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24+IGVsZW1lbnRzKCk7
CisgICAgUmVmPEhUTUxDb2xsZWN0aW9uPiBlbGVtZW50c0Zvck9iakMoKTsKIAogICAgIGNvbnN0
IFZlY3RvcjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQqPiYgYXNzb2NpYXRlZEVsZW1lbnRzKCkgY29u
c3Q7CiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRmllbGRTZXRFbGVtZW50LmlkbAppbmRleCA2YzVhNjExNGYzYmZkZDBjYTVlZWMyOTIxOTg1
MDNjM2ZjYzE3ZWFiLi4yMTNkMWE0ZjA5NjhhOTczOTQyZDVhY2VjYzc3ZGM4Y2UxNTY2MjIxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaWRsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5pZGwKQEAgLTI0LDcg
KzI0LDExIEBAIGludGVyZmFjZSBIVE1MRmllbGRTZXRFbGVtZW50IDogSFRNTEVsZW1lbnQgewog
CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB0eXBlOwogCi0gICAgcmVhZG9ubHkg
YXR0cmlidXRlIEhUTUxDb2xsZWN0aW9uIGVsZW1lbnRzOworI2lmIGRlZmluZWQoTEFOR1VBR0Vf
T0JKRUNUSVZFX0MpICYmIExBTkdVQUdFX09CSkVDVElWRV9DCisgICAgW0ltcGxlbWVudGVkQXM9
ZWxlbWVudHNGb3JPYmpDXSByZWFkb25seSBhdHRyaWJ1dGUgSFRNTENvbGxlY3Rpb24gZWxlbWVu
dHM7CisjZWxzZQorICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBIVE1MRm9ybUNvbnRyb2xzQ29sbGVj
dGlvbiBlbGVtZW50czsKKyNlbmRpZgogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4g
ICAgICAgICB3aWxsVmFsaWRhdGU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFZhbGlkaXR5U3Rh
dGUgICB2YWxpZGl0eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1D
b250cm9sc0NvbGxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRy
b2xzQ29sbGVjdGlvbi5jcHAKaW5kZXggMTkzNjAyZDZjOWMwYjViZjA1ZTg1OGMzZjM5MDVlZTc0
Mjg5MjE4Yi4uMzZmNzMzZDU0ZDYyMWJkYTI2NjJjNzQ2Y2EwYzM4NWU4NDQzYTJhYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5jcHAK
QEAgLTc2LDcgKzc2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGZpbmRGb3JtQXNzb2NpYXRlZEVsZW1l
bnQoY29uc3QgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JgogICAgIHJldHVybiBlbGVt
ZW50cy5zaXplKCk7CiB9CiAKLUVsZW1lbnQqIEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjpj
dXN0b21FbGVtZW50QWZ0ZXIoRWxlbWVudCogY3VycmVudCkgY29uc3QKK0hUTUxFbGVtZW50KiBI
VE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6Y3VzdG9tRWxlbWVudEFmdGVyKEVsZW1lbnQqIGN1
cnJlbnQpIGNvbnN0CiB7CiAgICAgY29uc3QgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+
JiBlbGVtZW50cyA9IGZvcm1Db250cm9sRWxlbWVudHMoKTsKICAgICB1bnNpZ25lZCBzdGFydDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaApp
bmRleCBjMGQ1MjBmNmFmMjFkYWU0YmQyMWRmYjEyMjAwNzg3MThkNTQ0MmFlLi44ZTg3OGY2ZWJk
YmQ3ODY2Zjk4MGEyZGZjYTJiYzQwMTgwMzljYzRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5oCkBAIC0zOSw4ICszOSwxMCBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbj4gY3JlYXRlKENv
bnRhaW5lck5vZGUmLCBDb2xsZWN0aW9uVHlwZSk7CiAgICAgdmlydHVhbCB+SFRNTEZvcm1Db250
cm9sc0NvbGxlY3Rpb24oKTsKIAorICAgIHZpcnR1YWwgSFRNTEVsZW1lbnQqIGl0ZW0odW5zaWdu
ZWQgb2Zmc2V0KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBkb3duY2FzdDxIVE1MRWxlbWVudD4o
Q2FjaGVkSFRNTENvbGxlY3Rpb248SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24sIENvbGxlY3Rp
b25UeXBlVHJhaXRzPEZvcm1Db250cm9scz46OnRyYXZlcnNhbFR5cGU+OjppdGVtKG9mZnNldCkp
OyB9CisKICAgICAvLyBGb3IgQ2FjaGVkSFRNTENvbGxlY3Rpb24uCi0gICAgRWxlbWVudCogY3Vz
dG9tRWxlbWVudEFmdGVyKEVsZW1lbnQqKSBjb25zdDsKKyAgICBIVE1MRWxlbWVudCogY3VzdG9t
RWxlbWVudEFmdGVyKEVsZW1lbnQqKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBI
VE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbihDb250YWluZXJOb2RlJik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaWRsCmluZGV4IDM3NWQy
N2Y4MDYxNGQ1NDVmYmMzMzI1MWQzZjE5ODkzM2NlYWM2ZDEuLjQ5ODE5NDE4YjBhOTY4M2VjZDQy
ZTAxMjk1Mjg3Zjg5YTU1ODBlOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaWRsCkBAIC0yMSw2ICsyMSw2IEBACiBbCiAgICAgR2Vu
ZXJhdGVJc1JlYWNoYWJsZT1JbXBsT3duZXJOb2RlUm9vdCwKIF0gaW50ZXJmYWNlIEhUTUxGb3Jt
Q29udHJvbHNDb2xsZWN0aW9uIDogSFRNTENvbGxlY3Rpb24gewotICAgIGdldHRlciBOb2RlIChb
RGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotICAgIFtD
dXN0b21dIGdldHRlciBOb2RlIG5hbWVkSXRlbShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFs
IERPTVN0cmluZyBuYW1lKTsKKyAgICBnZXR0ZXIgSFRNTEVsZW1lbnQgKFtEZWZhdWx0PVVuZGVm
aW5lZF0gb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBpbmRleCk7CisgICAgW0N1c3RvbV0gZ2V0dGVy
IEhUTUxFbGVtZW50IG5hbWVkSXRlbShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIERPTVN0
cmluZyBuYW1lKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKaW5k
ZXggNWY2MmNmN2Q4ZGE3MTI4ZmJmYTRhNzY4MDdjMTg4OTUzYjEzNzcxYy4uYzg2MDdiYzU5ZGYz
ZDJlMDEyMjY5ZDk0YjFhNDhiZDE5MWIyMWFjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcApAQCAtMTcyLDcgKzE3Miw3IEBAIHVuc2lnbmVkIEhUTUxGb3JtRWxlbWVu
dDo6bGVuZ3RoKCkgY29uc3QKICAgICByZXR1cm4gbGVuOwogfQogCi1Ob2RlKiBIVE1MRm9ybUVs
ZW1lbnQ6Oml0ZW0odW5zaWduZWQgaW5kZXgpCitIVE1MRWxlbWVudCogSFRNTEZvcm1FbGVtZW50
OjppdGVtKHVuc2lnbmVkIGluZGV4KQogewogICAgIHJldHVybiBlbGVtZW50cygpLT5pdGVtKGlu
ZGV4KTsKIH0KQEAgLTYzNCwxMSArNjM0LDE2IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZW1v
dmVJbWdFbGVtZW50KEhUTUxJbWFnZUVsZW1lbnQqIGUpCiAgICAgQVNTRVJUX1VOVVNFRChyZW1v
dmVkLCByZW1vdmVkKTsKIH0KIAotUmVmPEhUTUxDb2xsZWN0aW9uPiBIVE1MRm9ybUVsZW1lbnQ6
OmVsZW1lbnRzKCkKK1JlZjxIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbj4gSFRNTEZvcm1FbGVt
ZW50OjplbGVtZW50cygpCiB7CiAgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCkuZW5zdXJlTm9k
ZUxpc3RzKCkuYWRkQ2FjaGVkQ29sbGVjdGlvbjxIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbj4o
KnRoaXMsIEZvcm1Db250cm9scyk7CiB9CiAKK1JlZjxIVE1MQ29sbGVjdGlvbj4gSFRNTEZvcm1F
bGVtZW50OjplbGVtZW50c0Zvck9iakMoKQoreworICAgIHJldHVybiBlbGVtZW50cygpOworfQor
CiBTdHJpbmcgSFRNTEZvcm1FbGVtZW50OjpuYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0
TmFtZUF0dHJpYnV0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9y
bUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgKaW5kZXgg
ZDAxNTgxZGViZjAxZTgyNTY2NjU3ZWQyZDM5OGJlZTE3YWRkZDM4Ny4uMzZiNjU5ZDMwMzQ5YzAx
ZmU0MmMxNDQyMjE0NWExNGI1ZmZkMmYxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRm9ybUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxl
bWVudC5oCkBAIC00MCw2ICs0MCw3IEBAIGNsYXNzIEV2ZW50OwogY2xhc3MgRm9ybUFzc29jaWF0
ZWRFbGVtZW50OwogY2xhc3MgRm9ybURhdGE7CiBjbGFzcyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OworY2xhc3MgSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb247CiBjbGFzcyBIVE1MSW1hZ2VFbGVt
ZW50OwogY2xhc3MgSFRNTElucHV0RWxlbWVudDsKIGNsYXNzIFRleHRFbmNvZGluZzsKQEAgLTUw
LDExICs1MSwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxIVE1MRm9ybUVsZW1lbnQ+IGNy
ZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKICAgICB2aXJ0dWFsIH5IVE1M
Rm9ybUVsZW1lbnQoKTsKIAotICAgIFJlZjxIVE1MQ29sbGVjdGlvbj4gZWxlbWVudHMoKTsKKyAg
ICBSZWY8SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24+IGVsZW1lbnRzKCk7CisgICAgUmVmPEhU
TUxDb2xsZWN0aW9uPiBlbGVtZW50c0Zvck9iakMoKTsKICAgICBWZWN0b3I8UmVmPEVsZW1lbnQ+
PiBuYW1lZEVsZW1lbnRzKGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiAgICAgdW5zaWduZWQgbGVu
Z3RoKCkgY29uc3Q7Ci0gICAgTm9kZSogaXRlbSh1bnNpZ25lZCBpbmRleCk7CisgICAgSFRNTEVs
ZW1lbnQqIGl0ZW0odW5zaWduZWQgaW5kZXgpOwogCiAgICAgU3RyaW5nIGVuY3R5cGUoKSBjb25z
dCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZW5jb2RpbmdUeXBlKCk7IH0KICAgICB2b2lkIHNldEVu
Y3R5cGUoY29uc3QgU3RyaW5nJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGb3JtRWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5p
ZGwKaW5kZXggMjViZTcxM2VhZjQxMGJiNGRmMzcxMzUxOTU5YTFmY2UyZTM1Y2M4MS4uYzlmNTMz
MWQ2Y2M1ZjYwNTU4ZTNhNjIyODg3N2YyNjk1ZTczNDI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1FbGVtZW50LmlkbApAQCAtMzIsNyArMzIsMTEgQEAKICAgICBbUmVmbGVjdF0gYXR0
cmlidXRlIGJvb2xlYW4gbm9WYWxpZGF0ZTsKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0
cmluZyB0YXJnZXQ7CiAKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgSFRNTENvbGxlY3Rpb24gZWxl
bWVudHM7CisjaWYgZGVmaW5lZChMQU5HVUFHRV9PQkpFQ1RJVkVfQykgJiYgTEFOR1VBR0VfT0JK
RUNUSVZFX0MKKyAgICBbSW1wbGVtZW50ZWRBcz1lbGVtZW50c0Zvck9iakNdIHJlYWRvbmx5IGF0
dHJpYnV0ZSBIVE1MQ29sbGVjdGlvbiBlbGVtZW50czsKKyNlbHNlCisgICAgcmVhZG9ubHkgYXR0
cmlidXRlIEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uIGVsZW1lbnRzOworI2VuZGlmCiAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgbGVuZ3RoOwogCiAgICAgZ2V0dGVyIEVsZW1lbnQgKHVu
c2lnbmVkIGxvbmcgaW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
T3B0aW9uc0NvbGxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0Nv
bGxlY3Rpb24uY3BwCmluZGV4IGQ5YWRhMDZiMzVhMDhmOTQ2MDBmMDExODU0MWFjYzM2YWMyMWM0
YjcuLmIzNmMzZjQ4MGNjZTVjNDY1YjBmZWNkZmM5MTdlZDE0OTEzMDlkYmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAKQEAgLTQzLDcgKzQzLDcg
QEAgdm9pZCBIVE1MT3B0aW9uc0NvbGxlY3Rpb246OmFkZChIVE1MRWxlbWVudCogZWxlbWVudCwg
SFRNTEVsZW1lbnQqIGJlZm9yZUVsZW1lbnQKIAogdm9pZCBIVE1MT3B0aW9uc0NvbGxlY3Rpb246
OmFkZChIVE1MRWxlbWVudCogZWxlbWVudCwgaW50IGJlZm9yZUluZGV4LCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKLSAgICBhZGQoZWxlbWVudCwgZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGl0ZW0oYmVm
b3JlSW5kZXgpKSwgZWMpOworICAgIGFkZChlbGVtZW50LCBpdGVtKGJlZm9yZUluZGV4KSwgZWMp
OwogfQogCiB2b2lkIEhUTUxPcHRpb25zQ29sbGVjdGlvbjo6cmVtb3ZlKGludCBpbmRleCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oCmluZGV4IGM1ZmQxN2Jm
NzI2N2YyNWI3NDVkNDA0ODMwZjg3ODViNGJkMWJiZmMuLjUzMWU1MWRiYjEwNzk4YTYyZGI3YzRk
ODI3N2QyMWQwYzUzM2M3ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9w
dGlvbnNDb2xsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0Nv
bGxlY3Rpb24uaApAQCAtNDAsNiArNDAsOSBAQCBwdWJsaWM6CiAgICAgSFRNTFNlbGVjdEVsZW1l
bnQmIHNlbGVjdEVsZW1lbnQoKSB7IHJldHVybiBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4o
b3duZXJOb2RlKCkpOyB9CiAgICAgY29uc3QgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdEVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4ob3duZXJOb2Rl
KCkpOyB9CiAKKyAgICB2aXJ0dWFsIEhUTUxPcHRpb25FbGVtZW50KiBpdGVtKHVuc2lnbmVkIG9m
ZnNldCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+
KENhY2hlZEhUTUxDb2xsZWN0aW9uPEhUTUxPcHRpb25zQ29sbGVjdGlvbiwgQ29sbGVjdGlvblR5
cGVUcmFpdHM8U2VsZWN0T3B0aW9ucz46OnRyYXZlcnNhbFR5cGU+OjppdGVtKG9mZnNldCkpOyB9
CisgICAgdmlydHVhbCBIVE1MT3B0aW9uRWxlbWVudCogbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZG93bmNhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnQ+KENhY2hlZEhUTUxDb2xsZWN0aW9uPEhUTUxPcHRpb25zQ29sbGVjdGlvbiwgQ29sbGVj
dGlvblR5cGVUcmFpdHM8U2VsZWN0T3B0aW9ucz46OnRyYXZlcnNhbFR5cGU+OjpuYW1lZEl0ZW0o
bmFtZSkpOyB9CisKICAgICB2b2lkIGFkZChIVE1MRWxlbWVudCosIEhUTUxFbGVtZW50KiBiZWZv
cmVFbGVtZW50LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBhZGQoSFRNTEVsZW1lbnQqLCBp
bnQgYmVmb3JlSW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHJlbW92ZShpbnQgaW5k
ZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rp
b24uaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaWRsCmlu
ZGV4IDI1ZDNkZDI5MDk4YmY5M2ZkMGFmYjBlNzQ5MmQ1MTM3NTU2OWJkZmIuLjMyMDc0ZWYyNDdk
OTg3N2JlZjZjMDgyZTI1ZDRhZjBhMzliOGQwZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxPcHRpb25zQ29sbGVjdGlvbi5pZGwKQEAgLTI2LDcgKzI2LDExIEBACiAgICAgYXR0cmli
dXRlIGxvbmcgc2VsZWN0ZWRJbmRleDsKICAgICBbQ3VzdG9tU2V0dGVyLCBTZXR0ZXJSYWlzZXNF
eGNlcHRpb25dIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKIAorI2lmIGRlZmluZWQo
TEFOR1VBR0VfT0JKRUNUSVZFX0MpICYmIExBTkdVQUdFX09CSkVDVElWRV9DCiAgICAgZ2V0dGVy
IE5vZGUgbmFtZWRJdGVtKFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgRE9NU3RyaW5nIG5h
bWUpOworI2Vsc2UKKyAgICBnZXR0ZXIgSFRNTE9wdGlvbkVsZW1lbnQgbmFtZWRJdGVtKFtEZWZh
dWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgRE9NU3RyaW5nIG5hbWUpOworI2VuZGlmCiAKICNpZiAo
IWRlZmluZWQoTEFOR1VBR0VfT0JKRUNUSVZFX0MpIHx8ICFMQU5HVUFHRV9PQkpFQ1RJVkVfQykg
JiYgKCFkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpIHx8ICFMQU5HVUFHRV9HT0JKRUNUKQogICAg
IFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgYWRkKEhUTUxFbGVtZW50IGVsZW1lbnQsIFtEZWZhdWx0
PVVuZGVmaW5lZF0gb3B0aW9uYWwgSFRNTEVsZW1lbnQ/IGJlZm9yZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCmluZGV4IDZlZTkzN2FiYzU2MTM3MjM4YWEyNTZk
ZjdlYmJiMjliOWYxZTEwMTguLjQ4YWVhYzdlMzdhNTYxNzAzZTU4YzEwZGNlZmMzNjU3ZDY2ZGI0
OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCkBAIC00MzUs
MTIgKzQzNSwxMiBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRTaXplKGludCBzaXplKQog
CiBIVE1MT3B0aW9uRWxlbWVudCogSFRNTFNlbGVjdEVsZW1lbnQ6Om5hbWVkSXRlbShjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUpCiB7Ci0gICAgcmV0dXJuIGRvd25jYXN0PEhUTUxPcHRpb25FbGVt
ZW50PihvcHRpb25zKCktPm5hbWVkSXRlbShuYW1lKSk7CisgICAgcmV0dXJuIG9wdGlvbnMoKS0+
bmFtZWRJdGVtKG5hbWUpOwogfQogCiBIVE1MT3B0aW9uRWxlbWVudCogSFRNTFNlbGVjdEVsZW1l
bnQ6Oml0ZW0odW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgcmV0dXJuIGRvd25jYXN0PEhUTUxPcHRp
b25FbGVtZW50PihvcHRpb25zKCktPml0ZW0oaW5kZXgpKTsKKyAgICByZXR1cm4gb3B0aW9ucygp
LT5pdGVtKGluZGV4KTsKIH0KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0T3B0aW9uKHVu
c2lnbmVkIGluZGV4LCBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uLCBFeGNlcHRpb25Db2RlJiBl
YykKQEAgLTQ0OSwxMyArNDQ5LDEzIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldE9wdGlv
bih1bnNpZ25lZCBpbmRleCwgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiwgRXhjCiAgICAgaWYg
KGluZGV4ID4gbWF4U2VsZWN0SXRlbXMgLSAxKQogICAgICAgICBpbmRleCA9IG1heFNlbGVjdEl0
ZW1zIC0gMTsKICAgICBpbnQgZGlmZiA9IGluZGV4IC0gbGVuZ3RoKCk7Ci0gICAgUmVmUHRyPEhU
TUxFbGVtZW50PiBiZWZvcmUgPSAwOworICAgIFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4gYmVm
b3JlOwogICAgIC8vIE91dCBvZiBhcnJheSBib3VuZHM/IEZpcnN0IGluc2VydCBlbXB0eSBkdW1t
aWVzLgogICAgIGlmIChkaWZmID4gMCkgewogICAgICAgICBzZXRMZW5ndGgoaW5kZXgsIGVjKTsK
ICAgICAgICAgLy8gUmVwbGFjZSBhbiBleGlzdGluZyBlbnRyeT8KICAgICB9IGVsc2UgaWYgKGRp
ZmYgPCAwKSB7Ci0gICAgICAgIGJlZm9yZSA9IGRvd25jYXN0PEhUTUxFbGVtZW50PihvcHRpb25z
KCktPml0ZW0oaW5kZXggKyAxKSk7CisgICAgICAgIGJlZm9yZSA9IG9wdGlvbnMoKS0+aXRlbShp
bmRleCArIDEpOwogICAgICAgICByZW1vdmVCeUluZGV4KGluZGV4KTsKICAgICB9CiAgICAgLy8g
RmluYWxseSBhZGQgdGhlIG5ldyBlbGVtZW50LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MU2VsZWN0RWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxl
Y3RFbGVtZW50LmlkbAppbmRleCBiYWNjNjU2Y2E1N2YzZTA0NWU2YWVmMzg2NjU0ODg3MGQ1YmYy
MGExLi4yOTU0NzZmMDcwMjQ0MGViZGIzMGU3YzNlNjZjNmIwYThjZmZiNmEwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmlkbApAQCAtMzksOCArMzksMTUgQEAKICNl
bHNlCiAgICAgW1NldHRlclJhaXNlc0V4Y2VwdGlvbl0gYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcg
bGVuZ3RoOwogI2VuZGlmCisKKyNpZiBkZWZpbmVkKExBTkdVQUdFX09CSkVDVElWRV9DKSAmJiBM
QU5HVUFHRV9PQkpFQ1RJVkVfQwogICAgIGdldHRlciBOb2RlIGl0ZW0odW5zaWduZWQgbG9uZyBp
bmRleCk7CiAgICAgTm9kZSBuYW1lZEl0ZW0oW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBE
T01TdHJpbmcgbmFtZSk7CisjZWxzZQorICAgIGdldHRlciBIVE1MT3B0aW9uRWxlbWVudCBpdGVt
KHVuc2lnbmVkIGxvbmcgaW5kZXgpOworICAgIEhUTUxPcHRpb25FbGVtZW50IG5hbWVkSXRlbShb
RGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIERPTVN0cmluZyBuYW1lKTsKKyNlbmRpZgorCiAg
ICAgW09iakNMZWdhY3lVbm5hbWVkUGFyYW1ldGVycywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIGFk
ZChIVE1MRWxlbWVudCBlbGVtZW50LCBbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIEhUTUxF
bGVtZW50PyBiZWZvcmUpOwogI2lmIGRlZmluZWQoTEFOR1VBR0VfSkFWQVNDUklQVCkgJiYgTEFO
R1VBR0VfSkFWQVNDUklQVAogICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgYWRkKEhUTUxFbGVt
ZW50IGVsZW1lbnQsIFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBpbmRleCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcAppbmRleCAyOGNkZGE4
NWUwMzMwNDc5OWMxNWU3ZDYzZGFiNDQ1Y2IyMWM1N2Q0Li5hNjdjMzg5Yjc2MWU2ZjZmMjVjZWQ2
NjVhYWM1MTAwNjEzYzkxZTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
YWJsZVJvd0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93
RWxlbWVudC5jcHAKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIEhUTUxUYWJsZVJvd0VsZW1lbnQ6
OmRlbGV0ZUNlbGwoaW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBpZiAoaW5kZXgg
PT0gLTEpCiAgICAgICAgIGluZGV4ID0gbnVtQ2VsbHMtMTsKICAgICBpZiAoaW5kZXggPj0gMCAm
JiBpbmRleCA8IG51bUNlbGxzKSB7Ci0gICAgICAgIFJlZlB0cjxOb2RlPiBjZWxsID0gY2hpbGRy
ZW4tPml0ZW0oaW5kZXgpOworICAgICAgICBSZWZQdHI8RWxlbWVudD4gY2VsbCA9IGNoaWxkcmVu
LT5pdGVtKGluZGV4KTsKICAgICAgICAgSFRNTEVsZW1lbnQ6OnJlbW92ZUNoaWxkKCpjZWxsLCBl
Yyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuY3BwCmluZGV4IGZkMDJjNjAy
Zjk0NmNmMzRkMTBlODNjMjIyMjQ4ZmEzODgwMTIzZWEuLmRmNTBmM2IzZTk0MTFjMWE5NWU2MmIw
YzA0M2UzMGNiY2M1ZTYzZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQuY3BwCkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnQ6OmRlbGV0ZVJvdyhpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIGlm
IChpbmRleCA9PSAtMSkKICAgICAgICAgaW5kZXggPSBudW1Sb3dzIC0gMTsKICAgICBpZiAoaW5k
ZXggPj0gMCAmJiBpbmRleCA8IG51bVJvd3MpIHsKLSAgICAgICAgUmVmUHRyPE5vZGU+IHJvdyA9
IGNoaWxkcmVuLT5pdGVtKGluZGV4KTsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHJvdyA9IGNo
aWxkcmVuLT5pdGVtKGluZGV4KTsKICAgICAgICAgSFRNTEVsZW1lbnQ6OnJlbW92ZUNoaWxkKCpy
b3csIGVjKTsKICAgICB9IGVsc2UKICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL1JhZGlvTm9kZUxpc3QuY3BwCmluZGV4IDVlNDAyNWVjYzA4ZDUzNjkzMDMzZDMw
N2ZkMjVmZGEzMjZkZTYyNDEuLjkwMjEzMjMxZWU1ODM3YjdiYzFmZDU3NTJjOGY2ZWVhNTRlMWJm
YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05vZGVMaXN0LmNwcApAQCAtMjcsNyArMjcsNiBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJhZGlvTm9kZUxpc3QuaCIKIAotI2lu
Y2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC01MCwyMCAr
NDksMjIgQEAgUmFkaW9Ob2RlTGlzdDo6flJhZGlvTm9kZUxpc3QoKQogICAgIG93bmVyTm9kZSgp
Lm5vZGVMaXN0cygpLT5yZW1vdmVDYWNoZVdpdGhBdG9taWNOYW1lKHRoaXMsIG1fbmFtZSk7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSFRNTElucHV0RWxlbWVudCogdG9SYWRpb0J1dHRvbklucHV0RWxl
bWVudChOb2RlKiBub2RlKQorc3RhdGljIGlubGluZSBIVE1MSW5wdXRFbGVtZW50KiB0b1JhZGlv
QnV0dG9uSW5wdXRFbGVtZW50KEhUTUxFbGVtZW50JiBlbGVtZW50KQogewotICAgIEFTU0VSVChu
b2RlLT5pc0VsZW1lbnROb2RlKCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVu
dCA9IG5vZGUtPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgaWYgKCFpbnB1dEVsZW1lbnQgfHwgIWlu
cHV0RWxlbWVudC0+aXNSYWRpb0J1dHRvbigpIHx8IGlucHV0RWxlbWVudC0+dmFsdWUoKS5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpbnB1dEVsZW1lbnQ7CisgICAg
aWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1M
SW5wdXRFbGVtZW50PihlbGVtZW50KTsKKyAgICBpZiAoIWlucHV0RWxlbWVudC5pc1JhZGlvQnV0
dG9uKCkgfHwgaW5wdXRFbGVtZW50LnZhbHVlKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICByZXR1cm4gJmlucHV0RWxlbWVudDsKIH0KIAogU3RyaW5nIFJhZGlvTm9k
ZUxpc3Q6OnZhbHVlKCkgY29uc3QKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoKCk7ICsraSkgewotICAgICAgICBOb2RlKiBub2RlID0gaXRlbShpKTsKLSAgICAgICAgY29u
c3QgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9SYWRpb0J1dHRvbklucHV0RWxl
bWVudChub2RlKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0byogaW5w
dXRFbGVtZW50ID0gdG9SYWRpb0J1dHRvbklucHV0RWxlbWVudCgqaXRlbShpKSk7CiAgICAgICAg
IGlmICghaW5wdXRFbGVtZW50IHx8ICFpbnB1dEVsZW1lbnQtPmNoZWNrZWQoKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICByZXR1cm4gaW5wdXRFbGVtZW50LT52YWx1ZSgpOwpAQCAt
NzMsOSArNzQsOSBAQCBTdHJpbmcgUmFkaW9Ob2RlTGlzdDo6dmFsdWUoKSBjb25zdAogCiB2b2lk
IFJhZGlvTm9kZUxpc3Q6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgTm9kZSogbm9k
ZSA9IGl0ZW0oaSk7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRv
UmFkaW9CdXR0b25JbnB1dEVsZW1lbnQobm9kZSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhp
cy0+bGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CisgICAgICAgIGF1dG8qIGlucHV0RWxlbWVudCA9IHRvUmFkaW9CdXR0b25JbnB1dEVsZW1lbnQo
Kml0ZW0oaSkpOwogICAgICAgICBpZiAoIWlucHV0RWxlbWVudCB8fCBpbnB1dEVsZW1lbnQtPnZh
bHVlKCkgIT0gdmFsdWUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaW5wdXRFbGVt
ZW50LT5zZXRDaGVja2VkKHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9S
YWRpb05vZGVMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3QuaAppbmRl
eCAzZmNjOTcwODI4MThiNjZiMDc0YmU4MTNiN2FhZmY4NzA4NjQzODhlLi43MWNmZmQ0YzgyOGY3
Y2M2ODgxOGM2ZDI4Nzg2ZTczODY5NjFkMWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL1JhZGlvTm9kZUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxp
c3QuaApAQCAtMjcsNiArMjcsNyBAQAogI2lmbmRlZiBSYWRpb05vZGVMaXN0X2gKICNkZWZpbmUg
UmFkaW9Ob2RlTGlzdF9oCiAKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkxp
dmVOb2RlTGlzdC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQXRvbWljU3RyaW5nLmg+CkBAIC00MCw3ICs0MSw5IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgUmFkaW9Ob2RlTGlzdChyb290Tm9kZSwgbmFtZSkpOwogICAg
IH0KIAotICAgIH5SYWRpb05vZGVMaXN0KCk7CisgICAgSFRNTEVsZW1lbnQqIGl0ZW0odW5zaWdu
ZWQgb2Zmc2V0KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBkb3duY2FzdDxIVE1MRWxlbWVudD4o
Q2FjaGVkTGl2ZU5vZGVMaXN0PFJhZGlvTm9kZUxpc3Q+OjppdGVtKG9mZnNldCkpOyB9CisKKyAg
ICB2aXJ0dWFsIH5SYWRpb05vZGVMaXN0KCk7CiAKICAgICBTdHJpbmcgdmFsdWUoKSBjb25zdDsK
ICAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9SYWRpb05vZGVMaXN0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9O
b2RlTGlzdC5pZGwKaW5kZXggYzBlZDMyYzdjYTgyNzRjNmQzMWNjNGIzYzVhZTgzYjRlNTczMzBk
ZC4uMzczYjI0NDc3MjZkNDljMDhmZTg1M2M5ZGU4MGRhOGIzYmZiYTIzMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05vZGVMaXN0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL1JhZGlvTm9kZUxpc3QuaWRsCkBAIC0yOSw1ICsyOSw1IEBACiBdIGludGVyZmFjZSBS
YWRpb05vZGVMaXN0IDogTm9kZUxpc3QgewogICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgdmFsdWU7
CiAKLSAgICBnZXR0ZXIgTm9kZSAodW5zaWduZWQgbG9uZyBpbmRleCk7CisgICAgZ2V0dGVyIEhU
TUxFbGVtZW50ICh1bnNpZ25lZCBsb25nIGluZGV4KTsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263592</attachid>
            <date>2015-10-20 11:01:03 -0700</date>
            <delta_ts>2015-10-20 11:49:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150347-20151020110020.patch</filename>
            <type>text/plain</type>
            <size>26885</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxMzQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDI5Njg3MTVhYjRhODcw
MzdjOGIzZTllZDg0MTQ3OThmZDllYmFmOC4uN2MyNjAwYjc4ZjU3NWM2Zjg2MmM4NTM5NWE4NDQx
YjliN2VlZmIzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDE1LTEwLTIwICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIHRpZ2h0ZXIgdHlwaW5n
IGZvciBjb2xsZWN0aW9ucyAvIG5vZGUgbGlzdHMnIGl0ZW0oKSAvIG5hbWVkSXRlbSgpIG1ldGhv
ZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDM0
NworCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFVzZSB0aWdo
dGVyIHR5cGluZyBmb3IgY29sbGVjdGlvbnMgLyBub2RlIGxpc3RzJyBpdGVtKCkgLyBuYW1lZEl0
ZW0oKSBtZXRob2RzLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmdldERvY3VtZW50TGlua3MpOgorICAgICAgICAqIGRvbS9MaXZlTm9kZUxpc3QuaDoKKyAg
ICAgICAgKiBkb20vU3RhdGljTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGlj
RWxlbWVudExpc3Q6Oml0ZW0pOgorICAgICAgICAqIGRvbS9TdGF0aWNOb2RlTGlzdC5oOgorICAg
ICAgICAqIGh0bWwvQ2FjaGVkSFRNTENvbGxlY3Rpb24uaDoKKyAgICAgICAgKiBodG1sL0hUTUxB
bGxDb2xsZWN0aW9uLmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxDb2xsZWN0aW9uLmlkbDoKKyAg
ICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZpZWxkU2V0RWxlbWVudDo6ZWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZp
ZWxkU2V0RWxlbWVudDo6ZWxlbWVudHNGb3JPYmpDKToKKyAgICAgICAgKiBodG1sL0hUTUxGaWVs
ZFNldEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaWRsOgor
ICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb246OmN1c3RvbUVsZW1lbnRBZnRlcik6
CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5oOgorICAgICAgICAq
IGh0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaWRsOgorICAgICAgICAqIGh0bWwvSFRN
TEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6aXRl
bSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmVsZW1lbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6ZWxlbWVudHNGb3JPYmpDKToKKyAgICAgICAg
KiBodG1sL0hUTUxGb3JtRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50
LmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MT3B0aW9uc0NvbGxlY3Rpb246OmFkZCk6CisgICAgICAgICogaHRtbC9I
VE1MT3B0aW9uc0NvbGxlY3Rpb24uaDoKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25zQ29sbGVj
dGlvbi5pZGw6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6bmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxTZWxlY3RFbGVtZW50OjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxl
Y3RFbGVtZW50OjpzZXRPcHRpb24pOgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQu
aWRsOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVGFibGVSb3dFbGVtZW50OjpkZWxldGVDZWxsKToKKyAgICAgICAgKiBodG1s
L0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50OjpkZWxldGVSb3cpOgorICAgICAgICAqIGh0bWwvUmFkaW9Ob2RlTGlz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1JhZGlvQnV0dG9uSW5wdXRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJhZGlvTm9kZUxpc3Q6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJhZGlvTm9kZUxpc3Q6OnNldFZhbHVlKToKKyAgICAgICAgKiBodG1sL1JhZGlvTm9kZUxpc3Qu
aDoKKyAgICAgICAgKiBodG1sL1JhZGlvTm9kZUxpc3QuaWRsOgorCiAyMDE1LTEwLTIwICBDc2Fi
YSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgRml4IHRoZSAhRU5B
QkxFKENTU19HUklEX0xBWU9VVCkgYnVpbGQgYWZ0ZXIgcjE5MTEyOApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHAKaW5kZXggNDQ0NDVhM2QzMmE4NTk1NDI3MmYxMTczNGI0NGNjNGZjZDNhZDM4NC4uZDVkM2I2
NDQ3MDRmNDE4MDllMzhjMzAyNjI4NWRhOTM2NDY3NjFlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
CkBAIC0xNzgwLDE5ICsxNzgwLDE4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
Z2V0RG9jdW1lbnRMaW5rcyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHJlCiB7CiAgICAg
RG9jdW1lbnQmIGRvY3VtZW50ID0gbV9yZW5kZXJlci0+ZG9jdW1lbnQoKTsKICAgICBSZWY8SFRN
TENvbGxlY3Rpb24+IGxpbmtzID0gZG9jdW1lbnQubGlua3MoKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBOb2RlKiBjdXJyID0gbGlua3MtPml0ZW0oaSk7IGkrKykgewotICAgICAgICBSZW5k
ZXJPYmplY3QqIG9iaiA9IGN1cnItPnJlbmRlcmVyKCk7Ci0gICAgICAgIGlmIChvYmopIHsKLSAg
ICAgICAgICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBheG9iaiA9IGRvY3VtZW50LmF4
T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUob2JqKTsKLSAgICAgICAgICAgIEFTU0VSVChheG9i
aik7Ci0gICAgICAgICAgICBpZiAoIWF4b2JqLT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgJiYg
YXhvYmotPmlzTGluaygpKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYXhvYmopOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGF1dG8qIGN1cnJlbnQgPSBsaW5rcy0+aXRlbShpKTsg
KytpKSB7CisgICAgICAgIGlmIChhdXRvKiByZW5kZXJlciA9IGN1cnJlbnQtPnJlbmRlcmVyKCkp
IHsKKyAgICAgICAgICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBheE9iamVjdCA9IGRv
Y3VtZW50LmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUocmVuZGVyZXIpOworICAgICAgICAg
ICAgQVNTRVJUKGF4T2JqZWN0KTsKKyAgICAgICAgICAgIGlmICghYXhPYmplY3QtPmFjY2Vzc2li
aWxpdHlJc0lnbm9yZWQoKSAmJiBheE9iamVjdC0+aXNMaW5rKCkpCisgICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChheE9iamVjdCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBO
b2RlKiBwYXJlbnQgPSBjdXJyLT5wYXJlbnROb2RlKCk7Ci0gICAgICAgICAgICBpZiAoaXM8SFRN
TEFyZWFFbGVtZW50PigqY3VycikgJiYgaXM8SFRNTE1hcEVsZW1lbnQ+KHBhcmVudCkpIHsKKyAg
ICAgICAgICAgIGF1dG8qIHBhcmVudCA9IGN1cnJlbnQtPnBhcmVudE5vZGUoKTsKKyAgICAgICAg
ICAgIGlmIChpczxIVE1MQXJlYUVsZW1lbnQ+KCpjdXJyZW50KSAmJiBpczxIVE1MTWFwRWxlbWVu
dD4ocGFyZW50KSkgewogICAgICAgICAgICAgICAgIGF1dG8mIGFyZWFPYmplY3QgPSBkb3duY2Fz
dDxBY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rPigqYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0
ZShJbWFnZU1hcExpbmtSb2xlKSk7CiAgICAgICAgICAgICAgICAgSFRNTE1hcEVsZW1lbnQmIG1h
cCA9IGRvd25jYXN0PEhUTUxNYXBFbGVtZW50PigqcGFyZW50KTsKLSAgICAgICAgICAgICAgICBh
cmVhT2JqZWN0LnNldEhUTUxBcmVhRWxlbWVudChkb3duY2FzdDxIVE1MQXJlYUVsZW1lbnQ+KGN1
cnIpKTsKKyAgICAgICAgICAgICAgICBhcmVhT2JqZWN0LnNldEhUTUxBcmVhRWxlbWVudChkb3du
Y2FzdDxIVE1MQXJlYUVsZW1lbnQ+KGN1cnJlbnQpKTsKICAgICAgICAgICAgICAgICBhcmVhT2Jq
ZWN0LnNldEhUTUxNYXBFbGVtZW50KCZtYXApOwogICAgICAgICAgICAgICAgIGFyZWFPYmplY3Qu
c2V0UGFyZW50KGFjY2Vzc2liaWxpdHlQYXJlbnRGb3JJbWFnZU1hcCgmbWFwKSk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9MaXZlTm9kZUxpc3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9MaXZlTm9kZUxpc3QuaAppbmRleCBkZGQyODVhZTQ0NjI2MDQ5YmY3ODdlNTM4MTBhN2Rh
YjIwNTFhMmEyLi4yNTMyNmViYzIwZDE2ZjVmZDc4NmU0OWNkMThiZTg1MzgwZGNmZTdmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTGl2ZU5vZGVMaXN0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0xpdmVOb2RlTGlzdC5oCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIH5DYWNoZWRMaXZlTm9kZUxpc3QoKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNv
bnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG1faW5kZXhDYWNoZS5ub2RlQ291bnQobm9kZUxp
c3QoKSk7IH0KLSAgICBOb2RlKiBpdGVtKHVuc2lnbmVkIG9mZnNldCkgY29uc3Qgb3ZlcnJpZGUg
ZmluYWwgeyByZXR1cm4gbV9pbmRleENhY2hlLm5vZGVBdChub2RlTGlzdCgpLCBvZmZzZXQpOyB9
CisgICAgRWxlbWVudCogaXRlbSh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1faW5kZXhDYWNoZS5ub2RlQXQobm9kZUxpc3QoKSwgb2Zmc2V0KTsgfQogCiAgICAgLy8g
Rm9yIENvbGxlY3Rpb25JbmRleENhY2hlCiAgICAgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvciBj
b2xsZWN0aW9uQmVnaW4oKSBjb25zdCB7IHJldHVybiBDb2xsZWN0aW9uVHJhdmVyc2FsPENvbGxl
Y3Rpb25UcmF2ZXJzYWxUeXBlOjpEZXNjZW5kYW50cz46OmJlZ2luKG5vZGVMaXN0KCksIHJvb3RO
b2RlKCkpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljTm9kZUxpc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY05vZGVMaXN0LmNwcAppbmRleCA2YzY4YzZl
MjliZGNlNmFlOTVkNTNkODc5ODk3ZWM2NmViZDdlZTlhLi40YWZmMmNlNWYzZWNmMjYxMzk0NTUy
NmU1ZmY2ZWNmNmFkMzA4MDZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3RhdGlj
Tm9kZUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNOb2RlTGlzdC5jcHAK
QEAgLTQ4LDcgKzQ4LDcgQEAgdW5zaWduZWQgU3RhdGljRWxlbWVudExpc3Q6Omxlbmd0aCgpIGNv
bnN0CiAgICAgcmV0dXJuIG1fZWxlbWVudHMuc2l6ZSgpOwogfQogCi1Ob2RlKiBTdGF0aWNFbGVt
ZW50TGlzdDo6aXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKK0VsZW1lbnQqIFN0YXRpY0VsZW1l
bnRMaXN0OjppdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAogewogICAgIGlmIChpbmRleCA8IG1f
ZWxlbWVudHMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxFbGVtZW50Kj4obV9l
bGVtZW50c1tpbmRleF0ucHRyKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1N0
YXRpY05vZGVMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljTm9kZUxpc3QuaAppbmRl
eCBiYmY5M2Q1NzM1ZDE1ZWRlMGVhNjViZTg3YWYzYWFkZWU4NTYzMDkxLi4yYThhMGFjMzVlMzUx
YTk0MWI5MzQ2NjllZWJkZjNhZjkzYjQ3N2JiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU3RhdGljTm9kZUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljTm9kZUxp
c3QuaApAQCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdmlydHVhbCB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIE5vZGUqIGl0ZW0odW5z
aWduZWQgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgRWxlbWVudCogaXRlbSh1
bnNpZ25lZCBpbmRleCkgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgU3RhdGljRWxl
bWVudExpc3QoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9DYWNoZWRIVE1MQ29s
bGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DYWNoZWRIVE1MQ29sbGVjdGlvbi5oCmlu
ZGV4IDgxNzYwMjBiMTExZjRlNmM3Y2Y0ZDVlYjQ0NWMzM2RlYTA0N2NiNjMuLmRjYjAyMmIxYmNj
ODIzZDEzMzQzYWU4ZDY1ZTc1MzYzMTliNTBiNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvQ2FjaGVkSFRNTENvbGxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Nh
Y2hlZEhUTUxDb2xsZWN0aW9uLmgKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgfkNhY2hlZEhUTUxDb2xsZWN0aW9uKCk7CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0
aCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG1faW5kZXhDYWNoZS5ub2RlQ291bnQo
Y29sbGVjdGlvbigpKTsgfQotICAgIHZpcnR1YWwgRWxlbWVudCogaXRlbSh1bnNpZ25lZCBvZmZz
ZXQpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG1faW5kZXhDYWNoZS5ub2RlQXQoY29s
bGVjdGlvbigpLCBvZmZzZXQpOyB9CisgICAgdmlydHVhbCBFbGVtZW50KiBpdGVtKHVuc2lnbmVk
IG9mZnNldCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9pbmRleENhY2hlLm5vZGVBdChjb2xs
ZWN0aW9uKCksIG9mZnNldCk7IH0KICAgICB2aXJ0dWFsIEVsZW1lbnQqIG5hbWVkSXRlbShjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgc2l6ZV90
IG1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBtX2luZGV4Q2FjaGUu
bWVtb3J5Q29zdCgpICsgSFRNTENvbGxlY3Rpb246Om1lbW9yeUNvc3QoKTsgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEFsbENvbGxlY3Rpb24uaWRsCmluZGV4IGE4ZTQ0MzRlYjNiY2YxODA3
MmJmNmVlNTEzMzk3NTBjYTA5YTI5ODEuLmJjNWU2M2FiMmFhMmFjYjg5MzI3NWNlYjUyOGM3NTU5
ZmU1MTE4NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFsbENvbGxlY3Rp
b24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFsbENvbGxlY3Rpb24uaWRsCkBA
IC0yOSw4ICsyOSw4IEBACiAgICAgR2VuZXJhdGVJc1JlYWNoYWJsZT1JbXBsT3duZXJOb2RlUm9v
dCwKIF0gaW50ZXJmYWNlIEhUTUxBbGxDb2xsZWN0aW9uIHsKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7Ci0gICAgW0N1c3RvbV0gZ2V0dGVyIE5vZGUgaXRlbShb
RGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotICAgIFtD
dXN0b21dIGdldHRlciBOb2RlIG5hbWVkSXRlbShET01TdHJpbmcgbmFtZSk7CisgICAgW0N1c3Rv
bV0gZ2V0dGVyIEVsZW1lbnQgaXRlbShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIHVuc2ln
bmVkIGxvbmcgaW5kZXgpOworICAgIFtDdXN0b21dIGdldHRlciBFbGVtZW50IG5hbWVkSXRlbShE
T01TdHJpbmcgbmFtZSk7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJldHVybiBhbiBIVE1M
QWxsQ29sbGVjdGlvbi4KICAgICBOb2RlTGlzdCB0YWdzKERPTVN0cmluZyBuYW1lKTsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uaWRsCmluZGV4IGIzZTc4ZmIxMGIzOTQxOTVk
NGY3YjhmYzA3ZTIyMTNjMjg5NWM1ZGMuLjljOTBiNjU2MzM1ODRkZTRiZmJjZWNiMWEzMTAzNTY3
NmY3YzNiNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24u
aWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uaWRsCkBAIC0yNSw4
ICsyNSwxNCBAQAogICAgIFJlcG9ydEV4dHJhTWVtb3J5Q29zdCwKIF0gaW50ZXJmYWNlIEhUTUxD
b2xsZWN0aW9uIHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7
CisKKyNpZiBkZWZpbmVkKExBTkdVQUdFX09CSkVDVElWRV9DKSAmJiBMQU5HVUFHRV9PQkpFQ1RJ
VkVfQwogICAgIGdldHRlciBOb2RlIGl0ZW0oW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCB1
bnNpZ25lZCBsb25nIGluZGV4KTsKICAgICBnZXR0ZXIgTm9kZSBuYW1lZEl0ZW0oW0RlZmF1bHQ9
VW5kZWZpbmVkXSBvcHRpb25hbCBET01TdHJpbmcgbmFtZSk7CisjZWxzZQorICAgIGdldHRlciBF
bGVtZW50IGl0ZW0oW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCB1bnNpZ25lZCBsb25nIGlu
ZGV4KTsKKyAgICBnZXR0ZXIgRWxlbWVudCBuYW1lZEl0ZW0oW0RlZmF1bHQ9VW5kZWZpbmVkXSBv
cHRpb25hbCBET01TdHJpbmcgbmFtZSk7CisjZW5kaWYKIAogI2lmIGRlZmluZWQoTEFOR1VBR0Vf
T0JKRUNUSVZFX0MpICYmIExBTkdVQUdFX09CSkVDVElWRV9DCiAgICAgTm9kZUxpc3QgdGFncyhb
RGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIERPTVN0cmluZyBuYW1lKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwCmluZGV4IDJmNmFiZjA4Y2U4YzFlM2Rk
ODY0ODNmOTFkMmRhMzkwM2UyMTk3YjkuLmExNjFhMmQxOGU0YjlkNTY3MWUzOTJiNjVjNTUyMDhm
Y2QwMzE4MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNw
cApAQCAtMTYwLDExICsxNjAsMTYgQEAgSFRNTExlZ2VuZEVsZW1lbnQqIEhUTUxGaWVsZFNldEVs
ZW1lbnQ6OmxlZ2VuZCgpIGNvbnN0CiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SFRNTExlZ2VuZEVs
ZW1lbnQqPihjaGlsZHJlbk9mVHlwZTxIVE1MTGVnZW5kRWxlbWVudD4oKnRoaXMpLmZpcnN0KCkp
OwogfQogCi1SZWY8SFRNTENvbGxlY3Rpb24+IEhUTUxGaWVsZFNldEVsZW1lbnQ6OmVsZW1lbnRz
KCkKK1JlZjxIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbj4gSFRNTEZpZWxkU2V0RWxlbWVudDo6
ZWxlbWVudHMoKQogewogICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLmVuc3VyZU5vZGVMaXN0
cygpLmFkZENhY2hlZENvbGxlY3Rpb248SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24+KCp0aGlz
LCBGb3JtQ29udHJvbHMpOwogfQogCitSZWY8SFRNTENvbGxlY3Rpb24+IEhUTUxGaWVsZFNldEVs
ZW1lbnQ6OmVsZW1lbnRzRm9yT2JqQygpCit7CisgICAgcmV0dXJuIGVsZW1lbnRzKCk7Cit9CisK
IHZvaWQgSFRNTEZpZWxkU2V0RWxlbWVudDo6cmVmcmVzaEVsZW1lbnRzSWZOZWVkZWQoKSBjb25z
dAogewogICAgIHVpbnQ2NF90IGRvY3VtZW50VmVyc2lvbiA9IGRvY3VtZW50KCkuZG9tVHJlZVZl
cnNpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmgKaW5kZXgg
MGQ0ZTM2NzA2ZjE2YWMwZWJkY2JlYzA2ODljOTQwYmVlY2Q5ZDdmNS4uM2I1MTZhNTNhMjlmMjli
ZTE4YzMzZWNkMWIzMjk2NjQ2ZDA0MjM3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRmllbGRTZXRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmll
bGRTZXRFbGVtZW50LmgKQEAgLTMwLDE0ICszMCwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ7Ci1jbGFzcyBIVE1MQ29sbGVjdGlvbjsKK2Ns
YXNzIEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOwogCiBjbGFzcyBIVE1MRmllbGRTZXRFbGVt
ZW50IGZpbmFsIDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgewogcHVibGljOgogICAg
IHN0YXRpYyBSZWY8SFRNTEZpZWxkU2V0RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCYsIEhUTUxGb3JtRWxlbWVudCopOwogCiAgICAgSFRNTExlZ2VuZEVsZW1l
bnQqIGxlZ2VuZCgpIGNvbnN0OwotICAgIFJlZjxIVE1MQ29sbGVjdGlvbj4gZWxlbWVudHMoKTsK
KworICAgIFJlZjxIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbj4gZWxlbWVudHMoKTsKKyAgICBS
ZWY8SFRNTENvbGxlY3Rpb24+IGVsZW1lbnRzRm9yT2JqQygpOwogCiAgICAgY29uc3QgVmVjdG9y
PEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBhc3NvY2lhdGVkRWxlbWVudHMoKSBjb25zdDsKICAg
ICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVs
ZFNldEVsZW1lbnQuaWRsCmluZGV4IDZjNWE2MTE0ZjNiZmRkMGNhNWVlYzI5MjE5ODUwM2MzZmNj
MTdlYWIuLjIxM2QxYTRmMDk2OGE5NzM5NDJkNWFjZWNjNzdkYzhjZTE1NjYyMjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5pZGwKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmlkbApAQCAtMjQsNyArMjQsMTEg
QEAgaW50ZXJmYWNlIEhUTUxGaWVsZFNldEVsZW1lbnQgOiBIVE1MRWxlbWVudCB7CiAKICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHR5cGU7CiAKLSAgICByZWFkb25seSBhdHRyaWJ1
dGUgSFRNTENvbGxlY3Rpb24gZWxlbWVudHM7CisjaWYgZGVmaW5lZChMQU5HVUFHRV9PQkpFQ1RJ
VkVfQykgJiYgTEFOR1VBR0VfT0JKRUNUSVZFX0MKKyAgICBbSW1wbGVtZW50ZWRBcz1lbGVtZW50
c0Zvck9iakNdIHJlYWRvbmx5IGF0dHJpYnV0ZSBIVE1MQ29sbGVjdGlvbiBlbGVtZW50czsKKyNl
bHNlCisgICAgcmVhZG9ubHkgYXR0cmlidXRlIEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uIGVs
ZW1lbnRzOworI2VuZGlmCiAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiAgICAgICAg
IHdpbGxWYWxpZGF0ZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgVmFsaWRpdHlTdGF0ZSAgIHZh
bGlkaXR5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xz
Q29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbHNDb2xs
ZWN0aW9uLmNwcAppbmRleCAxOTM2MDJkNmM5YzBiNWJmMDVlODU4YzNmMzkwNWVlNzQyODkyMThi
Li4zNmY3MzNkNTRkNjIxYmRhMjY2MmM3NDZjYTBjMzg1ZTg0NDNhMmFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcApAQCAtNzYs
NyArNzYsNyBAQCBzdGF0aWMgdW5zaWduZWQgZmluZEZvcm1Bc3NvY2lhdGVkRWxlbWVudChjb25z
dCBWZWN0b3I8Rm9ybUFzc29jaWF0ZWRFbGVtZW50Kj4mCiAgICAgcmV0dXJuIGVsZW1lbnRzLnNp
emUoKTsKIH0KIAotRWxlbWVudCogSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb246OmN1c3RvbUVs
ZW1lbnRBZnRlcihFbGVtZW50KiBjdXJyZW50KSBjb25zdAorSFRNTEVsZW1lbnQqIEhUTUxGb3Jt
Q29udHJvbHNDb2xsZWN0aW9uOjpjdXN0b21FbGVtZW50QWZ0ZXIoRWxlbWVudCogY3VycmVudCkg
Y29uc3QKIHsKICAgICBjb25zdCBWZWN0b3I8Rm9ybUFzc29jaWF0ZWRFbGVtZW50Kj4mIGVsZW1l
bnRzID0gZm9ybUNvbnRyb2xFbGVtZW50cygpOwogICAgIHVuc2lnbmVkIHN0YXJ0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5oCmluZGV4IGMw
ZDUyMGY2YWYyMWRhZTRiZDIxZGZiMTIyMDA3ODcxOGQ1NDQyYWUuLjgwMjdiZGU5ZGEyN2ZhZDNh
ZTZlYTQ0ZDVkMTVjYzE5NTc2MGZkZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmgKQEAgLTM5LDggKzM5LDEwIEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgUmVmPEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uPiBjcmVhdGUoQ29udGFpbmVy
Tm9kZSYsIENvbGxlY3Rpb25UeXBlKTsKICAgICB2aXJ0dWFsIH5IVE1MRm9ybUNvbnRyb2xzQ29s
bGVjdGlvbigpOwogCisgICAgdmlydHVhbCBIVE1MRWxlbWVudCogaXRlbSh1bnNpZ25lZCBvZmZz
ZXQpIGNvbnN0IG92ZXJyaWRlOworCiAgICAgLy8gRm9yIENhY2hlZEhUTUxDb2xsZWN0aW9uLgot
ICAgIEVsZW1lbnQqIGN1c3RvbUVsZW1lbnRBZnRlcihFbGVtZW50KikgY29uc3Q7CisgICAgSFRN
TEVsZW1lbnQqIGN1c3RvbUVsZW1lbnRBZnRlcihFbGVtZW50KikgY29uc3Q7CiAKIHByaXZhdGU6
CiAgICAgZXhwbGljaXQgSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24oQ29udGFpbmVyTm9kZSYp
OwpAQCAtNTYsNiArNTgsMTEgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIHVuc2lnbmVkIG1fY2Fj
aGVkRWxlbWVudE9mZnNldEluQXJyYXk7CiB9OwogCitpbmxpbmUgSFRNTEVsZW1lbnQqIEhUTUxG
b3JtQ29udHJvbHNDb2xsZWN0aW9uOjppdGVtKHVuc2lnbmVkIG9mZnNldCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KENhY2hlZEhUTUxDb2xsZWN0aW9uPEhUTUxG
b3JtQ29udHJvbHNDb2xsZWN0aW9uLCBDb2xsZWN0aW9uVHlwZVRyYWl0czxGb3JtQ29udHJvbHM+
Ojp0cmF2ZXJzYWxUeXBlPjo6aXRlbShvZmZzZXQpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0hUTUxDT0xMRUNUSU9OKEhUTUxGb3JtQ29u
dHJvbHNDb2xsZWN0aW9uLCBGb3JtQ29udHJvbHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaWRsCmluZGV4IDM3NWQyN2Y4MDYxNGQ1NDVm
YmMzMzI1MWQzZjE5ODkzM2NlYWM2ZDEuLjQ5ODE5NDE4YjBhOTY4M2VjZDQyZTAxMjk1Mjg3Zjg5
YTU1ODBlOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9s
c0NvbGxlY3Rpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9s
c0NvbGxlY3Rpb24uaWRsCkBAIC0yMSw2ICsyMSw2IEBACiBbCiAgICAgR2VuZXJhdGVJc1JlYWNo
YWJsZT1JbXBsT3duZXJOb2RlUm9vdCwKIF0gaW50ZXJmYWNlIEhUTUxGb3JtQ29udHJvbHNDb2xs
ZWN0aW9uIDogSFRNTENvbGxlY3Rpb24gewotICAgIGdldHRlciBOb2RlIChbRGVmYXVsdD1VbmRl
ZmluZWRdIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotICAgIFtDdXN0b21dIGdldHRl
ciBOb2RlIG5hbWVkSXRlbShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIERPTVN0cmluZyBu
YW1lKTsKKyAgICBnZXR0ZXIgSFRNTEVsZW1lbnQgKFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9u
YWwgdW5zaWduZWQgbG9uZyBpbmRleCk7CisgICAgW0N1c3RvbV0gZ2V0dGVyIEhUTUxFbGVtZW50
IG5hbWVkSXRlbShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIERPTVN0cmluZyBuYW1lKTsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKaW5kZXggNWY2MmNmN2Q4
ZGE3MTI4ZmJmYTRhNzY4MDdjMTg4OTUzYjEzNzcxYy4uYzg2MDdiYzU5ZGYzZDJlMDEyMjY5ZDk0
YjFhNDhiZDE5MWIyMWFjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9y
bUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNw
cApAQCAtMTcyLDcgKzE3Miw3IEBAIHVuc2lnbmVkIEhUTUxGb3JtRWxlbWVudDo6bGVuZ3RoKCkg
Y29uc3QKICAgICByZXR1cm4gbGVuOwogfQogCi1Ob2RlKiBIVE1MRm9ybUVsZW1lbnQ6Oml0ZW0o
dW5zaWduZWQgaW5kZXgpCitIVE1MRWxlbWVudCogSFRNTEZvcm1FbGVtZW50OjppdGVtKHVuc2ln
bmVkIGluZGV4KQogewogICAgIHJldHVybiBlbGVtZW50cygpLT5pdGVtKGluZGV4KTsKIH0KQEAg
LTYzNCwxMSArNjM0LDE2IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZW1vdmVJbWdFbGVtZW50
KEhUTUxJbWFnZUVsZW1lbnQqIGUpCiAgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVk
KTsKIH0KIAotUmVmPEhUTUxDb2xsZWN0aW9uPiBIVE1MRm9ybUVsZW1lbnQ6OmVsZW1lbnRzKCkK
K1JlZjxIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbj4gSFRNTEZvcm1FbGVtZW50OjplbGVtZW50
cygpCiB7CiAgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCkuZW5zdXJlTm9kZUxpc3RzKCkuYWRk
Q2FjaGVkQ29sbGVjdGlvbjxIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbj4oKnRoaXMsIEZvcm1D
b250cm9scyk7CiB9CiAKK1JlZjxIVE1MQ29sbGVjdGlvbj4gSFRNTEZvcm1FbGVtZW50OjplbGVt
ZW50c0Zvck9iakMoKQoreworICAgIHJldHVybiBlbGVtZW50cygpOworfQorCiBTdHJpbmcgSFRN
TEZvcm1FbGVtZW50OjpuYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0TmFtZUF0dHJpYnV0
ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgKaW5kZXggZDAxNTgxZGViZjAx
ZTgyNTY2NjU3ZWQyZDM5OGJlZTE3YWRkZDM4Ny4uMzZiNjU5ZDMwMzQ5YzAxZmU0MmMxNDQyMjE0
NWExNGI1ZmZkMmYxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCkBAIC00
MCw2ICs0MCw3IEBAIGNsYXNzIEV2ZW50OwogY2xhc3MgRm9ybUFzc29jaWF0ZWRFbGVtZW50Owog
Y2xhc3MgRm9ybURhdGE7CiBjbGFzcyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OworY2xhc3MgSFRN
TEZvcm1Db250cm9sc0NvbGxlY3Rpb247CiBjbGFzcyBIVE1MSW1hZ2VFbGVtZW50OwogY2xhc3Mg
SFRNTElucHV0RWxlbWVudDsKIGNsYXNzIFRleHRFbmNvZGluZzsKQEAgLTUwLDExICs1MSwxMiBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxIVE1MRm9ybUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKICAgICB2aXJ0dWFsIH5IVE1MRm9ybUVsZW1lbnQo
KTsKIAotICAgIFJlZjxIVE1MQ29sbGVjdGlvbj4gZWxlbWVudHMoKTsKKyAgICBSZWY8SFRNTEZv
cm1Db250cm9sc0NvbGxlY3Rpb24+IGVsZW1lbnRzKCk7CisgICAgUmVmPEhUTUxDb2xsZWN0aW9u
PiBlbGVtZW50c0Zvck9iakMoKTsKICAgICBWZWN0b3I8UmVmPEVsZW1lbnQ+PiBuYW1lZEVsZW1l
bnRzKGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7
Ci0gICAgTm9kZSogaXRlbSh1bnNpZ25lZCBpbmRleCk7CisgICAgSFRNTEVsZW1lbnQqIGl0ZW0o
dW5zaWduZWQgaW5kZXgpOwogCiAgICAgU3RyaW5nIGVuY3R5cGUoKSBjb25zdCB7IHJldHVybiBt
X2F0dHJpYnV0ZXMuZW5jb2RpbmdUeXBlKCk7IH0KICAgICB2b2lkIHNldEVuY3R5cGUoY29uc3Qg
U3RyaW5nJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVu
dC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5pZGwKaW5kZXggMjVi
ZTcxM2VhZjQxMGJiNGRmMzcxMzUxOTU5YTFmY2UyZTM1Y2M4MS4uYzlmNTMzMWQ2Y2M1ZjYwNTU4
ZTNhNjIyODg3N2YyNjk1ZTczNDI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVt
ZW50LmlkbApAQCAtMzIsNyArMzIsMTEgQEAKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIGJvb2xl
YW4gbm9WYWxpZGF0ZTsKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyB0YXJnZXQ7
CiAKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgSFRNTENvbGxlY3Rpb24gZWxlbWVudHM7CisjaWYg
ZGVmaW5lZChMQU5HVUFHRV9PQkpFQ1RJVkVfQykgJiYgTEFOR1VBR0VfT0JKRUNUSVZFX0MKKyAg
ICBbSW1wbGVtZW50ZWRBcz1lbGVtZW50c0Zvck9iakNdIHJlYWRvbmx5IGF0dHJpYnV0ZSBIVE1M
Q29sbGVjdGlvbiBlbGVtZW50czsKKyNlbHNlCisgICAgcmVhZG9ubHkgYXR0cmlidXRlIEhUTUxG
b3JtQ29udHJvbHNDb2xsZWN0aW9uIGVsZW1lbnRzOworI2VuZGlmCiAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIGxvbmcgbGVuZ3RoOwogCiAgICAgZ2V0dGVyIEVsZW1lbnQgKHVuc2lnbmVkIGxvbmcg
aW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxl
Y3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3Bw
CmluZGV4IGQ5YWRhMDZiMzVhMDhmOTQ2MDBmMDExODU0MWFjYzM2YWMyMWM0YjcuLmIzNmMzZjQ4
MGNjZTVjNDY1YjBmZWNkZmM5MTdlZDE0OTEzMDlkYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBIVE1M
T3B0aW9uc0NvbGxlY3Rpb246OmFkZChIVE1MRWxlbWVudCogZWxlbWVudCwgSFRNTEVsZW1lbnQq
IGJlZm9yZUVsZW1lbnQKIAogdm9pZCBIVE1MT3B0aW9uc0NvbGxlY3Rpb246OmFkZChIVE1MRWxl
bWVudCogZWxlbWVudCwgaW50IGJlZm9yZUluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAg
ICBhZGQoZWxlbWVudCwgZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGl0ZW0oYmVmb3JlSW5kZXgpKSwg
ZWMpOworICAgIGFkZChlbGVtZW50LCBpdGVtKGJlZm9yZUluZGV4KSwgZWMpOwogfQogCiB2b2lk
IEhUTUxPcHRpb25zQ29sbGVjdGlvbjo6cmVtb3ZlKGludCBpbmRleCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oCmluZGV4IGM1ZmQxN2JmNzI2N2YyNWI3NDVk
NDA0ODMwZjg3ODViNGJkMWJiZmMuLmZjNmFhMjUwN2Q0OTIzNmNlNzEzNTMwMDM2MWU4MzMxOGEz
Yjk0YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaApA
QCAtNDAsNiArNDAsOSBAQCBwdWJsaWM6CiAgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdEVs
ZW1lbnQoKSB7IHJldHVybiBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4ob3duZXJOb2RlKCkp
OyB9CiAgICAgY29uc3QgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdEVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4ob3duZXJOb2RlKCkpOyB9CiAKKyAg
ICB2aXJ0dWFsIEhUTUxPcHRpb25FbGVtZW50KiBpdGVtKHVuc2lnbmVkIG9mZnNldCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCBIVE1MT3B0aW9uRWxlbWVudCogbmFtZWRJdGVtKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3Qgb3ZlcnJpZGU7CisKICAgICB2b2lkIGFkZChIVE1M
RWxlbWVudCosIEhUTUxFbGVtZW50KiBiZWZvcmVFbGVtZW50LCBFeGNlcHRpb25Db2RlJik7CiAg
ICAgdm9pZCBhZGQoSFRNTEVsZW1lbnQqLCBpbnQgYmVmb3JlSW5kZXgsIEV4Y2VwdGlvbkNvZGUm
KTsKICAgICB2b2lkIHJlbW92ZShpbnQgaW5kZXgpOwpAQCAtNTcsNiArNjAsMTYgQEAgcHJpdmF0
ZToKICAgICBleHBsaWNpdCBIVE1MT3B0aW9uc0NvbGxlY3Rpb24oSFRNTFNlbGVjdEVsZW1lbnQm
KTsKIH07CiAKK2lubGluZSBIVE1MT3B0aW9uRWxlbWVudCogSFRNTE9wdGlvbnNDb2xsZWN0aW9u
OjppdGVtKHVuc2lnbmVkIG9mZnNldCkgY29uc3QKK3sKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRN
TE9wdGlvbkVsZW1lbnQ+KENhY2hlZEhUTUxDb2xsZWN0aW9uPEhUTUxPcHRpb25zQ29sbGVjdGlv
biwgQ29sbGVjdGlvblR5cGVUcmFpdHM8U2VsZWN0T3B0aW9ucz46OnRyYXZlcnNhbFR5cGU+Ojpp
dGVtKG9mZnNldCkpOworfQorCitpbmxpbmUgSFRNTE9wdGlvbkVsZW1lbnQqIEhUTUxPcHRpb25z
Q29sbGVjdGlvbjo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKK3sK
KyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KENhY2hlZEhUTUxDb2xsZWN0
aW9uPEhUTUxPcHRpb25zQ29sbGVjdGlvbiwgQ29sbGVjdGlvblR5cGVUcmFpdHM8U2VsZWN0T3B0
aW9ucz46OnRyYXZlcnNhbFR5cGU+OjpuYW1lZEl0ZW0obmFtZSkpOworfQorCiBpbmxpbmUgYm9v
bCBIVE1MT3B0aW9uc0NvbGxlY3Rpb246OmVsZW1lbnRNYXRjaGVzKEVsZW1lbnQmIGVsZW1lbnQp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlv
blRhZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25zQ29sbGVj
dGlvbi5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5pZGwK
aW5kZXggMjVkM2RkMjkwOThiZjkzZmQwYWZiMGU3NDkyZDUxMzc1NTY5YmRmYi4uMzIwNzRlZjI0
N2Q5ODc3YmVmNmMwODJlMjVkNGFmMGEzOWI4ZDBlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmlkbApAQCAtMjYsNyArMjYsMTEgQEAKICAgICBhdHRy
aWJ1dGUgbG9uZyBzZWxlY3RlZEluZGV4OwogICAgIFtDdXN0b21TZXR0ZXIsIFNldHRlclJhaXNl
c0V4Y2VwdGlvbl0gYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwogCisjaWYgZGVmaW5l
ZChMQU5HVUFHRV9PQkpFQ1RJVkVfQykgJiYgTEFOR1VBR0VfT0JKRUNUSVZFX0MKICAgICBnZXR0
ZXIgTm9kZSBuYW1lZEl0ZW0oW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBET01TdHJpbmcg
bmFtZSk7CisjZWxzZQorICAgIGdldHRlciBIVE1MT3B0aW9uRWxlbWVudCBuYW1lZEl0ZW0oW0Rl
ZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBET01TdHJpbmcgbmFtZSk7CisjZW5kaWYKIAogI2lm
ICghZGVmaW5lZChMQU5HVUFHRV9PQkpFQ1RJVkVfQykgfHwgIUxBTkdVQUdFX09CSkVDVElWRV9D
KSAmJiAoIWRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgfHwgIUxBTkdVQUdFX0dPQkpFQ1QpCiAg
ICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBhZGQoSFRNTEVsZW1lbnQgZWxlbWVudCwgW0RlZmF1
bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBIVE1MRWxlbWVudD8gYmVmb3JlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKaW5kZXggNmVlOTM3YWJjNTYxMzcyMzhhYTI1
NmRmN2ViYmIyOWI5ZjFlMTAxOC4uNzU0MmZiYWRlY2E4MmM2ZjViOThmMmI5YWI0YmFlYTU4MDIw
MTM5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKQEAgLTQz
NSwxMiArNDM1LDEyIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldFNpemUoaW50IHNpemUp
CiAKIEhUTUxPcHRpb25FbGVtZW50KiBIVE1MU2VsZWN0RWxlbWVudDo6bmFtZWRJdGVtKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKLSAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnQ+KG9wdGlvbnMoKS0+bmFtZWRJdGVtKG5hbWUpKTsKKyAgICByZXR1cm4gb3B0aW9ucygp
LT5uYW1lZEl0ZW0obmFtZSk7CiB9CiAKIEhUTUxPcHRpb25FbGVtZW50KiBIVE1MU2VsZWN0RWxl
bWVudDo6aXRlbSh1bnNpZ25lZCBpbmRleCkKIHsKLSAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE9w
dGlvbkVsZW1lbnQ+KG9wdGlvbnMoKS0+aXRlbShpbmRleCkpOworICAgIHJldHVybiBvcHRpb25z
KCktPml0ZW0oaW5kZXgpOwogfQogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRPcHRpb24o
dW5zaWduZWQgaW5kZXgsIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24sIEV4Y2VwdGlvbkNvZGUm
IGVjKQpAQCAtNDQ5LDEzICs0NDksMTMgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0T3B0
aW9uKHVuc2lnbmVkIGluZGV4LCBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uLCBFeGMKICAgICBp
ZiAoaW5kZXggPiBtYXhTZWxlY3RJdGVtcyAtIDEpCiAgICAgICAgIGluZGV4ID0gbWF4U2VsZWN0
SXRlbXMgLSAxOwogICAgIGludCBkaWZmID0gaW5kZXggLSBsZW5ndGgoKTsKLSAgICBSZWZQdHI8
SFRNTEVsZW1lbnQ+IGJlZm9yZSA9IDA7CisgICAgUmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiBi
ZWZvcmU7CiAgICAgLy8gT3V0IG9mIGFycmF5IGJvdW5kcz8gRmlyc3QgaW5zZXJ0IGVtcHR5IGR1
bW1pZXMuCiAgICAgaWYgKGRpZmYgPiAwKSB7CiAgICAgICAgIHNldExlbmd0aChpbmRleCwgZWMp
OwogICAgICAgICAvLyBSZXBsYWNlIGFuIGV4aXN0aW5nIGVudHJ5PwogICAgIH0gZWxzZSBpZiAo
ZGlmZiA8IDApIHsKLSAgICAgICAgYmVmb3JlID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG9wdGlv
bnMoKS0+aXRlbShpbmRleCArIDEpKTsKKyAgICAgICAgYmVmb3JlID0gaXRlbShpbmRleCArIDEp
OwogICAgICAgICByZW1vdmVCeUluZGV4KGluZGV4KTsKICAgICB9CiAgICAgLy8gRmluYWxseSBh
ZGQgdGhlIG5ldyBlbGVtZW50LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
U2VsZWN0RWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50
LmlkbAppbmRleCBiYWNjNjU2Y2E1N2YzZTA0NWU2YWVmMzg2NjU0ODg3MGQ1YmYyMGExLi4yOTU0
NzZmMDcwMjQ0MGViZGIzMGU3YzNlNjZjNmIwYThjZmZiNmEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTZWxlY3RFbGVtZW50LmlkbApAQCAtMzksOCArMzksMTUgQEAKICNlbHNlCiAgICAg
W1NldHRlclJhaXNlc0V4Y2VwdGlvbl0gYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwog
I2VuZGlmCisKKyNpZiBkZWZpbmVkKExBTkdVQUdFX09CSkVDVElWRV9DKSAmJiBMQU5HVUFHRV9P
QkpFQ1RJVkVfQwogICAgIGdldHRlciBOb2RlIGl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCk7CiAg
ICAgTm9kZSBuYW1lZEl0ZW0oW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBET01TdHJpbmcg
bmFtZSk7CisjZWxzZQorICAgIGdldHRlciBIVE1MT3B0aW9uRWxlbWVudCBpdGVtKHVuc2lnbmVk
IGxvbmcgaW5kZXgpOworICAgIEhUTUxPcHRpb25FbGVtZW50IG5hbWVkSXRlbShbRGVmYXVsdD1V
bmRlZmluZWRdIG9wdGlvbmFsIERPTVN0cmluZyBuYW1lKTsKKyNlbmRpZgorCiAgICAgW09iakNM
ZWdhY3lVbm5hbWVkUGFyYW1ldGVycywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIGFkZChIVE1MRWxl
bWVudCBlbGVtZW50LCBbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIEhUTUxFbGVtZW50PyBi
ZWZvcmUpOwogI2lmIGRlZmluZWQoTEFOR1VBR0VfSkFWQVNDUklQVCkgJiYgTEFOR1VBR0VfSkFW
QVNDUklQVAogICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgYWRkKEhUTUxFbGVtZW50IGVsZW1l
bnQsIFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBpbmRleCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcAppbmRleCAyOGNkZGE4NWUwMzMwNDc5
OWMxNWU3ZDYzZGFiNDQ1Y2IyMWM1N2Q0Li5kZDBiYmJmYTYzMDA4ZjViZmJhZDZlNDJlZjAzOGZi
Yjc4ZjliNDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd0Vs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5j
cHAKQEAgLTEzMiwxMCArMTMyLDkgQEAgdm9pZCBIVE1MVGFibGVSb3dFbGVtZW50OjpkZWxldGVD
ZWxsKGludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgaW50IG51bUNlbGxzID0gY2hp
bGRyZW4tPmxlbmd0aCgpOwogICAgIGlmIChpbmRleCA9PSAtMSkKICAgICAgICAgaW5kZXggPSBu
dW1DZWxscy0xOwotICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgbnVtQ2VsbHMpIHsKLSAg
ICAgICAgUmVmUHRyPE5vZGU+IGNlbGwgPSBjaGlsZHJlbi0+aXRlbShpbmRleCk7Ci0gICAgICAg
IEhUTUxFbGVtZW50OjpyZW1vdmVDaGlsZCgqY2VsbCwgZWMpOwotICAgIH0gZWxzZQorICAgIGlm
IChpbmRleCA+PSAwICYmIGluZGV4IDwgbnVtQ2VsbHMpCisgICAgICAgIEhUTUxFbGVtZW50Ojpy
ZW1vdmVDaGlsZCgqY2hpbGRyZW4tPml0ZW0oaW5kZXgpLCBlYyk7CisgICAgZWxzZQogICAgICAg
ICBlYyA9IElOREVYX1NJWkVfRVJSOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQuY3BwCmluZGV4IGZkMDJjNjAyZjk0NmNmMzRkMTBlODNjMjIy
MjQ4ZmEzODgwMTIzZWEuLmJlODQyNDVjMjhlMWNmNDJkNGQ1MWFjZjRiNzBiZDkyMDU1ZGFmOGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuY3Bw
CkBAIC04NywxMCArODcsOSBAQCB2b2lkIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpkZWxldGVS
b3coaW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBpbnQgbnVtUm93cyA9IGNoaWxk
cmVuLT5sZW5ndGgoKTsKICAgICBpZiAoaW5kZXggPT0gLTEpCiAgICAgICAgIGluZGV4ID0gbnVt
Um93cyAtIDE7Ci0gICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCBudW1Sb3dzKSB7Ci0gICAg
ICAgIFJlZlB0cjxOb2RlPiByb3cgPSBjaGlsZHJlbi0+aXRlbShpbmRleCk7Ci0gICAgICAgIEhU
TUxFbGVtZW50OjpyZW1vdmVDaGlsZCgqcm93LCBlYyk7Ci0gICAgfSBlbHNlCisgICAgaWYgKGlu
ZGV4ID49IDAgJiYgaW5kZXggPCBudW1Sb3dzKQorICAgICAgICBIVE1MRWxlbWVudDo6cmVtb3Zl
Q2hpbGQoKmNoaWxkcmVuLT5pdGVtKGluZGV4KSwgZWMpOworICAgIGVsc2UKICAgICAgICAgZWMg
PSBJTkRFWF9TSVpFX0VSUjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9S
YWRpb05vZGVMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5jcHAK
aW5kZXggMjgyNWZmMmQ3NmIxMGU2MDY3YTE3ZmU3OGU3Yjg5MWM5ZjljZWE3YS4uYzE0NGY5OWNk
MTNjMmM5ZWQ0OGYzYjYwZGVlYzRhNGQwNmMzYTU3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9SYWRpb05vZGVMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlv
Tm9kZUxpc3QuY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiUmFkaW9Ob2RlTGlzdC5oIgogCi0jaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKQEAgLTUwLDEyICs0OSwxMiBAQCBSYWRpb05vZGVMaXN0Ojp+UmFk
aW9Ob2RlTGlzdCgpCiAgICAgb3duZXJOb2RlKCkubm9kZUxpc3RzKCktPnJlbW92ZUNhY2hlV2l0
aEF0b21pY05hbWUodGhpcywgbV9uYW1lKTsKIH0KIAotc3RhdGljIGlubGluZSBIVE1MSW5wdXRF
bGVtZW50KiB0b1JhZGlvQnV0dG9uSW5wdXRFbGVtZW50KE5vZGUmIG5vZGUpCitzdGF0aWMgaW5s
aW5lIEhUTUxJbnB1dEVsZW1lbnQqIHRvUmFkaW9CdXR0b25JbnB1dEVsZW1lbnQoSFRNTEVsZW1l
bnQmIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSkKKyAg
ICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIGF1dG8mIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1l
bnQ+KG5vZGUpOworICAgIGF1dG8mIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQ+KGVsZW1lbnQpOwogICAgIGlmICghaW5wdXRFbGVtZW50LmlzUmFkaW9CdXR0b24oKSB8
fCBpbnB1dEVsZW1lbnQudmFsdWUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIHJldHVybiAmaW5wdXRFbGVtZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9SYWRpb05vZGVMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3Qu
aAppbmRleCAzZmNjOTcwODI4MThiNjZiMDc0YmU4MTNiN2FhZmY4NzA4NjQzODhlLi5lOTA3MGYw
MTBlNTgwZmQ4MWMxOTk0YzAzZjBkZWU5M2FlOTVlMjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL1JhZGlvTm9kZUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlv
Tm9kZUxpc3QuaApAQCAtMjcsNiArMjcsNyBAQAogI2lmbmRlZiBSYWRpb05vZGVMaXN0X2gKICNk
ZWZpbmUgUmFkaW9Ob2RlTGlzdF9oCiAKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1
ZGUgIkxpdmVOb2RlTGlzdC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CkBAIC00MCw3ICs0MSw5IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmFkaW9Ob2RlTGlzdChyb290Tm9kZSwgbmFtZSkp
OwogICAgIH0KIAotICAgIH5SYWRpb05vZGVMaXN0KCk7CisgICAgdmlydHVhbCB+UmFkaW9Ob2Rl
TGlzdCgpOworCisgICAgSFRNTEVsZW1lbnQqIGl0ZW0odW5zaWduZWQgb2Zmc2V0KSBjb25zdCBv
dmVycmlkZTsKIAogICAgIFN0cmluZyB2YWx1ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0VmFsdWUo
Y29uc3QgU3RyaW5nJik7CkBAIC01Niw2ICs1OSwxMSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9p
c1Jvb3RlZEF0RG9jdW1lbnQ7CiB9OwogCitpbmxpbmUgSFRNTEVsZW1lbnQqIFJhZGlvTm9kZUxp
c3Q6Oml0ZW0odW5zaWduZWQgb2Zmc2V0KSBjb25zdAoreworICAgIHJldHVybiBkb3duY2FzdDxI
VE1MRWxlbWVudD4oQ2FjaGVkTGl2ZU5vZGVMaXN0PFJhZGlvTm9kZUxpc3Q+OjppdGVtKG9mZnNl
dCkpOworfQorCiB9IC8vIG5hbWVwc2FjZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlv
Tm9kZUxpc3QuaWRsCmluZGV4IGMwZWQzMmM3Y2E4Mjc0YzZkMzFjYzRiM2M1YWU4M2I0ZTU3MzMw
ZGQuLjM3M2IyNDQ3NzI2ZDQ5YzA4ZmU4NTNjOWRlODBkYThiM2JmYmEyMzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9SYWRpb05vZGVMaXN0LmlkbApAQCAtMjksNSArMjksNSBAQAogXSBpbnRlcmZhY2Ug
UmFkaW9Ob2RlTGlzdCA6IE5vZGVMaXN0IHsKICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHZhbHVl
OwogCi0gICAgZ2V0dGVyIE5vZGUgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOworICAgIGdldHRlciBI
VE1MRWxlbWVudCAodW5zaWduZWQgbG9uZyBpbmRleCk7CiB9Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>