<?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>44354</bug_id>
          
          <creation_ts>2010-08-20 14:13:49 -0700</creation_ts>
          <short_desc>Cairo and EFL port shouldn&apos;t depend on glib.</short_desc>
          <delta_ts>2010-08-26 15:43:58 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</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>0</everconfirmed>
          <reporter name="Rafael Antognolli">antognolli+webkit</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>darin</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hyatt</cc>
    
    <cc>mrobinson</cc>
    
    <cc>wnwu</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>267403</commentid>
    <comment_count>0</comment_count>
    <who name="Rafael Antognolli">antognolli+webkit</who>
    <bug_when>2010-08-20 14:13:49 -0700</bug_when>
    <thetext>Since the commit http://trac.webkit.org/changeset/65530 these ports now depend on glib. That&apos;s because of the specialised reference pointers GRefPtr (that is used for glib stuff) that were added for cairo.

Is it possible to do the same kind of specialised pointer but using just RefPtr? I couldn&apos;t find any place in WebCore code that does this. If it&apos;s not, could we just avoid using this, or maybe just ifdef the code? I can send a patch for this if necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267431</commentid>
    <comment_count>1</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-08-20 14:45:47 -0700</bug_when>
    <thetext>In this case, it appears that WebKitGTK+ is loading a stale copy of the inspector files for the tests. I should have a patch up shortly. Sorry for the noise!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267432</commentid>
    <comment_count>2</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-08-20 14:45:59 -0700</bug_when>
    <thetext>Whoops. Wrong bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267507</commentid>
    <comment_count>3</comment_count>
      <attachid>65015</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-08-20 19:21:30 -0700</bug_when>
    <thetext>Created attachment 65015
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267508</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-08-20 19:31:51 -0700</bug_when>
    <thetext>GRefPtr needs to be independent of GLib so that ports with other platform-specific reference-counted types can use it. I&apos;ve attached a patch that effectively renames it PlatformRefPtr. I&apos;m not stuck on the name and feel it&apos;s a bit long, but this should fix the build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267909</commentid>
    <comment_count>5</comment_count>
      <attachid>65015</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-08-23 07:57:03 -0700</bug_when>
    <thetext>Comment on attachment 65015
Patch

hrrmm... I liked the original idea of doing a typedef PlatformRefPtr GRefPtr, what happened to it? How about PRefPtr? Naming this might be a good thing to take to the mailing list, I think. Also, clever trick with GVariant. I dislike that but I guess the hit on build performance is big enough that it outweights my dislike =(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267913</commentid>
    <comment_count>6</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-08-23 08:10:50 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 65015 [details])
&gt; hrrmm... I liked the original idea of doing a typedef PlatformRefPtr GRefPtr, what happened to it?

I found that I couldn&apos;t do the typedef, because C++ doesn&apos;t support making a typedef of a templated type (you can only typdef a specific specialization).

&gt; How about PRefPtr? Naming this might be a good thing to take to the mailing list, I think. 

I&apos;m fine with PRefPtr or even leaving it as GRefPtr, if others like it. The renaming is fairly easy. I&apos;ll make a post!

&gt; Also, clever trick with GVariant. I dislike that but I guess the hit on build performance is big enough that it outweights my dislike =(

I was inspired to do this, because not using glib header in the include was one of the original conditions of the r+ of the original GRefPtr patch. I still think the best solution involves precopiled prefix headers thought! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269069</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-08-25 00:51:36 -0700</bug_when>
    <thetext>*** Bug 44561 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269334</commentid>
    <comment_count>8</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-08-25 10:38:45 -0700</bug_when>
    <thetext>I think this makes sense in general, and I don&apos;t have any problem with the name in the Patch (PlatRefPtr would also be OK). If it&apos;s still here tomorrow (my) morning I&apos;ll review it for real.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269339</commentid>
    <comment_count>9</comment_count>
      <attachid>65015</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-08-25 10:43:55 -0700</bug_when>
    <thetext>Comment on attachment 65015
Patch

OK, let&apos;s move forward! =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269348</commentid>
    <comment_count>10</comment_count>
      <attachid>65015</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-08-25 11:00:25 -0700</bug_when>
    <thetext>Comment on attachment 65015
Patch

Clearing flags on attachment: 65015

Committed r66024: &lt;http://trac.webkit.org/changeset/66024&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269349</commentid>
    <comment_count>11</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-08-25 11:00:31 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269646</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-25 18:03:32 -0700</bug_when>
    <thetext>I think it’s a strange choice to rename GRefPtr to PlatformRefPtr. I don’t understand what the “platform” is in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270080</commentid>
    <comment_count>13</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-08-26 13:28:58 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; I think it’s a strange choice to rename GRefPtr to PlatformRefPtr. I don’t understand what the “platform” is in this case.

The reasoning is we began using GRefPtr for non-glib-specific ref-counted types in backends used by several ports that ont necessarily use glib (in this case Cairo). The name &apos;Platform&apos; comes from these types being platform-specific (or rather port specific). We could keep GRefPtr as it was for glib types, and add a CairoRefPtr that would be cairo-specific , but that seemed wasteful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270091</commentid>
    <comment_count>14</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-08-26 13:44:25 -0700</bug_when>
    <thetext>I should also say that I&apos;m open to suggestions for renaming this template. It seems that it may one day combine with JSRetainPtr in which case PlatformRefPtr makes less sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270105</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-26 14:01:27 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; The reasoning is we began using GRefPtr for non-glib-specific ref-counted types in backends used by several ports that ont necessarily use glib (in this case Cairo). The name &apos;Platform&apos; comes from these types being platform-specific (or rather port specific). We could keep GRefPtr as it was for glib types, and add a CairoRefPtr that would be cairo-specific , but that seemed wasteful.

So you’re saying there’s no chance that a single port might some day want to use GLib and Cairo as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270126</commentid>
    <comment_count>16</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-08-26 14:42:23 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; So you’re saying there’s no chance that a single port might some day want to use GLib and Cairo as well?

Not really. GTK+ currently uses both glib and cairo, I meant some other ports (like the redistributable windows port and EFL) use only Cairo, so GRefPtr did not make sense for them as a name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270154</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-26 15:26:54 -0700</bug_when>
    <thetext>Either we can make a version of RefPtr that automatically knows how to do the right thing, or we should have a pointer named CairoRefPtr. This PlatformRefPtr name concept makes no sense to me. I must be missing something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270165</commentid>
    <comment_count>18</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-08-26 15:39:49 -0700</bug_when>
    <thetext>Brent Fulgham had made another patch which just specialized RefPtr for cairo types. Does it make sense to simply remove PlatformRefPtr/GRefPtr and to just rely on template specializations of RefPtr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270168</commentid>
    <comment_count>19</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-08-26 15:43:58 -0700</bug_when>
    <thetext>Here&apos;s a link to the original series of comments about why this was implemented separately from RefPtr (in this case, it was for the GLib OwnPtr, which resulted in a separate GLib RefPtr later on): https://bugs.webkit.org/show_bug.cgi?id=20483#c2</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65015</attachid>
            <date>2010-08-20 19:21:30 -0700</date>
            <delta_ts>2010-08-25 11:00:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44354-20100820192133.patch</filename>
            <type>text/plain</type>
            <size>50764</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAzNzhmNDUwNzlhYjI3ODdjYWQxNWFjMzFiYjYwMzg3ZTNiZDE2YjYzLi5m
NWYzMWU1NjllMWYyOGU0MzczZDhiZDM2MWNiY2Y2ZWQ5MzAwYmVkIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDAgQEAKKzIwMTAtMDgtMjAgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IENhaXJvIGFuZCBFRkwgcG9ydCBzaG91bGRuJ3QgZGVwZW5kIG9uIGdsaWIuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDM1NAorCisgICAgICAgIFJl
cGxhY2UgR1JlZlB0ciB3aXRoIFBsYXRmb3JtUmVmUHRyLiBLZWVwIEdMaWIgc3BlY2lmaWMgYml0
cyBpbgorICAgICAgICBHUmVmUHRyLmguCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRk
IFBsYXRmb3JtUmVmUHRyLmggdG8gdGhlIHNvdXJjZSBsaXN0LgorICAgICAgICAqIHd0Zi9QbGF0
Zm9ybVJlZlB0ci5oOiBNaWdyYXRlZCBmcm9tIEdSZWZQdHIuaC4KKyAgICAgICAgKFdURjo6UGxh
dGZvcm1SZWZQdHI6OlBsYXRmb3JtUmVmUHRyKTogRGl0dG8uCisgICAgICAgIChXVEY6OlBsYXRm
b3JtUmVmUHRyOjp+UGxhdGZvcm1SZWZQdHIpOiBEaXR0by4KKyAgICAgICAgKFdURjo6UGxhdGZv
cm1SZWZQdHI6OmNsZWFyKTogRGl0dG8uCisgICAgICAgIChXVEY6OlBsYXRmb3JtUmVmUHRyOjpn
ZXQpOiBEaXR0by4KKyAgICAgICAgKFdURjo6UGxhdGZvcm1SZWZQdHI6Om9wZXJhdG9yKik6IERp
dHRvLgorICAgICAgICAoV1RGOjpQbGF0Zm9ybVJlZlB0cjo6b3BlcmF0b3ItPik6IERpdHRvLgor
ICAgICAgICAoV1RGOjpQbGF0Zm9ybVJlZlB0cjo6b3BlcmF0b3IhKTogRGl0dG8uCisgICAgICAg
IChXVEY6OlBsYXRmb3JtUmVmUHRyOjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKTogRGl0
dG8uCisgICAgICAgIChXVEY6OlBsYXRmb3JtUmVmUHRyOjpoYXNoVGFibGVEZWxldGVkVmFsdWUp
OiBEaXR0by4KKyAgICAgICAgKFdURjo6OjpvcGVyYXRvcik6IERpdHRvLgorICAgICAgICAoV1RG
Ojo6OnN3YXApOiBEaXR0by4KKyAgICAgICAgKFdURjo6c3dhcCk6IERpdHRvLgorICAgICAgICAo
V1RGOjpvcGVyYXRvcj09KTogRGl0dG8uCisgICAgICAgIChXVEY6Om9wZXJhdG9yIT0pOiBEaXR0
by4KKyAgICAgICAgKFdURjo6c3RhdGljX3BvaW50ZXJfY2FzdCk6IERpdHRvLgorICAgICAgICAo
V1RGOjpjb25zdF9wb2ludGVyX2Nhc3QpOiBEaXR0by4KKyAgICAgICAgKFdURjo6Z2V0UHRyKTog
RGl0dG8uCisgICAgICAgIChXVEY6OmFkb3B0UGxhdGZvcm1SZWYpOiBEaXR0by4KKyAgICAgICAg
KiB3dGYvZ29iamVjdC9HUmVmUHRyLmNwcDogQ2hhbmdlcyB0byByZWZsZWN0IG5ldyBuYW1lcy4K
KyAgICAgICAgKFdURjo6cmVmUGxhdGZvcm1QdHIpOgorICAgICAgICAoV1RGOjpkZXJlZlBsYXRm
b3JtUHRyKToKKyAgICAgICAgKiB3dGYvZ29iamVjdC9HUmVmUHRyLmg6IERpdHRvLgorICAgICAg
ICAoV1RGOjpyZWZQbGF0Zm9ybVB0cik6CisgICAgICAgIChXVEY6OmRlcmVmUGxhdGZvcm1QdHIp
OgorCiAyMDEwLTA4LTE5ICBBbmRyZWFzIEtsaW5nICA8YW5kcmVhcy5rbGluZ0Bub2tpYS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbSBiL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFt
CmluZGV4IGZhZTg1ZTFiZTI3YWVmNDRiMjdlZDE5MDQzOGE4ZTE5MzRjZDVlOTkuLmVjZDdmZmVl
MTZhMDk0MjU1MjFiOTY2ODJlYTRiYjUxMDY0ZGMzY2QgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCkBA
IC00NjksNiArNDY5LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJSmF2YVNjcmlw
dENvcmUvd3RmL1Bhc3NPd25QdHIuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NSZWZQdHIu
aCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggXAorCUphdmFTY3JpcHRDb3JlL3d0
Zi9QbGF0Zm9ybVJlZlB0ci5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvUG9zc2libHlOdWxsLmgg
XAogCUphdmFTY3JpcHRDb3JlL3d0Zi9SYW5kb21OdW1iZXIuY3BwIFwKIAlKYXZhU2NyaXB0Q29y
ZS93dGYvUmFuZG9tTnVtYmVyLmggXApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL1Bs
YXRmb3JtUmVmUHRyLmggYi9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm1SZWZQdHIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yZDA1YWM5MmEzMjBmYjcxMmQwMmE1NmM3NzY1ZDI4ZmY2NWE3NmY5Ci0tLSAvZGV2
L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtUmVmUHRyLmgKQEAgLTAsMCAr
MSwxOTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggQ29s
bGFib3JhIEx0ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydGluIFJvYmluc29uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCisjaWZuZGVmIFBsYXRmb3JtUmVmUHRyX2gKKyNkZWZpbmUgUGxhdGZvcm1SZWZQ
dHJfaAorCisjaW5jbHVkZSAiQWx3YXlzSW5saW5lLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgor
CituYW1lc3BhY2UgV1RGIHsKKworZW51bSBQbGF0Zm9ybVJlZlB0ckFkb3B0VHlwZSB7IFBsYXRm
b3JtUmVmUHRyQWRvcHQgfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogcmVmUGxh
dGZvcm1QdHIoVCopOwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIGRlcmVmUGxh
dGZvcm1QdHIoVCopOwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBsYXRmb3JtUmVmUHRy
OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFBsYXRmb3JtUmVmUHRyPFQ+IGFkb3B0UGxhdGZvcm1S
ZWYoVCopOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUGxhdGZvcm1SZWZQdHIgewor
cHVibGljOgorICAgIFBsYXRmb3JtUmVmUHRyKCkgOiBtX3B0cigwKSB7IH0KKworICAgIFBsYXRm
b3JtUmVmUHRyKFQqIHB0cikKKyAgICAgICAgOiBtX3B0cihwdHIpCisgICAgeworICAgICAgICBp
ZiAocHRyKQorICAgICAgICAgICAgcmVmUGxhdGZvcm1QdHIocHRyKTsKKyAgICB9CisKKyAgICBQ
bGF0Zm9ybVJlZlB0cihjb25zdCBQbGF0Zm9ybVJlZlB0ciYgbykKKyAgICAgICAgOiBtX3B0cihv
Lm1fcHRyKQorICAgIHsKKyAgICAgICAgaWYgKFQqIHB0ciA9IG1fcHRyKQorICAgICAgICAgICAg
cmVmUGxhdGZvcm1QdHIocHRyKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4g
UGxhdGZvcm1SZWZQdHIoY29uc3QgUGxhdGZvcm1SZWZQdHI8VT4mIG8pCisgICAgICAgIDogbV9w
dHIoby5nZXQoKSkKKyAgICB7CisgICAgICAgIGlmIChUKiBwdHIgPSBtX3B0cikKKyAgICAgICAg
ICAgIHJlZlBsYXRmb3JtUHRyKHB0cik7CisgICAgfQorCisgICAgflBsYXRmb3JtUmVmUHRyKCkK
KyAgICB7CisgICAgICAgIGlmIChUKiBwdHIgPSBtX3B0cikKKyAgICAgICAgICAgIGRlcmVmUGxh
dGZvcm1QdHIocHRyKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAg
IFQqIHB0ciA9IG1fcHRyOworICAgICAgICBtX3B0ciA9IDA7CisgICAgICAgIGlmIChwdHIpCisg
ICAgICAgICAgICBkZXJlZlBsYXRmb3JtUHRyKHB0cik7CisgICAgfQorCisgICAgVCogZ2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9wdHI7IH0KKyAgICBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVy
biAqbV9wdHI7IH0KKyAgICBBTFdBWVNfSU5MSU5FIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJl
dHVybiBtX3B0cjsgfQorCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9w
dHI7IH0KKworICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1wbGljaXQg
Y29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4KKyAgICB0
eXBlZGVmIFQqIFBsYXRmb3JtUmVmUHRyOjoqVW5zcGVjaWZpZWRCb29sVHlwZTsKKyAgICBvcGVy
YXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9wdHIgPyAmUGxhdGZv
cm1SZWZQdHI6Om1fcHRyIDogMDsgfQorCisgICAgUGxhdGZvcm1SZWZQdHImIG9wZXJhdG9yPShj
b25zdCBQbGF0Zm9ybVJlZlB0ciYpOworICAgIFBsYXRmb3JtUmVmUHRyJiBvcGVyYXRvcj0oVCop
OworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBQbGF0Zm9ybVJlZlB0ciYgb3BlcmF0b3I9KGNv
bnN0IFBsYXRmb3JtUmVmUHRyPFU+Jik7CisKKyAgICB2b2lkIHN3YXAoUGxhdGZvcm1SZWZQdHIm
KTsKKyAgICBmcmllbmQgUGxhdGZvcm1SZWZQdHIgYWRvcHRQbGF0Zm9ybVJlZjxUPihUKik7CisK
K3ByaXZhdGU6CisgICAgc3RhdGljIFQqIGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KC0xKTsgfQorICAgIC8vIEFkb3B0aW5nIGNvbnN0cnVjdG9y
LgorICAgIFBsYXRmb3JtUmVmUHRyKFQqIHB0ciwgUGxhdGZvcm1SZWZQdHJBZG9wdFR5cGUpIDog
bV9wdHIocHRyKSB7fQorCisgICAgVCogbV9wdHI7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gaW5saW5lIFBsYXRmb3JtUmVmUHRyPFQ+JiBQbGF0Zm9ybVJlZlB0cjxUPjo6b3BlcmF0b3I9
KGNvbnN0IFBsYXRmb3JtUmVmUHRyPFQ+JiBvKQoreworICAgIFQqIG9wdHIgPSBvLmdldCgpOwor
ICAgIGlmIChvcHRyKQorICAgICAgICByZWZQbGF0Zm9ybVB0cihvcHRyKTsKKyAgICBUKiBwdHIg
PSBtX3B0cjsKKyAgICBtX3B0ciA9IG9wdHI7CisgICAgaWYgKHB0cikKKyAgICAgICAgZGVyZWZQ
bGF0Zm9ybVB0cihwdHIpOworICAgIHJldHVybiAqdGhpczsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IGlubGluZSBQbGF0Zm9ybVJlZlB0cjxUPiYgUGxhdGZvcm1SZWZQdHI8VD46Om9wZXJh
dG9yPShUKiBvcHRyKQoreworICAgIFQqIHB0ciA9IG1fcHRyOworICAgIGlmIChvcHRyKQorICAg
ICAgICByZWZQbGF0Zm9ybVB0cihvcHRyKTsKKyAgICBtX3B0ciA9IG9wdHI7CisgICAgaWYgKHB0
cikKKyAgICAgICAgZGVyZWZQbGF0Zm9ybVB0cihwdHIpOworICAgIHJldHVybiAqdGhpczsKK30K
KwordGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSB2b2lkIFBsYXRmb3JtUmVmUHRyPFQ+Ojpzd2Fw
KFBsYXRmb3JtUmVmUHRyPFQ+JiBvKQoreworICAgIHN0ZDo6c3dhcChtX3B0ciwgby5tX3B0cik7
Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgdm9pZCBzd2FwKFBsYXRmb3JtUmVmUHRy
PFQ+JiBhLCBQbGF0Zm9ybVJlZlB0cjxUPiYgYikKK3sKKyAgICBhLnN3YXAoYik7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFBsYXRmb3JtUmVmUHRyPFQ+JiBhLCBjb25zdCBQbGF0Zm9ybVJlZlB0cjxVPiYgYikKK3sK
KyAgICByZXR1cm4gYS5nZXQoKSA9PSBiLmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQbGF0Zm9ybVJlZlB0
cjxUPiYgYSwgVSogYikKK3sKKyAgICByZXR1cm4gYS5nZXQoKSA9PSBiOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShUKiBhLCBj
b25zdCBQbGF0Zm9ybVJlZlB0cjxVPiYgYikKK3sKKyAgICByZXR1cm4gYSA9PSBiLmdldCgpOwor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBQbGF0Zm9ybVJlZlB0cjxUPiYgYSwgY29uc3QgUGxhdGZvcm1SZWZQdHI8VT4m
IGIpCit7CisgICAgcmV0dXJuIGEuZ2V0KCkgIT0gYi5nZXQoKTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUGxhdGZv
cm1SZWZQdHI8VD4mIGEsIFUqIGIpCit7CisgICAgcmV0dXJuIGEuZ2V0KCkgIT0gYjsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yIT0o
VCogYSwgY29uc3QgUGxhdGZvcm1SZWZQdHI8VT4mIGIpCit7CisgICAgcmV0dXJuIGEgIT0gYi5n
ZXQoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBQbGF0
Zm9ybVJlZlB0cjxUPiBzdGF0aWNfcG9pbnRlcl9jYXN0KGNvbnN0IFBsYXRmb3JtUmVmUHRyPFU+
JiBwKQoreworICAgIHJldHVybiBQbGF0Zm9ybVJlZlB0cjxUPihzdGF0aWNfY2FzdDxUKj4ocC5n
ZXQoKSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIFBs
YXRmb3JtUmVmUHRyPFQ+IGNvbnN0X3BvaW50ZXJfY2FzdChjb25zdCBQbGF0Zm9ybVJlZlB0cjxV
PiYgcCkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1SZWZQdHI8VD4oY29uc3RfY2FzdDxUKj4ocC5n
ZXQoKSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0cihjb25z
dCBQbGF0Zm9ybVJlZlB0cjxUPiYgcCkKK3sKKyAgICByZXR1cm4gcC5nZXQoKTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IFBsYXRmb3JtUmVmUHRyPFQ+IGFkb3B0UGxhdGZvcm1SZWYoVCog
cCkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1SZWZQdHI8VD4ocCwgUGxhdGZvcm1SZWZQdHJBZG9w
dCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlBsYXRmb3JtUmVmUHRy
OwordXNpbmcgV1RGOjpyZWZQbGF0Zm9ybVB0cjsKK3VzaW5nIFdURjo6ZGVyZWZQbGF0Zm9ybVB0
cjsKK3VzaW5nIFdURjo6YWRvcHRQbGF0Zm9ybVJlZjsKK3VzaW5nIFdURjo6c3RhdGljX3BvaW50
ZXJfY2FzdDsKK3VzaW5nIFdURjo6Y29uc3RfcG9pbnRlcl9jYXN0OworCisjZW5kaWYgLy8gUGxh
dGZvcm1SZWZQdHJfaApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR1Jl
ZlB0ci5jcHAgYi9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HUmVmUHRyLmNwcAppbmRleCA5
ZDE2Y2I1NmJiNTBhNmRlZDBmNjk1NTE3Y2E0MTlmNzA0MDE2YTE2Li5jMTYwMjRjNGIyYTcwNTIy
NGJmNmFkMWFjZTU5OGJmMzA0NGE0YTE4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYv
Z29iamVjdC9HUmVmUHRyLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HUmVm
UHRyLmNwcApAQCAtMjMsMzAgKzIzLDQ3IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi10ZW1wbGF0
ZSA8PiBHSGFzaFRhYmxlKiByZWZHUHRyKEdIYXNoVGFibGUqIHB0cikKK3RlbXBsYXRlIDw+IEdI
YXNoVGFibGUqIHJlZlBsYXRmb3JtUHRyKEdIYXNoVGFibGUqIHB0cikKIHsKICAgICBpZiAocHRy
KQogICAgICAgICBnX2hhc2hfdGFibGVfcmVmKHB0cik7CiAgICAgcmV0dXJuIHB0cjsKIH0KIAot
dGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR0hhc2hUYWJsZSogcHRyKQordGVtcGxhdGUgPD4g
dm9pZCBkZXJlZlBsYXRmb3JtUHRyKEdIYXNoVGFibGUqIHB0cikKIHsKICAgICBnX2hhc2hfdGFi
bGVfdW5yZWYocHRyKTsKIH0KIAogI2lmIEdMSUJfQ0hFQ0tfVkVSU0lPTigyLCAyNCwgMCkKLXRl
bXBsYXRlIDw+IEdWYXJpYW50KiByZWZHUHRyKEdWYXJpYW50KiBwdHIpCit0ZW1wbGF0ZSA8PiBH
VmFyaWFudCogcmVmUGxhdGZvcm1QdHIoR1ZhcmlhbnQqIHB0cikKIHsKICAgICBpZiAocHRyKQog
ICAgICAgICBnX3ZhcmlhbnRfcmVmKHB0cik7CiAgICAgcmV0dXJuIHB0cjsKIH0KIAotdGVtcGxh
dGUgPD4gdm9pZCBkZXJlZkdQdHIoR1ZhcmlhbnQqIHB0cikKK3RlbXBsYXRlIDw+IHZvaWQgZGVy
ZWZQbGF0Zm9ybVB0cihHVmFyaWFudCogcHRyKQogewogICAgIGdfdmFyaWFudF91bnJlZihwdHIp
OwogfQorCisjZWxzZQorCisvLyBXZSBkbyB0aGlzIHNvIHRoYXQgd2UgY2FuIGF2b2lkIGluY2x1
ZGluZyB0aGUgZ2xpYi5oIGhlYWRlciBpbiBHUmVmUHRyLmguCit0eXBlZGVmIHN0cnVjdCBfR1Zh
cmlhbnQgeworICAgIGJvb2wgZmFrZTsKK30gR1ZhcmlhbnQ7IAorCit0ZW1wbGF0ZSA8PiBHVmFy
aWFudCogcmVmUGxhdGZvcm1QdHIoR1ZhcmlhbnQqIHB0cikKK3sKKyAgICByZXR1cm4gcHRyOwor
fQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmUGxhdGZvcm1QdHIoR1ZhcmlhbnQqIHB0cikKK3sK
K30KKwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlw
dENvcmUvd3RmL2dvYmplY3QvR1JlZlB0ci5oIGIvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3Qv
R1JlZlB0ci5oCmluZGV4IDlhMDdkOTMyM2Q4NjIzYTE5NTdkNmJiYzUyOWZmODIzODM2ZmE1OWUu
LjA2NGM4N2U2MmE2MDAzOGJkOTBjMTdmYzFmMDUzNjljZDJjMmVhMzUgMTAwNjQ0Ci0tLSBhL0ph
dmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaAorKysgYi9KYXZhU2NyaXB0Q29yZS93
dGYvZ29iamVjdC9HUmVmUHRyLmgKQEAgLTI0LDE1NyArMjQsMzAgQEAKICNkZWZpbmUgV1RGX0dS
ZWZQdHJfaAogCiAjaW5jbHVkZSAiQWx3YXlzSW5saW5lLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1S
ZWZQdHIuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Z2xpYi5oPgogCi1uYW1l
c3BhY2UgV1RGIHsKLQotZW51bSBHUmVmUHRyQWRvcHRUeXBlIHsgR1JlZlB0ckFkb3B0IH07Ci10
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIHJlZkdQdHIoVCopOwotdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IGlubGluZSB2b2lkIGRlcmVmR1B0cihUKik7Ci10ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gY2xhc3MgR1JlZlB0cjsKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBHUmVmUHRyPFQ+IGFkb3B0
R1JlZihUKik7Ci10ZW1wbGF0ZSA8PiBHSGFzaFRhYmxlKiByZWZHUHRyKEdIYXNoVGFibGUqIHB0
cik7Ci10ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHSGFzaFRhYmxlKiBwdHIpOwotCi0jaWYg
R0xJQl9DSEVDS19WRVJTSU9OKDIsIDI0LCAwKQotdGVtcGxhdGUgPD4gR1ZhcmlhbnQqIHJlZkdQ
dHIoR1ZhcmlhbnQqIHB0cik7Ci10ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHVmFyaWFudCog
cHRyKTsKLSNlbmRpZgotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgR1JlZlB0ciB7Ci1w
dWJsaWM6Ci0gICAgR1JlZlB0cigpIDogbV9wdHIoMCkgeyB9Ci0gICAgR1JlZlB0cihUKiBwdHIp
IDogbV9wdHIocHRyKSB7IGlmIChwdHIpIHJlZkdQdHIocHRyKTsgfQotICAgIEdSZWZQdHIoY29u
c3QgR1JlZlB0ciYgbykgOiBtX3B0cihvLm1fcHRyKSB7IGlmIChUKiBwdHIgPSBtX3B0cikgcmVm
R1B0cihwdHIpOyB9Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IEdSZWZQdHIoY29uc3QgR1Jl
ZlB0cjxVPiYgbykgOiBtX3B0cihvLmdldCgpKSB7IGlmIChUKiBwdHIgPSBtX3B0cikgcmVmR1B0
cihwdHIpOyB9Ci0KLSAgICB+R1JlZlB0cigpIHsgaWYgKFQqIHB0ciA9IG1fcHRyKSBkZXJlZkdQ
dHIocHRyKTsgfQotCi0gICAgdm9pZCBjbGVhcigpCi0gICAgewotICAgICAgICBUKiBwdHIgPSBt
X3B0cjsKLSAgICAgICAgbV9wdHIgPSAwOwotICAgICAgICBpZiAocHRyKQotICAgICAgICAgICAg
ZGVyZWZHUHRyKHB0cik7Ci0gICAgfQotCi0gICAgVCogZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9w
dHI7IH0KLSAgICBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqbV9wdHI7IH0KLSAgICBB
TFdBWVNfSU5MSU5FIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQotCi0g
ICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9wdHI7IH0KK3R5cGVkZWYgc3Ry
dWN0IF9HSGFzaFRhYmxlIEdIYXNoVGFibGU7IAordHlwZWRlZiBzdHJ1Y3QgX0dWYXJpYW50IEdW
YXJpYW50OyAKK3R5cGVkZWYgdm9pZCogZ3BvaW50ZXI7IAorZXh0ZXJuICJDIiB2b2lkIGdfb2Jq
ZWN0X3VucmVmKGdwb2ludGVyIG9iamVjdCk7IAorZXh0ZXJuICJDIiBncG9pbnRlciBnX29iamVj
dF9yZWZfc2luayhncG9pbnRlciBvYmplY3QpOyAKIAotICAgIC8vIFRoaXMgY29udmVyc2lvbiBv
cGVyYXRvciBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3Ro
ZXIgaW50ZWdlciB0eXBlcy4KLSAgICB0eXBlZGVmIFQqIEdSZWZQdHI6OipVbnNwZWNpZmllZEJv
b2xUeXBlOwotICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3B0ciA/ICZHUmVmUHRyOjptX3B0ciA6IDA7IH0KLQotICAgIEdSZWZQdHImIG9wZXJhdG9y
PShjb25zdCBHUmVmUHRyJik7Ci0gICAgR1JlZlB0ciYgb3BlcmF0b3I9KFQqKTsKLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVT4gR1JlZlB0ciYgb3BlcmF0b3I9KGNvbnN0IEdSZWZQdHI8VT4mKTsK
LQotICAgIHZvaWQgc3dhcChHUmVmUHRyJik7Ci0gICAgZnJpZW5kIEdSZWZQdHIgYWRvcHRHUmVm
PFQ+KFQqKTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgVCogaGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4oLTEpOyB9Ci0gICAgLy8gQWRvcHRpbmcg
Y29uc3RydWN0b3IuCi0gICAgR1JlZlB0cihUKiBwdHIsIEdSZWZQdHJBZG9wdFR5cGUpIDogbV9w
dHIocHRyKSB7fQotCi0gICAgVCogbV9wdHI7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
aW5saW5lIEdSZWZQdHI8VD4mIEdSZWZQdHI8VD46Om9wZXJhdG9yPShjb25zdCBHUmVmUHRyPFQ+
JiBvKQotewotICAgIFQqIG9wdHIgPSBvLmdldCgpOwotICAgIGlmIChvcHRyKQotICAgICAgICBy
ZWZHUHRyKG9wdHIpOwotICAgIFQqIHB0ciA9IG1fcHRyOwotICAgIG1fcHRyID0gb3B0cjsKLSAg
ICBpZiAocHRyKQotICAgICAgICBkZXJlZkdQdHIocHRyKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgR1JlZlB0cjxUPiYgR1JlZlB0cjxUPjo6
b3BlcmF0b3I9KFQqIG9wdHIpCi17Ci0gICAgVCogcHRyID0gbV9wdHI7Ci0gICAgaWYgKG9wdHIp
Ci0gICAgICAgIHJlZkdQdHIob3B0cik7Ci0gICAgbV9wdHIgPSBvcHRyOwotICAgIGlmIChwdHIp
Ci0gICAgICAgIGRlcmVmR1B0cihwdHIpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotdGVtcGxh
dGUgPGNsYXNzIFQ+IGlubGluZSB2b2lkIEdSZWZQdHI8VD46OnN3YXAoR1JlZlB0cjxUPiYgbykK
LXsKLSAgICBzdGQ6OnN3YXAobV9wdHIsIG8ubV9wdHIpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3Mg
VD4gaW5saW5lIHZvaWQgc3dhcChHUmVmUHRyPFQ+JiBhLCBHUmVmUHRyPFQ+JiBiKQotewotICAg
IGEuc3dhcChiKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgR1JlZlB0cjxUPiYgYSwgY29uc3QgR1JlZlB0cjxVPiYg
YikKLXsKLSAgICByZXR1cm4gYS5nZXQoKSA9PSBiLmdldCgpOwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHUmVmUHRy
PFQ+JiBhLCBVKiBiKQotewotICAgIHJldHVybiBhLmdldCgpID09IGI7Ci19Ci0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KFQqIGEsIGNv
bnN0IEdSZWZQdHI8VT4mIGIpCi17Ci0gICAgcmV0dXJuIGEgPT0gYi5nZXQoKTsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgR1JlZlB0cjxUPiYgYSwgY29uc3QgR1JlZlB0cjxVPiYgYikKLXsKLSAgICByZXR1cm4gYS5n
ZXQoKSAhPSBiLmdldCgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBHUmVmUHRyPFQ+JiBhLCBVKiBiKQotewotICAg
IHJldHVybiBhLmdldCgpICE9IGI7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KFQqIGEsIGNvbnN0IEdSZWZQdHI8VT4mIGIpCi17
Ci0gICAgcmV0dXJuIGEgIT0gYi5nZXQoKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBHUmVmUHRyPFQ+IHN0YXRpY19wb2ludGVyX2Nhc3QoY29uc3QgR1Jl
ZlB0cjxVPiYgcCkKLXsKLSAgICByZXR1cm4gR1JlZlB0cjxUPihzdGF0aWNfY2FzdDxUKj4ocC5n
ZXQoKSkpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEdS
ZWZQdHI8VD4gY29uc3RfcG9pbnRlcl9jYXN0KGNvbnN0IEdSZWZQdHI8VT4mIHApCi17Ci0gICAg
cmV0dXJuIEdSZWZQdHI8VD4oY29uc3RfY2FzdDxUKj4ocC5nZXQoKSkpOwotfQorbmFtZXNwYWNl
IFdURiB7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyKGNvbnN0IEdS
ZWZQdHI8VD4mIHApCi17Ci0gICAgcmV0dXJuIHAuZ2V0KCk7Ci19Cit0ZW1wbGF0ZSA8PiBHSGFz
aFRhYmxlKiByZWZQbGF0Zm9ybVB0cihHSGFzaFRhYmxlKiBwdHIpOwordGVtcGxhdGUgPD4gdm9p
ZCBkZXJlZlBsYXRmb3JtUHRyKEdIYXNoVGFibGUqIHB0cik7Cit0ZW1wbGF0ZSA8PiBHVmFyaWFu
dCogcmVmUGxhdGZvcm1QdHIoR1ZhcmlhbnQqIHB0cik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVm
UGxhdGZvcm1QdHIoR1ZhcmlhbnQqIHB0cik7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBHUmVm
UHRyPFQ+IGFkb3B0R1JlZihUKiBwKQotewotICAgIHJldHVybiBHUmVmUHRyPFQ+KHAsIEdSZWZQ
dHJBZG9wdCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogcmVmR1B0cihU
KiBwdHIpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIHJlZlBsYXRmb3JtUHRyKFQq
IHB0cikKIHsKICAgICBpZiAocHRyKQogICAgICAgICBnX29iamVjdF9yZWZfc2luayhwdHIpOwog
ICAgIHJldHVybiBwdHI7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBk
ZXJlZkdQdHIoVCogcHRyKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIGRlcmVm
UGxhdGZvcm1QdHIoVCogcHRyKQogewogICAgIGlmIChwdHIpCiAgICAgICAgIGdfb2JqZWN0X3Vu
cmVmKHB0cik7CkBAIC0xODIsMTEgKzU1LDQgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGlu
ZSB2b2lkIGRlcmVmR1B0cihUKiBwdHIpCiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCi11c2luZyBX
VEY6OkdSZWZQdHI7Ci11c2luZyBXVEY6OnJlZkdQdHI7Ci11c2luZyBXVEY6OmRlcmVmR1B0cjsK
LXVzaW5nIFdURjo6YWRvcHRHUmVmOwotdXNpbmcgV1RGOjpzdGF0aWNfcG9pbnRlcl9jYXN0Owot
dXNpbmcgV1RGOjpjb25zdF9wb2ludGVyX2Nhc3Q7Ci0KICNlbmRpZiAvLyBXVEZfR1JlZlB0cl9o
CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGVhNmEwNGE1OTYxZjM3NDY2MDM5ZTIwNGUzODkwMDI3MzI2ZDFkYzcuLjk0MmYzY2RkODkzMjhk
NjYzNDcwNTI5NWU2MzUwZmJmNGNlNWJhMmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNTAgQEAKIDIwMTAtMDgtMjAgIE1h
cnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENhaXJvIGFuZCBFRkwgcG9ydCBzaG91bGRu
J3QgZGVwZW5kIG9uIGdsaWIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00NDM1NAorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcyBmdW5jdGlvbmFsaXR5
IGhhcyBub3QgY2hhbmdlZC4KKworICAgICAgICBSZXBsYWNlIG9jY3VycmVuY2VzIG9mIEdSZWZQ
dHIgYW5kIGFkb3B0R1JlZiB3aXRoIFBsYXRmb3JtUmVmUHRyIGFuZAorICAgICAgICBhZG9wdFBs
YXRmb3JtUmVmLiBSZW5hbWUgR1JlZlB0ckNhaXJvIHRvIFBsYXRmb3JtUmVmUHRyQ2Fpcm8uCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBwbGF0Zm9ybS9DdXJzb3IuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HUmVmUHRyQ2Fpcm8uY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dSZWZQdHJDYWlyby5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybVJlZlB0ckNhaXJvLmNwcDogQWRkZWQuCisgICAg
ICAgIChXVEY6OnJlZlBsYXRmb3JtUHRyKToKKyAgICAgICAgKFdURjo6ZGVyZWZQbGF0Zm9ybVB0
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1SZWZQdHJDYWly
by5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJH
dGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmRHdGs6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3RrL0N1cnNvckd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVOYW1lZEN1cnNv
cik6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDdXN0b21DdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3Vyc29yOjplbnN1cmVQbGF0Zm9ybUN1cnNvcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3RrL0RhdGFPYmplY3RHdGsuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5j
cHA6CisgICAgICAgIChXVEY6OnJlZlBsYXRmb3JtUHRyKToKKyAgICAgICAgKFdURjo6ZGVyZWZQ
bGF0Zm9ybVB0cik6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkOjp3cml0ZUltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUGFzdGVib2Fy
ZEhlbHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkSGVscGVyOjpkcm9wQXRv
bXNGb3JDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lR3RrOjpSZW5kZXJUaGVtZUd0ayk6CisgICAgICAgIChXZWJDb3JlOjpw
YWludE1vemlsbGFHdGtXaWRnZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVt
ZUd0ay5oOgorCisyMDEwLTA4LTIwICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlh
LmNvbT4KKwogICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCiAKICAgICAgICAg
W0dUS10gSW5zcGVjdG9yIGV4dGVuc2lvbnMgdGVzdHMgZmFpbCBvbiBHVEsrIGJvdHMgYmVjYXVz
ZSBvblNlbGVjdGlvbkNoYW5nZWQgaXMgbWlzc2luZwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggYWM1YTI1OTlhOWQ5YzUy
YzRiNjE3MWMwZmJkNjk5OTJkMTRjZDhjZS4uYmY0MmYzYWQzYWU2ODRjNWIzYTZhZmZjMWNkMzc1
ZWExYTQ2NDBhOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0yNDUxLDggKzI0NTEsNiBAQCB3ZWJjb3JlZ3RrX3NvdXJj
ZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udFBsYXRmb3JtRGF0
YS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dPd25QdHJDYWlyby5jcHAg
XAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR093blB0ckNhaXJvLmggXAotCVdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR1JlZlB0ckNhaXJvLmNwcCBcCi0JV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HUmVmUHRyQ2Fpcm8uaCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgXAogCVdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8u
aCBcCkBAIC0yNDYxLDYgKzI0NTksOCBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAgXAogCVdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1BsYXRmb3JtUmVmUHRyQ2Fpcm8uY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1BsYXRmb3JtUmVmUHRyQ2Fpcm8uaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9DYWlyb1V0aWxpdGllcy5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9DdXJzb3IuaCBiL1dlYkNvcmUvcGxhdGZvcm0vQ3Vyc29yLmgKaW5kZXggOWI3N2QxYzhj
Yzk4Mjc4NGU1OWE1OWQyNjI5MzI4MDgyODFlZWRiNi4uOTJkMzU5NjkzYTA2Y2ExODA2NTA0YmEy
YTRhMjQ2MmI5N2UwZDFlOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuaAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL0N1cnNvci5oCkBAIC04NCw3ICs4NCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICNlbGlmIFBMQVRGT1JNKE1BQykKICAgICB0eXBlZGVmIE5TQ3Vyc29yKiBQ
bGF0Zm9ybUN1cnNvcjsKICNlbGlmIFBMQVRGT1JNKEdUSykKLSAgICB0eXBlZGVmIEdSZWZQdHI8
R2RrQ3Vyc29yPiBQbGF0Zm9ybUN1cnNvcjsKKyAgICB0eXBlZGVmIFBsYXRmb3JtUmVmUHRyPEdk
a0N1cnNvcj4gUGxhdGZvcm1DdXJzb3I7CiAjZWxpZiBQTEFURk9STShFRkwpCiAgICAgdHlwZWRl
ZiBjb25zdCBjaGFyKiBQbGF0Zm9ybUN1cnNvcjsKICNlbGlmIFBMQVRGT1JNKFFUKSAmJiAhZGVm
aW5lZChRVF9OT19DVVJTT1IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQ2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUNhaXJvLmNwcAppbmRleCBkNWViMGU3MGVlMmU2N2QyNzY0NTNhYzEyYThlNDAxMmQ1MzEx
M2E0Li5kOWViNWU2OWYxZTM3ZTNhY2Y2ODk0NmEyMTkyNGRiNjZiYWU1Mzc1IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAKQEAgLTMzLDcgKzMz
LDcgQEAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDb2xvci5oIgog
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdSZWZQdHJDYWlyby5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtUmVmUHRyQ2Fpcm8uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKQEAg
LTE4NSwxMSArMTg1LDExIEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uCiAgICAgY2Fpcm9fdCog
Y3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBjb250ZXh0LT5zYXZlKCk7CiAK
LSAgICBHUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gY2xpcHBlZEltYWdlU3VyZmFjZSA9IDA7Cisg
ICAgUGxhdGZvcm1SZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBjbGlwcGVkSW1hZ2VTdXJmYWNlID0g
MDsKICAgICBpZiAodGlsZVJlY3Quc2l6ZSgpICE9IHNpemUoKSkgewogICAgICAgICBJbnRSZWN0
IGltYWdlU2l6ZSA9IGVuY2xvc2luZ0ludFJlY3QodGlsZVJlY3QpOwotICAgICAgICBjbGlwcGVk
SW1hZ2VTdXJmYWNlID0gYWRvcHRHUmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJP
X0ZPUk1BVF9BUkdCMzIsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpKTsK
LSAgICAgICAgR1JlZlB0cjxjYWlyb190PiBjbGlwcGVkSW1hZ2VDb250ZXh0KGNhaXJvX2NyZWF0
ZShjbGlwcGVkSW1hZ2VTdXJmYWNlLmdldCgpKSk7CisgICAgICAgIGNsaXBwZWRJbWFnZVN1cmZh
Y2UgPSBhZG9wdFBsYXRmb3JtUmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZP
Uk1BVF9BUkdCMzIsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpKTsKKyAg
ICAgICAgUGxhdGZvcm1SZWZQdHI8Y2Fpcm9fdD4gY2xpcHBlZEltYWdlQ29udGV4dChjYWlyb19j
cmVhdGUoY2xpcHBlZEltYWdlU3VyZmFjZS5nZXQoKSkpOwogICAgICAgICBjYWlyb19zZXRfc291
cmNlX3N1cmZhY2UoY2xpcHBlZEltYWdlQ29udGV4dC5nZXQoKSwgaW1hZ2UsIC10aWxlUmVjdC54
KCksIC10aWxlUmVjdC55KCkpOwogICAgICAgICBjYWlyb19wYWludChjbGlwcGVkSW1hZ2VDb250
ZXh0LmdldCgpKTsKICAgICAgICAgaW1hZ2UgPSBjbGlwcGVkSW1hZ2VTdXJmYWNlLmdldCgpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HUmVmUHRyQ2Fpcm8u
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybVJlZlB0ckNhaXJv
LmNwcApzaW1pbGFyaXR5IGluZGV4IDgxJQpyZW5hbWUgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dSZWZQdHJDYWlyby5jcHAKcmVuYW1lIHRvIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1SZWZQdHJDYWlyby5jcHAKaW5kZXggZDI0NDk1NDkwODQx
ZWMyMzc3YzA0ODNiNmRmYjQwNTY0YTQxNDBmOC4uNjg3MDU2MGUxYzZlNjRlYzhiMzc2NjE2YTEx
MWRmZThiYmUzOTVkZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HUmVmUHRyQ2Fpcm8uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
UGxhdGZvcm1SZWZQdHJDYWlyby5jcHAKQEAgLTE3LDMzICsxNywzMyBAQAogICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHUmVmUHRyQ2Fpcm8uaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVJlZlB0ckNhaXJvLmgiCiAKICNpbmNsdWRlIDxjYWlyby5oPgogCiBuYW1lc3BhY2UgV1RG
IHsKIAotdGVtcGxhdGUgPD4gY2Fpcm9fdCogcmVmR1B0cihjYWlyb190KiBwdHIpCit0ZW1wbGF0
ZSA8PiBjYWlyb190KiByZWZQbGF0Zm9ybVB0cihjYWlyb190KiBwdHIpCiB7CiAgICAgaWYgKHB0
cikKICAgICAgICAgY2Fpcm9fcmVmZXJlbmNlKHB0cik7CiAgICAgcmV0dXJuIHB0cjsKIH0KIAot
dGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoY2Fpcm9fdCogcHRyKQordGVtcGxhdGUgPD4gdm9p
ZCBkZXJlZlBsYXRmb3JtUHRyKGNhaXJvX3QqIHB0cikKIHsKICAgICBpZiAocHRyKQogICAgICAg
ICBjYWlyb19kZXN0cm95KHB0cik7CiB9CiAKLXRlbXBsYXRlIDw+IGNhaXJvX3N1cmZhY2VfdCog
cmVmR1B0cihjYWlyb19zdXJmYWNlX3QqIHB0cikKK3RlbXBsYXRlIDw+IGNhaXJvX3N1cmZhY2Vf
dCogcmVmUGxhdGZvcm1QdHIoY2Fpcm9fc3VyZmFjZV90KiBwdHIpCiB7CiAgICAgaWYgKHB0cikK
ICAgICAgICAgY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UocHRyKTsKICAgICByZXR1cm4gcHRyOwog
fQogCi10ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihjYWlyb19zdXJmYWNlX3QqIHB0cikKK3Rl
bXBsYXRlIDw+IHZvaWQgZGVyZWZQbGF0Zm9ybVB0cihjYWlyb19zdXJmYWNlX3QqIHB0cikKIHsK
ICAgICBpZiAocHRyKQogICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kocHRyKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR1JlZlB0ckNhaXJvLmggYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUmVmUHRyQ2Fpcm8uaApzaW1p
bGFyaXR5IGluZGV4IDgxJQpyZW5hbWUgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dSZWZQdHJDYWlyby5oCnJlbmFtZSB0byBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1BsYXRmb3JtUmVmUHRyQ2Fpcm8uaAppbmRleCBhZWY1MWZlYWViYjE2MzY5OWVmMmNmNmY4
ZDcyZWU0Njc2ZGU4YzhjLi5iMDY0ZTU4OGI2NmRhZDBmMTM5NGMzODg0OTM4OTc2OTMyNjQ3ZjI1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dSZWZQdHJDYWly
by5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1SZWZQdHJD
YWlyby5oCkBAIC0yNywxMSArMjcsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3N1cmZhY2Ug
Y2Fpcm9fc3VyZmFjZV90OwogCiBuYW1lc3BhY2UgV1RGIHsKIAotdGVtcGxhdGUgPD4gY2Fpcm9f
dCogcmVmR1B0cihjYWlyb190KiBwdHIpOwotdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoY2Fp
cm9fdCogcHRyKTsKK3RlbXBsYXRlIDw+IGNhaXJvX3QqIHJlZlBsYXRmb3JtUHRyKGNhaXJvX3Qq
IHB0cik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmUGxhdGZvcm1QdHIoY2Fpcm9fdCogcHRyKTsK
IAotdGVtcGxhdGUgPD4gY2Fpcm9fc3VyZmFjZV90KiByZWZHUHRyKGNhaXJvX3N1cmZhY2VfdCog
cHRyKTsKLXRlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKGNhaXJvX3N1cmZhY2VfdCogcHRyKTsK
K3RlbXBsYXRlIDw+IGNhaXJvX3N1cmZhY2VfdCogcmVmUGxhdGZvcm1QdHIoY2Fpcm9fc3VyZmFj
ZV90KiBwdHIpOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZlBsYXRmb3JtUHRyKGNhaXJvX3N1cmZh
Y2VfdCogcHRyKTsKIAogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9J
bWFnZUJ1ZmZlckd0ay5jcHAKaW5kZXggZDBiMDI3NDhkOGQyOTA4NjFjNjI4M2Y5NWY1MTdlNTUw
ZDI1MmI1MS4uODIxY2MxMmM4NWI3ZjZmYjc1ZDQyYTc5YWMxOGZmYTg0YzBmM2U4ZiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcApAQCAt
NDQsNyArNDQsNyBAQCBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHkpIGNvbgogICAgIGlmICh0eXBlICE9ICJq
cGVnIiAmJiB0eXBlICE9ICJwbmciICYmIHR5cGUgIT0gInRpZmYiICYmIHR5cGUgIT0gImljbyIg
JiYgdHlwZSAhPSAiYm1wIikKICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwogCi0gICAgR1JlZlB0
cjxHZGtQaXhidWY+IHBpeGJ1ZiA9IGNhaXJvSW1hZ2VTdXJmYWNlVG9HZGtQaXhidWYobV9kYXRh
Lm1fc3VyZmFjZSk7CisgICAgUGxhdGZvcm1SZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYgPSBjYWly
b0ltYWdlU3VyZmFjZVRvR2RrUGl4YnVmKG1fZGF0YS5tX3N1cmZhY2UpOwogICAgIGlmICghcGl4
YnVmKQogICAgICAgICByZXR1cm4gImRhdGE6LCI7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9h
cmRHdGsuY3BwCmluZGV4IDIxZWJlNGM1YTA1NDU5N2JiODg2ZDRhYjg2OTQ1ODE2MmM1NjcyOTEu
LmIyYzMyYTQyODdkMDQ2ZTk5MGY4MDM5ZmRkMjk1NjUyM2E2ZDAwYWIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvQ2xpcGJvYXJkR3RrLmNwcApAQCAtMzMwLDcgKzMzMCw3IEBAIHZvaWQgQ2xpcGJvYXJk
R3RrOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VS
TCYgdXJsLCBjCiAgICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmlzTG9hZGVkKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYgPSBhZG9wdEdSZWYoaW1h
Z2UtPmltYWdlKCktPmdldEdka1BpeGJ1ZigpKTsKKyAgICBQbGF0Zm9ybVJlZlB0cjxHZGtQaXhi
dWY+IHBpeGJ1ZiA9IGFkb3B0UGxhdGZvcm1SZWYoaW1hZ2UtPmltYWdlKCktPmdldEdka1BpeGJ1
ZigpKTsKICAgICBpZiAoIXBpeGJ1ZikKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
Q3Vyc29yR3RrLmNwcAppbmRleCBkYjZlZmE3YzAxNGUwMmVlYzJiN2NjNmJmZjhkMmYyYmVmMjkw
NjgyLi5kMWYxMjkzNTkyMzY0YTkzOTA2NTEyOWY1ODg0ZmNjMGI2ODgxN2YwIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0N1cnNvckd0ay5jcHAKQEAgLTUwLDI2ICs1MCwyNiBAQCBzdGF0aWMgR2RrUGl4bWFw
KiBjcmVhdGVQaXhtYXBGcm9tQml0cyhjb25zdCB1bnNpZ25lZCBjaGFyKiBiaXRzLCBjb25zdCBJ
bnRTaXplJgogICAgIHJldHVybiBwaXhtYXA7CiB9CiAKLXN0YXRpYyBHUmVmUHRyPEdka0N1cnNv
cj4gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yVHlwZSBjdXJzb3JUeXBlKQorc3RhdGlj
IFBsYXRmb3JtUmVmUHRyPEdka0N1cnNvcj4gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29y
VHlwZSBjdXJzb3JUeXBlKQogewogICAgIEN1c3RvbUN1cnNvciBjdXJzb3IgPSBDdXN0b21DdXJz
b3JzW2N1cnNvclR5cGVdOwotICAgIEdSZWZQdHI8R2RrQ3Vyc29yPiBjID0gYWRvcHRHUmVmKGdk
a19jdXJzb3JfbmV3X2Zyb21fbmFtZShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpLCBjdXJzb3Iu
bmFtZSkpOworICAgIFBsYXRmb3JtUmVmUHRyPEdka0N1cnNvcj4gYyA9IGFkb3B0UGxhdGZvcm1S
ZWYoZ2RrX2N1cnNvcl9uZXdfZnJvbV9uYW1lKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCksIGN1
cnNvci5uYW1lKSk7CiAgICAgaWYgKGMpCiAgICAgICAgIHJldHVybiBjOwogCiAgICAgY29uc3Qg
R2RrQ29sb3IgZmcgPSB7IDAsIDAsIDAsIDAgfTsKICAgICBjb25zdCBHZGtDb2xvciBiZyA9IHsg
NjU1MzUsIDY1NTM1LCA2NTUzNSwgNjU1MzUgfTsKICAgICBJbnRTaXplIGN1cnNvclNpemUgPSBJ
bnRTaXplKDMyLCAzMik7Ci0gICAgR1JlZlB0cjxHZGtQaXhtYXA+IHNvdXJjZSA9IGFkb3B0R1Jl
ZihjcmVhdGVQaXhtYXBGcm9tQml0cyhjdXJzb3IuYml0cywgY3Vyc29yU2l6ZSkpOwotICAgIEdS
ZWZQdHI8R2RrUGl4bWFwPiBtYXNrID0gYWRvcHRHUmVmKGNyZWF0ZVBpeG1hcEZyb21CaXRzKGN1
cnNvci5tYXNrX2JpdHMsIGN1cnNvclNpemUpKTsKLSAgICByZXR1cm4gYWRvcHRHUmVmKGdka19j
dXJzb3JfbmV3X2Zyb21fcGl4bWFwKHNvdXJjZS5nZXQoKSwgbWFzay5nZXQoKSwgJmZnLCAmYmcs
IGN1cnNvci5ob3RfeCwgY3Vyc29yLmhvdF95KSk7CisgICAgUGxhdGZvcm1SZWZQdHI8R2RrUGl4
bWFwPiBzb3VyY2UgPSBhZG9wdFBsYXRmb3JtUmVmKGNyZWF0ZVBpeG1hcEZyb21CaXRzKGN1cnNv
ci5iaXRzLCBjdXJzb3JTaXplKSk7CisgICAgUGxhdGZvcm1SZWZQdHI8R2RrUGl4bWFwPiBtYXNr
ID0gYWRvcHRQbGF0Zm9ybVJlZihjcmVhdGVQaXhtYXBGcm9tQml0cyhjdXJzb3IubWFza19iaXRz
LCBjdXJzb3JTaXplKSk7CisgICAgcmV0dXJuIGFkb3B0UGxhdGZvcm1SZWYoZ2RrX2N1cnNvcl9u
ZXdfZnJvbV9waXhtYXAoc291cmNlLmdldCgpLCBtYXNrLmdldCgpLCAmZmcsICZiZywgY3Vyc29y
LmhvdF94LCBjdXJzb3IuaG90X3kpKTsKIH0KIAotc3RhdGljIEdSZWZQdHI8R2RrQ3Vyc29yPiBj
cmVhdGVDdXN0b21DdXJzb3IoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRQb2ludCYgaG90U3BvdCkK
K3N0YXRpYyBQbGF0Zm9ybVJlZlB0cjxHZGtDdXJzb3I+IGNyZWF0ZUN1c3RvbUN1cnNvcihJbWFn
ZSogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBob3RTcG90KQogewogICAgIEludFBvaW50IGVmZmVj
dGl2ZUhvdFNwb3QgPSBkZXRlcm1pbmVIb3RTcG90KGltYWdlLCBob3RTcG90KTsKLSAgICBHUmVm
UHRyPEdka1BpeGJ1Zj4gcGl4YnVmID0gYWRvcHRHUmVmKGltYWdlLT5nZXRHZGtQaXhidWYoKSk7
Ci0gICAgcmV0dXJuIGFkb3B0R1JlZihnZGtfY3Vyc29yX25ld19mcm9tX3BpeGJ1ZihnZGtfZGlz
cGxheV9nZXRfZGVmYXVsdCgpLCBwaXhidWYuZ2V0KCksIGVmZmVjdGl2ZUhvdFNwb3QueCgpLCBl
ZmZlY3RpdmVIb3RTcG90LnkoKSkpOworICAgIFBsYXRmb3JtUmVmUHRyPEdka1BpeGJ1Zj4gcGl4
YnVmID0gYWRvcHRQbGF0Zm9ybVJlZihpbWFnZS0+Z2V0R2RrUGl4YnVmKCkpOworICAgIHJldHVy
biBhZG9wdFBsYXRmb3JtUmVmKGdka19jdXJzb3JfbmV3X2Zyb21fcGl4YnVmKGdka19kaXNwbGF5
X2dldF9kZWZhdWx0KCksIHBpeGJ1Zi5nZXQoKSwgZWZmZWN0aXZlSG90U3BvdC54KCksIGVmZmVj
dGl2ZUhvdFNwb3QueSgpKSk7CiB9CiAKIHZvaWQgQ3Vyc29yOjplbnN1cmVQbGF0Zm9ybUN1cnNv
cigpIGNvbnN0CkBAIC04Myw3NyArODMsNzcgQEAgdm9pZCBDdXJzb3I6OmVuc3VyZVBsYXRmb3Jt
Q3Vyc29yKCkgY29uc3QKICAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IDA7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQ3Vyc29yOjpDcm9zczoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9
IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfQ1JPU1MpKTsKKyAgICAgICAgbV9wbGF0Zm9y
bUN1cnNvciA9IGFkb3B0UGxhdGZvcm1SZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX0NST1NTKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3Vyc29yOjpIYW5kOgotICAgICAgICBtX3BsYXRmb3Jt
Q3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19IQU5EMikpOworICAgICAgICBt
X3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRQbGF0Zm9ybVJlZihnZGtfY3Vyc29yX25ldyhHREtfSEFO
RDIpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDdXJzb3I6OklCZWFtOgotICAgICAgICBt
X3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19YVEVSTSkpOwor
ICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRQbGF0Zm9ybVJlZihnZGtfY3Vyc29yX25l
dyhHREtfWFRFUk0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDdXJzb3I6OldhaXQ6Ci0g
ICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1dB
VENIKSk7CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdFBsYXRmb3JtUmVmKGdka19j
dXJzb3JfbmV3KEdES19XQVRDSCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEN1cnNvcjo6
SGVscDoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25l
dyhHREtfUVVFU1RJT05fQVJST1cpKTsKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0
UGxhdGZvcm1SZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1FVRVNUSU9OX0FSUk9XKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQ3Vyc29yOjpNb3ZlOgogICAgIGNhc2UgQ3Vyc29yOjpNaWRkbGVQ
YW5uaW5nOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3Jf
bmV3KEdES19GTEVVUikpOworICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRQbGF0Zm9y
bVJlZihnZGtfY3Vyc29yX25ldyhHREtfRkxFVVIpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBDdXJzb3I6OkVhc3RSZXNpemU6CiAgICAgY2FzZSBDdXJzb3I6OkVhc3RQYW5uaW5nOgotICAg
ICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19SSUdI
VF9TSURFKSk7CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdFBsYXRmb3JtUmVmKGdk
a19jdXJzb3JfbmV3KEdES19SSUdIVF9TSURFKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
Q3Vyc29yOjpOb3J0aFJlc2l6ZToKICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhQYW5uaW5nOgotICAg
ICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19UT1Bf
U0lERSkpOworICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRQbGF0Zm9ybVJlZihnZGtf
Y3Vyc29yX25ldyhHREtfVE9QX1NJREUpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDdXJz
b3I6Ok5vcnRoRWFzdFJlc2l6ZToKICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0UGFubmluZzoK
LSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtf
TEVGVF9TSURFKSk7CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdFBsYXRmb3JtUmVm
KGdka19jdXJzb3JfbmV3KEdES19MRUZUX1NJREUpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBDdXJzb3I6Ok5vcnRoV2VzdFJlc2l6ZToKICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhXZXN0UGFu
bmluZzoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25l
dyhHREtfVE9QX0xFRlRfQ09STkVSKSk7CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9w
dFBsYXRmb3JtUmVmKGdka19jdXJzb3JfbmV3KEdES19UT1BfTEVGVF9DT1JORVIpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBDdXJzb3I6OlNvdXRoUmVzaXplOgogICAgIGNhc2UgQ3Vyc29y
OjpTb3V0aFBhbm5pbmc6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2Rr
X2N1cnNvcl9uZXcoR0RLX0JPVFRPTV9TSURFKSk7CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3Ig
PSBhZG9wdFBsYXRmb3JtUmVmKGdka19jdXJzb3JfbmV3KEdES19CT1RUT01fU0lERSkpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEN1cnNvcjo6U291dGhFYXN0UmVzaXplOgogICAgIGNhc2Ug
Q3Vyc29yOjpTb3V0aEVhc3RQYW5uaW5nOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRv
cHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19CT1RUT01fUklHSFRfQ09STkVSKSk7CisgICAgICAg
IG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdFBsYXRmb3JtUmVmKGdka19jdXJzb3JfbmV3KEdES19C
T1RUT01fUklHSFRfQ09STkVSKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3Vyc29yOjpT
b3V0aFdlc3RSZXNpemU6CiAgICAgY2FzZSBDdXJzb3I6OlNvdXRoV2VzdFBhbm5pbmc6Ci0gICAg
ICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX0JPVFRP
TV9MRUZUX0NPUk5FUikpOworICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRQbGF0Zm9y
bVJlZihnZGtfY3Vyc29yX25ldyhHREtfQk9UVE9NX0xFRlRfQ09STkVSKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQ3Vyc29yOjpXZXN0UmVzaXplOgotICAgICAgICBtX3BsYXRmb3JtQ3Vy
c29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19MRUZUX1NJREUpKTsKKyAgICAgICAg
bV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0UGxhdGZvcm1SZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX0xF
RlRfU0lERSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhTb3V0aFJl
c2l6ZToKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25l
dyhHREtfVE9QX1RFRSkpOworICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRQbGF0Zm9y
bVJlZihnZGtfY3Vyc29yX25ldyhHREtfVE9QX1RFRSkpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEN1cnNvcjo6RWFzdFdlc3RSZXNpemU6CiAgICAgY2FzZSBDdXJzb3I6Oldlc3RQYW5uaW5n
OgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdE
S19MRUZUX1NJREUpKTsKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0UGxhdGZvcm1S
ZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX0xFRlRfU0lERSkpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEN1cnNvcjo6Tm9ydGhFYXN0U291dGhXZXN0UmVzaXplOgogICAgIGNhc2UgQ3Vyc29yOjpO
b3J0aFdlc3RTb3V0aEVhc3RSZXNpemU6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9w
dEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1NJWklORykpOworICAgICAgICBtX3BsYXRmb3JtQ3Vy
c29yID0gYWRvcHRQbGF0Zm9ybVJlZihnZGtfY3Vyc29yX25ldyhHREtfU0laSU5HKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ3Vyc29yOjpDb2x1bW5SZXNpemU6Ci0gICAgICAgIG1fcGxh
dGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1NCX0hfRE9VQkxFX0FS
Uk9XKSk7CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdFBsYXRmb3JtUmVmKGdka19j
dXJzb3JfbmV3KEdES19TQl9IX0RPVUJMRV9BUlJPVykpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEN1cnNvcjo6Um93UmVzaXplOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRH
UmVmKGdka19jdXJzb3JfbmV3KEdES19TQl9WX0RPVUJMRV9BUlJPVykpOworICAgICAgICBtX3Bs
YXRmb3JtQ3Vyc29yID0gYWRvcHRQbGF0Zm9ybVJlZihnZGtfY3Vyc29yX25ldyhHREtfU0JfVl9E
T1VCTEVfQVJST1cpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDdXJzb3I6OlZlcnRpY2Fs
VGV4dDoKICAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3Rv
bUN1cnNvclZlcnRpY2FsVGV4dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3Vyc29yOjpD
ZWxsOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3
KEdES19QTFVTKSk7CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdFBsYXRmb3JtUmVm
KGdka19jdXJzb3JfbmV3KEdES19QTFVTKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3Vy
c29yOjpDb250ZXh0TWVudToKICAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVk
Q3Vyc29yKEN1c3RvbUN1cnNvckNvbnRleHRNZW51KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmpl
Y3RHdGsuaAppbmRleCBhN2Q4YmFmM2ZiZWJiYzNhZTZkOTAwOWVjYjU5MTRmZGRkNDZhYzljLi42
ZjcxNDljNmUxODI2Mjk2NDliY2ZlMjQxMjI5MDk1NDc0ODY5MDE2IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvRGF0YU9iamVjdEd0ay5oCkBAIC03Myw4ICs3Myw4IEBAIHByaXZhdGU6CiAgICAgU3RyaW5n
IG1fdGV4dDsKICAgICBTdHJpbmcgbV9tYXJrdXA7CiAgICAgVmVjdG9yPEtVUkw+IG1fdXJpTGlz
dDsKLSAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gbV9pbWFnZTsKLSAgICBHUmVmUHRyPEdka0RyYWdD
b250ZXh0PiBtX2RyYWdDb250ZXh0OworICAgIFBsYXRmb3JtUmVmUHRyPEdka1BpeGJ1Zj4gbV9p
bWFnZTsKKyAgICBQbGF0Zm9ybVJlZlB0cjxHZGtEcmFnQ29udGV4dD4gbV9kcmFnQ29udGV4dDsK
ICAgICBSZWZQdHI8UmFuZ2U+IG1fcmFuZ2U7CiB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJH
dGsuY3BwCmluZGV4IDY2NDdiOTk3ZGFiMDg0ODYwYzEzN2Y5N2UwOTdiODY1NmE4M2E4ZDcuLjgz
MTI5Y2NhOGQ3NGJiOWE1ZDM5YTQyNmMyNjQxMzhiODQ0NzAwMTMgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0dSZWZQdHJHdGsuY3BwCkBAIC0yNSwyNyArMjUsMjcgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAK
LXRlbXBsYXRlIDw+IEd0a1RhcmdldExpc3QqIHJlZkdQdHIoR3RrVGFyZ2V0TGlzdCogcHRyKQor
dGVtcGxhdGUgPD4gR3RrVGFyZ2V0TGlzdCogcmVmUGxhdGZvcm1QdHIoR3RrVGFyZ2V0TGlzdCog
cHRyKQogewogICAgIGlmIChwdHIpCiAgICAgICAgIGd0a190YXJnZXRfbGlzdF9yZWYocHRyKTsK
ICAgICByZXR1cm4gcHRyOwogfQogCi10ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHdGtUYXJn
ZXRMaXN0KiBwdHIpCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmUGxhdGZvcm1QdHIoR3RrVGFyZ2V0
TGlzdCogcHRyKQogewogICAgIGlmIChwdHIpCiAgICAgICAgIGd0a190YXJnZXRfbGlzdF91bnJl
ZihwdHIpOwogfQogCi10ZW1wbGF0ZSA8PiBHZGtDdXJzb3IqIHJlZkdQdHIoR2RrQ3Vyc29yKiBw
dHIpCit0ZW1wbGF0ZSA8PiBHZGtDdXJzb3IqIHJlZlBsYXRmb3JtUHRyKEdka0N1cnNvciogcHRy
KQogewogICAgIGlmIChwdHIpCiAgICAgICAgIGdka19jdXJzb3JfcmVmKHB0cik7CiAgICAgcmV0
dXJuIHB0cjsKIH0KIAotdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR2RrQ3Vyc29yKiBwdHIp
Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmUGxhdGZvcm1QdHIoR2RrQ3Vyc29yKiBwdHIpCiB7CiAg
ICAgaWYgKHB0cikKICAgICAgICAgZ2RrX2N1cnNvcl91bnJlZihwdHIpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R1JlZlB0ckd0ay5oCmluZGV4IDc3OTQxZjUxYmVjNjRhYzVkYmQ2NWNjOTI2ZDU2NTExMmYxZTVh
M2MuLmVhMWIwODk0ZWUwNGVjMDM2OWFkMDgyZWNmZjlmZjc0NzNmODQ3MmYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HUmVmUHRyR3RrLmgKQEAgLTI4LDExICsyOCwxMSBAQCB0eXBlZGVmIHN0cnVjdCBfR2Rr
Q3Vyc29yIEdka0N1cnNvcjsKIAogbmFtZXNwYWNlIFdURiB7CiAKLXRlbXBsYXRlIDw+IEd0a1Rh
cmdldExpc3QqIHJlZkdQdHIoR3RrVGFyZ2V0TGlzdCogcHRyKTsKLXRlbXBsYXRlIDw+IHZvaWQg
ZGVyZWZHUHRyKEd0a1RhcmdldExpc3QqIHB0cik7Cit0ZW1wbGF0ZSA8PiBHdGtUYXJnZXRMaXN0
KiByZWZQbGF0Zm9ybVB0cihHdGtUYXJnZXRMaXN0KiBwdHIpOwordGVtcGxhdGUgPD4gdm9pZCBk
ZXJlZlBsYXRmb3JtUHRyKEd0a1RhcmdldExpc3QqIHB0cik7CiAKLXRlbXBsYXRlIDw+IEdka0N1
cnNvciogcmVmR1B0cihHZGtDdXJzb3IqIHB0cik7Ci10ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0
cihHZGtDdXJzb3IqIHB0cik7Cit0ZW1wbGF0ZSA8PiBHZGtDdXJzb3IqIHJlZlBsYXRmb3JtUHRy
KEdka0N1cnNvciogcHRyKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZQbGF0Zm9ybVB0cihHZGtD
dXJzb3IqIHB0cik7CiAKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFz
dGVib2FyZEd0ay5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcApp
bmRleCBhMDA2OWNmMjc4ZGRiYzNmNmJhNjY1MmNjOWM2ODE5ZmQ0YmM5NmU5Li5kZGI5NzY4N2U0
ZmQ4ODgxMDYxZjk4OTlmMjQzNmVhMjhmODIzYjU3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0
ZWJvYXJkR3RrLmNwcApAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVJ
bWFnZShOb2RlKiBub2RlLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikKICAgICBJbWFnZSog
aW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2UoKTsKICAgICBBU1NFUlQoaW1hZ2UpOwogCi0gICAg
R1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZiA9IGFkb3B0R1JlZihpbWFnZS0+Z2V0R2RrUGl4YnVm
KCkpOworICAgIFBsYXRmb3JtUmVmUHRyPEdka1BpeGJ1Zj4gcGl4YnVmID0gYWRvcHRQbGF0Zm9y
bVJlZihpbWFnZS0+Z2V0R2RrUGl4YnVmKCkpOwogICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmpl
Y3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKICAgICBkYXRhT2Jq
ZWN0LT5zZXRJbWFnZShwaXhidWYuZ2V0KCkpOwogICAgIG1faGVscGVyLT53cml0ZUNsaXBib2Fy
ZENvbnRlbnRzKGNsaXBib2FyZCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Q
YXN0ZWJvYXJkSGVscGVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxw
ZXIuY3BwCmluZGV4IDJiYWJlOTFlNzhmNWQyNzVlOTQ2ZGY2MTZhNjE1MTYwMzg3MTllYjMuLjk1
ZGYyNWY4MDg4N2NmYTUyZTdkZjEzMGM5ZTM0MTg1ZjIzMzYzMjUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwCkBAIC0yNDUsNyArMjQ1LDcgQEAgVmVjdG9yPEdk
a0F0b20+IFBhc3RlYm9hcmRIZWxwZXI6OmRyb3BBdG9tc0ZvckNvbnRleHQoR3RrV2lkZ2V0KiB3
aWRnZXQsIEdka0RyYWcKICAgICBkcm9wQXRvbXMuYXBwZW5kKG5ldHNjYXBlVVJMQXRvbSk7CiAK
ICAgICAvLyBGb3IgaW1hZ2VzLCB0cnkgdG8gZmluZCB0aGUgbW9zdCBhcHBsaWNhYmxlIGltYWdl
IHR5cGUuCi0gICAgR1JlZlB0cjxHdGtUYXJnZXRMaXN0PiBsaXN0KGd0a190YXJnZXRfbGlzdF9u
ZXcoMCwgMCkpOworICAgIFBsYXRmb3JtUmVmUHRyPEd0a1RhcmdldExpc3Q+IGxpc3QoZ3RrX3Rh
cmdldF9saXN0X25ldygwLCAwKSk7CiAgICAgZ3RrX3RhcmdldF9saXN0X2FkZF9pbWFnZV90YXJn
ZXRzKGxpc3QuZ2V0KCksIGdldElkRm9yVGFyZ2V0VHlwZShUYXJnZXRUeXBlSW1hZ2UpLCBUUlVF
KTsKICAgICBHZGtBdG9tIGF0b20gPSBndGtfZHJhZ19kZXN0X2ZpbmRfdGFyZ2V0KHdpZGdldCwg
Y29udGV4dCwgbGlzdC5nZXQoKSk7CiAgICAgaWYgKGF0b20gIT0gR0RLX05PTkUpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuaCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1BvcHVwTWVudUd0ay5oCmluZGV4IGZiNGU3ZGQ5ZmUzOTdlNzk0MDg3NzI2NjkyMTE0
NGZhM2FmYTVkYjguLmQ2M2U2ZDkxZmM1MDg0OWFmMjY1NzdhMzQ0NGM0MWQzNGY4Zjg2NmUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5oCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5oCkBAIC01OCw3ICs1OCw3IEBAIHByaXZhdGU6
CiAKICAgICBQb3B1cE1lbnVDbGllbnQqIG1fcG9wdXBDbGllbnQ7CiAgICAgSW50UG9pbnQgbV9t
ZW51UG9zaXRpb247Ci0gICAgR1JlZlB0cjxHdGtNZW51PiBtX3BvcHVwOworICAgIFBsYXRmb3Jt
UmVmUHRyPEd0a01lbnU+IG1fcG9wdXA7CiAgICAgSGFzaE1hcDxHdGtXaWRnZXQqLCBpbnQ+IG1f
aW5kZXhNYXA7CiB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJU
aGVtZUd0ay5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAKaW5k
ZXggMzZmY2NmMGNjNjZjMjMyYmJhYWZlMmZmNmFhMzdhYjgzMmJmZGE4Zi4uNTAxOWYzNTdiNDMy
ZWYyMmUxYTFkZjkxZDUxMGZhMGFlYTBkNzQyZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRl
clRoZW1lR3RrLmNwcApAQCAtMTQ4LDcgKzE0OCw3IEBAIFJlbmRlclRoZW1lR3RrOjpSZW5kZXJU
aGVtZUd0aygpCiAgICAgLCBtX3BhdXNlQnV0dG9uKDApCiAgICAgLCBtX3NlZWtCYWNrQnV0dG9u
KDApCiAgICAgLCBtX3NlZWtGb3J3YXJkQnV0dG9uKDApCi0gICAgLCBtX3BhcnRzVGFibGUoYWRv
cHRHUmVmKGdfaGFzaF90YWJsZV9uZXdfZnVsbCgwLCAwLCAwLCBnX2ZyZWUpKSkKKyAgICAsIG1f
cGFydHNUYWJsZShhZG9wdFBsYXRmb3JtUmVmKGdfaGFzaF90YWJsZV9uZXdfZnVsbCgwLCAwLCAw
LCBnX2ZyZWUpKSkKIHsKICAgICBpZiAoIW1vekd0a1JlZkNvdW50KSB7CiAgICAgICAgIG1vel9n
dGtfaW5pdCgpOwpAQCAtMzE3LDcgKzMxNyw3IEBAIHN0YXRpYyBib29sIHBhaW50TW96aWxsYUd0
a1dpZGdldChjb25zdCBSZW5kZXJUaGVtZUd0ayogdGhlbWUsIEd0a1RoZW1lV2lkZ2V0VHlwCiAg
ICAgZWxzZSBpZiAodHlwZSA9PSBNT1pfR1RLX0NIRUNLQlVUVE9OIHx8IHR5cGUgPT0gTU9aX0dU
S19SQURJT0JVVFRPTikKICAgICAgICAgZmxhZ3MgPSB0aGVtZS0+aXNDaGVja2VkKG8pOwogCi0g
ICAgR1JlZlB0cjxHZGtEcmF3YWJsZT4gZHJhd2FibGUoaS5jb250ZXh0LT5nZGtEcmF3YWJsZSgp
KTsKKyAgICBQbGF0Zm9ybVJlZlB0cjxHZGtEcmF3YWJsZT4gZHJhd2FibGUoaS5jb250ZXh0LT5n
ZGtEcmF3YWJsZSgpKTsKICAgICBHZGtSZWN0YW5nbGUgcGFpbnRSZWN0LCBjbGlwUmVjdDsKICAg
ICBpZiAoZHJhd2FibGUpIHsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IGkuY29udGV4
dC0+Z2V0Q1RNKCk7CkBAIC0zNDIsNyArMzQyLDcgQEAgc3RhdGljIGJvb2wgcGFpbnRNb3ppbGxh
R3RrV2lkZ2V0KGNvbnN0IFJlbmRlclRoZW1lR3RrKiB0aGVtZSwgR3RrVGhlbWVXaWRnZXRUeXAK
ICAgICAgICAgLy8gSW4gc29tZSBzaXR1YXRpb25zLCBsaWtlIGR1cmluZyBwcmludCBwcmV2aWV3
cywgdGhpcyBHcmFwaGljc0NvbnRleHQgaXMgbm90CiAgICAgICAgIC8vIGJhY2tlZCBieSBhIEdk
a0RyYXdhYmxlLiBJbiB0aG9zZSBzaXR1YXRpb25zLCB3ZSByZW5kZXIgb250byBhIHBpeG1hcCBh
bmQgdGhlbgogICAgICAgICAvLyBjb3B5IHRoZSByZW5kZXJlZCBkYXRhIGJhY2sgdG8gdGhlIEdy
YXBoaWNzQ29udGV4dCB2aWEgQ2Fpcm8uCi0gICAgICAgIGRyYXdhYmxlID0gYWRvcHRHUmVmKGdk
a19waXhtYXBfbmV3KDAsIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgZ2RrX3Zpc3VhbF9n
ZXRfZGVwdGgoZ2RrX3Zpc3VhbF9nZXRfc3lzdGVtKCkpKSk7CisgICAgICAgIGRyYXdhYmxlID0g
YWRvcHRQbGF0Zm9ybVJlZihnZGtfcGl4bWFwX25ldygwLCByZWN0LndpZHRoKCksIHJlY3QuaGVp
Z2h0KCksIGdka192aXN1YWxfZ2V0X2RlcHRoKGdka192aXN1YWxfZ2V0X3N5c3RlbSgpKSkpOwog
ICAgICAgICBwYWludFJlY3QgPSBjbGlwUmVjdCA9IEludFJlY3QoMCwgMCwgcmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1JlbmRlclRoZW1lR3RrLmggYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0
ay5oCmluZGV4IDcxMzM4ZDRmOTEyYmYyNDcxY2QzMTcyOGM4NjkxZTA2MmUzYWUxYTkuLmI5YzA3
NmRkYTUyY2Q2ODk0NjQyNmUxNzVlOGE0NzEwMzE0MjNkZDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
UmVuZGVyVGhlbWVHdGsuaApAQCAtMTkwLDcgKzE5MCw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRy
PEltYWdlPiBtX3NlZWtCYWNrQnV0dG9uOwogICAgIFJlZlB0cjxJbWFnZT4gbV9zZWVrRm9yd2Fy
ZEJ1dHRvbjsKICAgICBQYWdlKiBtX3BhZ2U7Ci0gICAgR1JlZlB0cjxHSGFzaFRhYmxlPiBtX3Bh
cnRzVGFibGU7CisgICAgUGxhdGZvcm1SZWZQdHI8R0hhc2hUYWJsZT4gbV9wYXJ0c1RhYmxlOwog
CiB9OwogCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktpdC9ndGsvQ2hh
bmdlTG9nCmluZGV4IDIwOWZlNTg0ODRjNDcwMTA4MjhlYTBlYzhjZDVhZGFhYmZhMzk2MTkuLmEx
ODg0MjliYmIxOGRlYzRlMTE4NDhkNGQ0MWQ1ZGNkYzkxYjI1YjMgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9ndGsvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzUg
QEAKIDIwMTAtMDgtMjAgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgog
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENhaXJvIGFu
ZCBFRkwgcG9ydCBzaG91bGRuJ3QgZGVwZW5kIG9uIGdsaWIuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDM1NAorCisgICAgICAgIFJlcGxhY2Ugb2Nj
dXJyZW5jZXMgb2YgR1JlZlB0ciBhbmQgYWRvcHRHUmVmIHdpdGggUGxhdGZvcm1SZWZQdHIgYW5k
CisgICAgICAgIGFkb3B0UGxhdGZvcm1SZWYuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6OnJlcXVl
c3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRHJhZ0NsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYWdDbGllbnQ6OnN0YXJ0
RHJhZyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmg6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwOgorICAgICAgICAo
V2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QpOgorICAg
ICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JN
SU1FVHlwZSk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVn
aW4pOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIu
aDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6OnBvcHVsYXRlU2V0dGluZyk6CisgICAgICAg
IChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6c3RvcmVTZXR0aW5nKToKKyAgICAgICAgKiB3ZWJr
aXQvd2Via2l0ZG93bmxvYWQuY3BwOgorICAgICAgICAod2Via2l0X2Rvd25sb2FkX2Vycm9yKToK
KyAgICAgICAgKiB3ZWJraXQvd2Via2l0bmV0d29ya3JlcXVlc3QuY3BwOgorICAgICAgICAod2Vi
a2l0X25ldHdvcmtfcmVxdWVzdF9uZXdfd2l0aF9jb3JlX3JlcXVlc3QpOgorICAgICAgICAqIHdl
YmtpdC93ZWJraXRuZXR3b3JrcmVzcG9uc2UuY3BwOgorICAgICAgICAod2Via2l0X25ldHdvcmtf
cmVzcG9uc2VfbmV3X3dpdGhfY29yZV9yZXNwb25zZSk6CisKKzIwMTAtMDgtMjAgIE1hcnRpbiBS
b2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCiAgICAgICAgIFJldmlld2VkIGJ5IFBh
dmVsIEZlbGRtYW4uCiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogSW5zcGVjdG9yIHRlc3RzIHdl
cmUgZGlzYWJsZWQgZm9yIEdUSy4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21l
Q2xpZW50R3RrLmNwcAppbmRleCAwNzdkOWNiYjYxMjJkZmRhNGFkNzFhYmJhMGFkZjEzMjNjZjUy
M2Q1Li43ZTQwOTBiODlkY2Y2NmJkNGYwNWQwOTFiYzRiNzY4NzUzZWZhMWFmIDEwMDY0NAotLS0g
YS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKKysrIGIvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCkBAIC02MTIsNyArNjEy
LDcgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JG
cmFtZShGcmFtZSogZnJhbWUsIEdlb2xvY2F0aW8KICAgICBXZWJLaXRXZWJGcmFtZSogd2ViRnJh
bWUgPSBraXQoZnJhbWUpOwogICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJv
bUZyYW1lKHdlYkZyYW1lKTsKIAotICAgIEdSZWZQdHI8V2ViS2l0R2VvbG9jYXRpb25Qb2xpY3lE
ZWNpc2lvbj4gcG9saWN5RGVjaXNpb24oYWRvcHRHUmVmKHdlYmtpdF9nZW9sb2NhdGlvbl9wb2xp
Y3lfZGVjaXNpb25fbmV3KHdlYkZyYW1lLCBnZW9sb2NhdGlvbikpKTsKKyAgICBQbGF0Zm9ybVJl
ZlB0cjxXZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uPiBwb2xpY3lEZWNpc2lvbihhZG9w
dFBsYXRmb3JtUmVmKHdlYmtpdF9nZW9sb2NhdGlvbl9wb2xpY3lfZGVjaXNpb25fbmV3KHdlYkZy
YW1lLCBnZW9sb2NhdGlvbikpKTsKIAogICAgIGdib29sZWFuIGlzSGFuZGxlZCA9IEZBTFNFOwog
ICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh3ZWJWaWV3LCAiZ2VvbG9jYXRpb24tcG9saWN5LWRl
Y2lzaW9uLXJlcXVlc3RlZCIsIHdlYkZyYW1lLCBwb2xpY3lEZWNpc2lvbi5nZXQoKSwgJmlzSGFu
ZGxlZCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRH
dGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50R3RrLmNwcAppbmRl
eCBlZmNlM2RjZjZkMzE0MjE4Y2Q0ODQ1MjMzNzYzYTJiNGRiYjNlNGUyLi5iNjA3NWI2OWU4ZTZm
MTQyODFkNTdiZGJkMjE1MTQ5MTI2Y2U2OWQ5IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0RyYWdDbGllbnRHdGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvRHJhZ0NsaWVudEd0ay5jcHAKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBEcmFnQ2xpZW50Ojpz
dGFydERyYWcoRHJhZ0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRQb2ludCYgZHJhZ0ltYWdlT3Jp
Z2luLAogCiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0
X3dlYl92aWV3KGtpdChmcmFtZSkpOwogICAgIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2Jq
ZWN0ID0gY2xpcGJvYXJkR3RrLT5kYXRhT2JqZWN0KCk7Ci0gICAgR1JlZlB0cjxHdGtUYXJnZXRM
aXN0PiB0YXJnZXRMaXN0KGNsaXBib2FyZEd0ay0+aGVscGVyKCktPnRhcmdldExpc3RGb3JEYXRh
T2JqZWN0KGRhdGFPYmplY3QuZ2V0KCkpKTsKKyAgICBQbGF0Zm9ybVJlZlB0cjxHdGtUYXJnZXRM
aXN0PiB0YXJnZXRMaXN0KGNsaXBib2FyZEd0ay0+aGVscGVyKCktPnRhcmdldExpc3RGb3JEYXRh
T2JqZWN0KGRhdGFPYmplY3QuZ2V0KCkpKTsKICAgICBHT3duUHRyPEdka0V2ZW50PiBjdXJyZW50
RXZlbnQoZ3RrX2dldF9jdXJyZW50X2V2ZW50KCkpOwogCiAgICAgR2RrRHJhZ0NvbnRleHQqIGNv
bnRleHQgPSBndGtfZHJhZ19iZWdpbihHVEtfV0lER0VUKG1fd2ViVmlldyksIHRhcmdldExpc3Qu
Z2V0KCksIGRyYWdPcGVyYXRpb25Ub0dka0RyYWdBY3Rpb25zKGNsaXBib2FyZC0+c291cmNlT3Bl
cmF0aW9uKCkpLCAxLCBjdXJyZW50RXZlbnQuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuaCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmgKaW5kZXggM2U4ODFmYWIyMTI2Nzc4ZDdhNDA4M2ZjYjBi
Nzc4Zjk2MzFiOTMyYS4uZWZiNzM0ZjZkMjZjYzg0ZTc0NTNkZjU5MmE2OTQ3ZTg5NGJjNmE3NSAx
MDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuaAor
KysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5oCkBAIC0xNDEs
NyArMTQxLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgICAgIGJvb2wgbV90cmVhdENvbnRl
eHRDb21taXRBc0tleUV2ZW50OwogICAgICAgICBHT3duUHRyPGdjaGFyPiBtX3BlbmRpbmdDb21w
b3NpdGlvbjsKICAgICAgICAgVmVjdG9yPGNvbnN0IGNoYXIqPiBtX3BlbmRpbmdFZGl0b3JDb21t
YW5kczsKLSAgICAgICAgR1JlZlB0cjxHdGtXaWRnZXQ+IG1fbmF0aXZlV2lkZ2V0OworICAgICAg
ICBQbGF0Zm9ybVJlZlB0cjxHdGtXaWRnZXQ+IG1fbmF0aXZlV2lkZ2V0OwogICAgIH07CiB9CiAK
ZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRH
dGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5j
cHAKaW5kZXggOThhYzRhMWFlMWY2ZTNhNzFmNjIyNjVkOGM4MTc2NTYxMDczM2Q3ZC4uMmNmNGYz
NjU4NjI2ZjY2NjlkMGMzMzg3NjY4YzMwNDBkMzI5N2ExZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKQEAgLTIwMSwxOSArMjAx
LDE5IEBAIHN0YXRpYyBjaGFyKiB0b1N0cmluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiAK
IHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KFdlYkNvcmU6
OkRvY3VtZW50TG9hZGVyKiBsb2FkZXIsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3Bv
bnNlKQogewotICAgIEdSZWZQdHI8V2ViS2l0TmV0d29ya1Jlc3BvbnNlPiBuZXR3b3JrUmVzcG9u
c2UoMCk7CisgICAgUGxhdGZvcm1SZWZQdHI8V2ViS2l0TmV0d29ya1Jlc3BvbnNlPiBuZXR3b3Jr
UmVzcG9uc2UoMCk7CiAKICAgICAvLyBXZSBhcmUgYWRkaW5nIG9uZSBtb3JlIHJlc291cmNlIHRv
IHRoZSBsb2FkLCBvciBtYXliZSB3ZSBhcmUKICAgICAvLyBqdXN0IHJlZGlyZWN0aW5nIGEgbG9h
ZC4KICAgICBpZiAocmVkaXJlY3RSZXNwb25zZS5pc051bGwoKSkKICAgICAgICAgc3RhdGljX2Nh
c3Q8V2ViS2l0OjpEb2N1bWVudExvYWRlcio+KGxvYWRlciktPmluY3JlYXNlTG9hZENvdW50KGlk
ZW50aWZpZXIpOwogICAgIGVsc2UKLSAgICAgICAgbmV0d29ya1Jlc3BvbnNlID0gYWRvcHRHUmVm
KHdlYmtpdF9uZXR3b3JrX3Jlc3BvbnNlX25ld193aXRoX2NvcmVfcmVzcG9uc2UocmVkaXJlY3RS
ZXNwb25zZSkpOworICAgICAgICBuZXR3b3JrUmVzcG9uc2UgPSBhZG9wdFBsYXRmb3JtUmVmKHdl
YmtpdF9uZXR3b3JrX3Jlc3BvbnNlX25ld193aXRoX2NvcmVfcmVzcG9uc2UocmVkaXJlY3RSZXNw
b25zZSkpOwogCiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IGdldFZpZXdGcm9tRnJhbWUo
bV9mcmFtZSk7CiAgICAgR093blB0cjxnY2hhcj4gaWRlbnRpZmllclN0cmluZyh0b1N0cmluZyhp
ZGVudGlmaWVyKSk7CiAgICAgV2ViS2l0V2ViUmVzb3VyY2UqIHdlYlJlc291cmNlID0gd2Via2l0
X3dlYl92aWV3X2dldF9yZXNvdXJjZSh3ZWJWaWV3LCBpZGVudGlmaWVyU3RyaW5nLmdldCgpKTsK
LSAgICBHUmVmUHRyPFdlYktpdE5ldHdvcmtSZXF1ZXN0PiBuZXR3b3JrUmVxdWVzdChhZG9wdEdS
ZWYod2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXdfd2l0aF9jb3JlX3JlcXVlc3QocmVxdWVzdCkp
KTsKKyAgICBQbGF0Zm9ybVJlZlB0cjxXZWJLaXROZXR3b3JrUmVxdWVzdD4gbmV0d29ya1JlcXVl
c3QoYWRvcHRQbGF0Zm9ybVJlZih3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ld193aXRoX2NvcmVf
cmVxdWVzdChyZXF1ZXN0KSkpOwogCiAgICAgaWYgKCFyZWRpcmVjdFJlc3BvbnNlLmlzTnVsbCgp
KSB7CiAgICAgICAgIC8vIFRoaXMgaXMgYSByZWRpcmVjdCwgc28gd2UgbmVlZCB0byB1cGRhdGUg
dGhlIFdlYlJlc291cmNlJ3Mga25vd2xlZGdlCkBAIC0zMTQsNyArMzE0LDcgQEAgdm9pZCBGcmFt
ZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JNSU1FVHlwZShGcmFtZVBvbGlj
eUZ1bmN0aW9uIHBvbGkKICAgICBpZiAoaXNIYW5kbGVkKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBHUmVmUHRyPFdlYktpdE5ldHdvcmtSZXNwb25zZT4gbmV0d29ya1Jlc3BvbnNlKGFkb3B0R1Jl
Zih3ZWJraXRfd2ViX2ZyYW1lX2dldF9uZXR3b3JrX3Jlc3BvbnNlKG1fZnJhbWUpKSk7CisgICAg
UGxhdGZvcm1SZWZQdHI8V2ViS2l0TmV0d29ya1Jlc3BvbnNlPiBuZXR3b3JrUmVzcG9uc2UoYWRv
cHRQbGF0Zm9ybVJlZih3ZWJraXRfd2ViX2ZyYW1lX2dldF9uZXR3b3JrX3Jlc3BvbnNlKG1fZnJh
bWUpKSk7CiAgICAgaWYgKG5ldHdvcmtSZXNwb25zZSkgewogICAgICAgICBSZXNvdXJjZVJlc3Bv
bnNlIHJlc3BvbnNlID0gY29yZShuZXR3b3JrUmVzcG9uc2UuZ2V0KCkpOwogICAgICAgICBpZiAo
cmVzcG9uc2UuaXNBdHRhY2htZW50KCkpIHsKQEAgLTQ0OSw3ICs0NDksNyBAQCBQYXNzUmVmUHRy
PFdpZGdldD4gRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiBw
bHVnaW5TaXplLCBIVAogICAgIENTdHJpbmcgbWltZVR5cGVTdHJpbmcgPSBtaW1lVHlwZS51dGY4
KCk7CiAKICAgICBBU1NFUlQocGFyYW1OYW1lcy5zaXplKCkgPT0gcGFyYW1WYWx1ZXMuc2l6ZSgp
KTsKLSAgICBHUmVmUHRyPEdIYXNoVGFibGU+IGhhc2ggPSBhZG9wdEdSZWYoZ19oYXNoX3RhYmxl
X25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsLCBnX2ZyZWUsIGdfZnJlZSkpOworICAg
IFBsYXRmb3JtUmVmUHRyPEdIYXNoVGFibGU+IGhhc2ggPSBhZG9wdFBsYXRmb3JtUmVmKGdfaGFz
aF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBnX3N0cl9lcXVhbCwgZ19mcmVlLCBnX2ZyZWUp
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1OYW1lcy5zaXplKCk7ICsraSkg
ewogICAgICAgICBnX2hhc2hfdGFibGVfaW5zZXJ0KGhhc2guZ2V0KCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ19zdHJkdXAocGFyYW1OYW1lc1tpXS51dGY4KCkuZGF0YSgpKSwKZGlm
ZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnVsbHNjcmVlblZpZGVvQ29udHJv
bGxlci5oIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GdWxsc2NyZWVuVmlkZW9Db250cm9s
bGVyLmgKaW5kZXggMzFiN2ZmMDc4ODcwMmFlM2M5ZjAxY2I5ZDBmMWJkY2Y4MzY3ZDE0Mi4uMTU2
N2Q5YjJhMzhjY2FhMWM4NTYwZjY1ZTlkZDFlOWNkMWM0YTUwNCAxMDA2NDQKLS0tIGEvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmgKKysrIGIvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmgKQEAgLTg5
LDcgKzg5LDcgQEAgcHJpdmF0ZToKICAgICBndWludCBtX3ZvbHVtZVVwZGF0ZUlkOwogICAgIGJv
b2wgbV9zZWVrTG9jazsKICAgICBHdGtXaWRnZXQqIG1fd2luZG93OwotICAgIEdSZWZQdHI8R2Rr
Q3Vyc29yPiBtX2N1cnNvcjsKKyAgICBQbGF0Zm9ybVJlZlB0cjxHZGtDdXJzb3I+IG1fY3Vyc29y
OwogICAgIEd0a1dpZGdldCogbV9odWRXaW5kb3c7CiAgICAgR3RrQWN0aW9uKiBtX3BsYXlQYXVz
ZUFjdGlvbjsKICAgICBHdGtBY3Rpb24qIG1fZXhpdEZ1bGxzY3JlZW5BY3Rpb247CmRpZmYgLS1n
aXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5jcHAgYi9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5jcHAKaW5kZXggYTJi
MTY3ZjVkYWUwNWQ4NDgwM2IxZGU2N2EwMjc1Mzc1NmNjNDY0MS4uYWVkZjIxZmU0OTIwYzYzNDg1
YjNlMmJhNGMzMjEzNjkyNDc1ZjY2ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvSW5zcGVjdG9yQ2xpZW50R3RrLmNwcApAQCAtMTc1LDcgKzE3NSw3IEBAIHZvaWQgSW5zcGVj
dG9yQ2xpZW50Ojpwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyogdmFs
dWUpCiAgICAgaWYgKCFzZXR0aW5ncykKICAgICAgICAgcmV0dXJuOwogCi0gICAgR1JlZlB0cjxH
VmFyaWFudD4gdmFyaWFudCA9IGFkb3B0R1JlZihnX3NldHRpbmdzX2dldF92YWx1ZShzZXR0aW5n
cywgdG9HU2V0dGluZ05hbWUoa2V5KS51dGY4KCkuZGF0YSgpKSk7CisgICAgUGxhdGZvcm1SZWZQ
dHI8R1ZhcmlhbnQ+IHZhcmlhbnQgPSBhZG9wdFBsYXRmb3JtUmVmKGdfc2V0dGluZ3NfZ2V0X3Zh
bHVlKHNldHRpbmdzLCB0b0dTZXR0aW5nTmFtZShrZXkpLnV0ZjgoKS5kYXRhKCkpKTsKIAogICAg
IGlmIChrZXkgPT0gInJlc291cmNlVHJhY2tpbmdFbmFibGVkIiB8fCBrZXkgPT0gInhock1vbml0
b3IiCiAgICAgICAgIHx8IGtleSA9PSAiZGVidWdnZXJFbmFibGVkIiB8fCBrZXkgPT0gInByb2Zp
bGVyRW5hYmxlZCIpCkBAIC0xOTMsMTUgKzE5MywxNSBAQCB2b2lkIEluc3BlY3RvckNsaWVudDo6
c3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
IGlmICghc2V0dGluZ3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdSZWZQdHI8R1ZhcmlhbnQ+
IHZhcmlhbnQoMCk7CisgICAgUGxhdGZvcm1SZWZQdHI8R1ZhcmlhbnQ+IHZhcmlhbnQoMCk7CiAK
ICAgICAvLyBTZXQgdGhlIGtleSB3aXRoIHRoZSBhcHByb3ByaWF0ZSB0eXBlLCBhbmQgYWxzbyBh
dm9pZCBzZXR0aW5nCiAgICAgLy8gdW5rbm93biBrZXlzIHRvIGF2b2lkIGFib3J0aW5nIHRoZSBl
eGVjdXRpb24uCiAgICAgaWYgKGtleSA9PSAicmVzb3VyY2VUcmFja2luZ0VuYWJsZWQiIHx8IGtl
eSA9PSAieGhyTW9uaXRvciIKICAgICAgICAgfHwga2V5ID09ICJkZWJ1Z2dlckVuYWJsZWQiIHx8
IGtleSA9PSAicHJvZmlsZXJFbmFibGVkIikKLSAgICAgICAgdmFyaWFudCA9IGFkb3B0R1JlZih2
YXJpYW50RnJvbVRydXRoU3RyaW5nKHZhbHVlKSk7CisgICAgICAgIHZhcmlhbnQgPSBhZG9wdFBs
YXRmb3JtUmVmKHZhcmlhbnRGcm9tVHJ1dGhTdHJpbmcodmFsdWUpKTsKICAgICBlbHNlIGlmIChr
ZXkgPT0gImZyb250ZW5kU2V0dGluZ3MiKQotICAgICAgICB2YXJpYW50ID0gYWRvcHRHUmVmKGdf
dmFyaWFudF9uZXdfc3RyaW5nKHZhbHVlLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgdmFyaWFu
dCA9IGFkb3B0UGxhdGZvcm1SZWYoZ192YXJpYW50X25ld19zdHJpbmcodmFsdWUudXRmOCgpLmRh
dGEoKSkpOwogCiAgICAgaWYgKCF2YXJpYW50KQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQg
YS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRkb3dubG9hZC5jcHAKaW5kZXggMDcxN2U3Yzk1OTUxYzE0YjcxYTlhMzhmNjczMzlm
MzA5MzkzNjk3Ny4uOWJjYjczOTZlMzRjMWQ0MTY5MjYzNDVlNWY0ZWIxNGYzMDBjOTEyNyAxMDA2
NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwCisrKyBiL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcApAQCAtOTA1LDcgKzkwNSw3IEBAIHN0YXRp
YyB2b2lkIHdlYmtpdF9kb3dubG9hZF9lcnJvcihXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNv
bnN0IFJlc291cmNlRXJyb3ImCiAgICAgd2Via2l0X2Rvd25sb2FkX2Nsb3NlX3N0cmVhbShkb3du
bG9hZCk7CiAKICAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJp
djsKLSAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBwcm90ZWN0KGRvd25sb2FkKTsKKyAgICBQ
bGF0Zm9ybVJlZlB0cjxXZWJLaXREb3dubG9hZD4gcHJvdGVjdChkb3dubG9hZCk7CiAKICAgICBn
X3RpbWVyX3N0b3AocHJpdi0+dGltZXIpOwogICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfc3RhdHVz
KGRvd25sb2FkLCBXRUJLSVRfRE9XTkxPQURfU1RBVFVTX0VSUk9SKTsKZGlmZiAtLWdpdCBhL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0LmNwcCBiL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0LmNwcAppbmRleCBjNzJhYmJkMGQzOWMwNTI5ZGY3ZTEz
OTUwMDA3YWZmNWE1MjU0MzBmLi44YjUwOTQ4NmY5ZTFkOTllNzRjM2MzZDAzZTVmM2YzYmRlZGZm
YTM4IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5j
cHAKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0bmV0d29ya3JlcXVlc3QuY3BwCkBAIC0x
NjQsNyArMTY0LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X25ldHdvcmtfcmVxdWVzdF9pbml0KFdl
YktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0KQogLy8gZm9yIGludGVybmFsIHVzZSBvbmx5CiBX
ZWJLaXROZXR3b3JrUmVxdWVzdCogd2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXdfd2l0aF9jb3Jl
X3JlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3Qp
CiB7Ci0gICAgR1JlZlB0cjxTb3VwTWVzc2FnZT4gc291cE1lc3NhZ2UoYWRvcHRHUmVmKHJlc291
cmNlUmVxdWVzdC50b1NvdXBNZXNzYWdlKCkpKTsKKyAgICBQbGF0Zm9ybVJlZlB0cjxTb3VwTWVz
c2FnZT4gc291cE1lc3NhZ2UoYWRvcHRQbGF0Zm9ybVJlZihyZXNvdXJjZVJlcXVlc3QudG9Tb3Vw
TWVzc2FnZSgpKSk7CiAgICAgaWYgKHNvdXBNZXNzYWdlKQogICAgICAgICByZXR1cm4gV0VCS0lU
X05FVFdPUktfUkVRVUVTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVFVRVNU
LCAibWVzc2FnZSIsIHNvdXBNZXNzYWdlLmdldCgpLCBOVUxMKSk7CiAKZGlmZiAtLWdpdCBhL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXNwb25zZS5jcHAgYi9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRuZXR3b3JrcmVzcG9uc2UuY3BwCmluZGV4IDY3NDViOTQyZGY3NGYzMGMzMWE4
MDg5NDhkMWZjMDQ2NmM1ZjkyMTYuLmQ0ZGQ1NjJhYWE4OGQ4M2I4MjBjYWVmNWFmY2ZmZjA1MzMz
OGYxOTggMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXNwb25z
ZS5jcHAKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0bmV0d29ya3Jlc3BvbnNlLmNwcApA
QCAtMTYxLDcgKzE2MSw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9uZXR3b3JrX3Jlc3BvbnNlX2lu
aXQoV2ViS2l0TmV0d29ya1Jlc3BvbnNlKiByZXNwb25zZSkKIC8vIGZvciBpbnRlcm5hbCB1c2Ug
b25seQogV2ViS2l0TmV0d29ya1Jlc3BvbnNlKiB3ZWJraXRfbmV0d29ya19yZXNwb25zZV9uZXdf
d2l0aF9jb3JlX3Jlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc291
cmNlUmVzcG9uc2UpCiB7Ci0gICAgR1JlZlB0cjxTb3VwTWVzc2FnZT4gc291cE1lc3NhZ2UoYWRv
cHRHUmVmKHJlc291cmNlUmVzcG9uc2UudG9Tb3VwTWVzc2FnZSgpKSk7CisgICAgUGxhdGZvcm1S
ZWZQdHI8U291cE1lc3NhZ2U+IHNvdXBNZXNzYWdlKGFkb3B0UGxhdGZvcm1SZWYocmVzb3VyY2VS
ZXNwb25zZS50b1NvdXBNZXNzYWdlKCkpKTsKICAgICBpZiAoc291cE1lc3NhZ2UpCiAgICAgICAg
IHJldHVybiBXRUJLSVRfTkVUV09SS19SRVNQT05TRShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVf
TkVUV09SS19SRVNQT05TRSwgIm1lc3NhZ2UiLCBzb3VwTWVzc2FnZS5nZXQoKSwgTlVMTCkpOwog
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKaW5kZXggMGIyZDMyNDNjMjcyNjA1ZTgwNWZmZmFjMzQ3OWNlMWE3Mzc2ODA1NS4uMzIzNzQ1
M2M4ODg4ZWZjZTcxNGFlYmNlNDc0MDdlNDAxOTg5MWYwYSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE4IEBA
CiAyMDEwLTA4LTIwICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDYWlybyBhbmQg
RUZMIHBvcnQgc2hvdWxkbid0IGRlcGVuZCBvbiBnbGliLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQzNTQKKworICAgICAgICBSZXBsYWNlIG9jY3Vy
cmVuY2VzIG9mIEdSZWZQdHIgYW5kIGFkb3B0R1JlZiB3aXRoIFBsYXRmb3JtUmVmUHRyIGFuZAor
ICAgICAgICBhZG9wdFBsYXRmb3JtUmVmLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3Rr
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRHdGsuY3BwOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNTZWxlY3RlZCk6CisKKzIwMTAtMDgtMjAgIE1hcnRpbiBSb2JpbnNvbiAgPG1y
b2JpbnNvbkBpZ2FsaWEuY29tPgorCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4u
CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogSW5zcGVjdG9yIHRlc3RzIHdlcmUgZGlzYWJsZWQg
Zm9yIEdUSy4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50R3RrLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0
ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50R3RrLmNwcAppbmRleCBhMDlhZDJhOTNiNGJjZWJlNTVl
N2I3YTNhMTM4Njg4ODViYTFhMDNiLi5hNWM1ZTlmMWU2MzM5YjhjYTZkYmJiMTEzZDI1OTgyMmZl
YzUwODM2IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudEd0ay5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
Z3RrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRHdGsuY3BwCkBAIC0zOTQsNyArMzk0LDcgQEAgYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkKCkgY29uc3QKICAgICBpZiAoIUFU
S19JU19PQkpFQ1QobV9lbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgR1Jl
ZlB0cjxBdGtTdGF0ZVNldD4gc3RhdGVTZXQgPSBhZG9wdEdSZWYoYXRrX29iamVjdF9yZWZfc3Rh
dGVfc2V0KEFUS19PQkpFQ1QobV9lbGVtZW50KSkpOworICAgIFBsYXRmb3JtUmVmUHRyPEF0a1N0
YXRlU2V0PiBzdGF0ZVNldCA9IGFkb3B0UGxhdGZvcm1SZWYoYXRrX29iamVjdF9yZWZfc3RhdGVf
c2V0KEFUS19PQkpFQ1QobV9lbGVtZW50KSkpOwogICAgIGdib29sZWFuIGlzU2VsZWN0ZWQgPSBh
dGtfc3RhdGVfc2V0X2NvbnRhaW5zX3N0YXRlKHN0YXRlU2V0LmdldCgpLCBBVEtfU1RBVEVfU0VM
RUNURUQpOwogCiAgICAgcmV0dXJuIGlzU2VsZWN0ZWQ7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>