<?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>227150</bug_id>
          
          <creation_ts>2021-06-17 16:03:10 -0700</creation_ts>
          <short_desc>[webkitcorepy] Add NestedFuzzyDict</short_desc>
          <delta_ts>2021-06-29 12:27:21 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=225616</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>dewei_zhu</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1770867</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-06-17 16:03:10 -0700</bug_when>
    <thetext>Hashes have some unique properties when it comes to dictionaries. A direct look-up is obviously fastest, but, and this is particularly relevant for git hashes, you don&apos;t actually need the entirety of the string to get a low collision rate. With as few as 4 characters, most hashes in the WebKit project won&apos;t collide. But the birthday paradox ensures that at least a few hashes will collide, even with as many as 8 or 9 characters. To address this problem, we should have a nested dictionary structure that allows partial look-up keys (as long as those keys meet some minimum length) while allowing a fuzzy look-up of the the remaining 36 characters of a SHA-1 hash.

This technique is generally applicable to strings, so webkitcorepy should own this object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770868</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-17 16:06:51 -0700</bug_when>
    <thetext>&lt;rdar://problem/79475464&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770877</commentid>
    <comment_count>2</comment_count>
      <attachid>431735</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-06-17 16:20:00 -0700</bug_when>
    <thetext>Created attachment 431735
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770883</commentid>
    <comment_count>3</comment_count>
      <attachid>431737</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-06-17 16:27:25 -0700</bug_when>
    <thetext>Created attachment 431737
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771941</commentid>
    <comment_count>4</comment_count>
      <attachid>432048</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-06-23 08:33:03 -0700</bug_when>
    <thetext>Created attachment 432048
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773208</commentid>
    <comment_count>5</comment_count>
      <attachid>432425</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-06-28 14:47:32 -0700</bug_when>
    <thetext>Created attachment 432425
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773247</commentid>
    <comment_count>6</comment_count>
      <attachid>432425</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2021-06-28 15:56:33 -0700</bug_when>
    <thetext>Comment on attachment 432425
Patch

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

&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/nested_fuzzy_dict.py:26
&gt; +class NestedFuzzyDict(object):

Do we expect to support delete in this function?

&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/nested_fuzzy_dict.py:33
&gt; +        self.primary_size = int(primary_size or 4)

Do we expect it raise an exception when primary_size is something int() will raise an exception e.g.&apos;invalid&apos; ?
Also, why the primary size is set to 4?
Would it be considered &apos;over engineering&apos; if we implement this using Trie?

&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/nested_fuzzy_dict.py:47
&gt; +        self.assert_valid_key(keyname)
&gt; +        key_a, key_b = keyname[:self.primary_size], keyname[self.primary_size:]
&gt; +        value = None
&gt; +        found = False
&gt; +        for key, result in self._data.get(key_a, dict()).items():
&gt; +            if key.startswith(key_b):
&gt; +                if found:
&gt; +                    raise KeyError(&quot;Multiple values match &apos;{}&apos;&quot;.format(keyname))
&gt; +                found = True
&gt; +                value = result

Can we invoke self.getitem(keyname, None) instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773264</commentid>
    <comment_count>7</comment_count>
      <attachid>432425</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-06-28 16:30:56 -0700</bug_when>
    <thetext>Comment on attachment 432425
Patch

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

&gt;&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/nested_fuzzy_dict.py:26
&gt;&gt; +class NestedFuzzyDict(object):
&gt; 
&gt; Do we expect to support delete in this function?

I don&apos;t have a need for it currently, although I could add it relatively easily. I didn&apos;t want to completely recreate the API for dict, this isn&apos;t something I expect we&apos;ll use much.

&gt;&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/nested_fuzzy_dict.py:33
&gt;&gt; +        self.primary_size = int(primary_size or 4)
&gt; 
&gt; Do we expect it raise an exception when primary_size is something int() will raise an exception e.g.&apos;invalid&apos; ?
&gt; Also, why the primary size is set to 4?
&gt; Would it be considered &apos;over engineering&apos; if we implement this using Trie?

I think the problem with a Trie is that we really only want the single nested dict. The point of nesting is so that we can narrow down the set of potentially matching hashes sufficiently so we can do the startswith check on just a handful of hashes. Its very similar to the CSS 101 idea of a hash table managing collisions with a linked list

&gt;&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/nested_fuzzy_dict.py:47
&gt;&gt; +                value = result
&gt; 
&gt; Can we invoke self.getitem(keyname, None) instead?

We cannot, and it&apos;s this little bit that makes it fuzzy.

This entire structure is optimized for hashes. The first 4 characters of a hash are mostly sufficient to avoid collisions in the webkit repository, but there are a significant minority of 4 character sequences which do point to multiple hashes. However, it&apos;s very unlikely that those 4 character sequences point to more than 2-3 hashes, which is what this function is counting on. Basically, this lets us have the fast look up of a hash table, while also allowing the user to specify partial hashes (hopefully 8-12 characters, but we do our best regardless)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773272</commentid>
    <comment_count>8</comment_count>
      <attachid>432425</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2021-06-28 16:58:04 -0700</bug_when>
    <thetext>Comment on attachment 432425
Patch

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

&gt;&gt;&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/nested_fuzzy_dict.py:47
&gt;&gt;&gt; +                value = result
&gt;&gt; 
&gt;&gt; Can we invoke self.getitem(keyname, None) instead?
&gt; 
&gt; We cannot, and it&apos;s this little bit that makes it fuzzy.
&gt; 
&gt; This entire structure is optimized for hashes. The first 4 characters of a hash are mostly sufficient to avoid collisions in the webkit repository, but there are a significant minority of 4 character sequences which do point to multiple hashes. However, it&apos;s very unlikely that those 4 character sequences point to more than 2-3 hashes, which is what this function is counting on. Basically, this lets us have the fast look up of a hash table, while also allowing the user to specify partial hashes (hopefully 8-12 characters, but we do our best regardless)

I mean, what if we do
```
def __getitem__(self, keyname):
    found, value = self.getitem(keyname)
    if found:
        return value
    raise KeyError(keyname)
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773476</commentid>
    <comment_count>9</comment_count>
      <attachid>432505</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-06-29 11:46:21 -0700</bug_when>
    <thetext>Created attachment 432505
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773477</commentid>
    <comment_count>10</comment_count>
      <attachid>432505</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2021-06-29 11:49:37 -0700</bug_when>
    <thetext>Comment on attachment 432505
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773493</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-29 12:27:20 -0700</bug_when>
    <thetext>Committed r279381 (239246@main): &lt;https://commits.webkit.org/239246@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 432505.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431735</attachid>
            <date>2021-06-17 16:20:00 -0700</date>
            <delta_ts>2021-06-17 16:27:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227150-20210617161959.patch</filename>
            <type>text/plain</type>
            <size>11856</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MDAyCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzM0YzllMDBlNmVjZjczYmM1OWM1YWU2NTFlNzlmNDkw
Yjg5ZWYwZC4uNGEzYWYxYmY1ZDQ4MjY4NmIxZjViMDRhYzA4ZjYwMTcyYjVhMTBlMiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3
IEBACisyMDIxLTA2LTE3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbd2Via2l0Y29yZXB5XSBBZGQgTmVzdGVkRnV6enlEaWN0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcxNTAKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzc5NDc1NDY0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3NldHVwLnB5OiBC
dW1wIHZlcnNpb24uCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dl
YmtpdGNvcmVweS9fX2luaXRfXy5weTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9uZXN0ZWRfZnV6enlfZGljdC5weTogQWRkZWQu
CisgICAgICAgIChOZXN0ZWRGdXp6eURpY3QpOgorICAgICAgICAoTmVzdGVkRnV6enlEaWN0LmFz
c2VydF92YWxpZF9rZXkpOiBFbnN1cmUgdGhhdCB0aGUgcHJvdmlkZWQga2V5IGlzIGZ1enotYWJs
ZS4KKyAgICAgICAgKE5lc3RlZEZ1enp5RGljdC5fX2luaXRfXyk6IENvbnN0cnVjdCB0aGUgb2Jq
ZWN0IHRoZSBzYW1lIHdheSBhIGRpY3Rpb25hcnkgaXMgY29uc3RydWN0ZWQuCisgICAgICAgIChO
ZXN0ZWRGdXp6eURpY3QuX19nZXRpdGVtX18pOiBTcGxpdCBwcm92aWRlZCBrZXluYW1lIGFuZCBm
dXp6eSBtYXRjaCB0aGUgc2Vjb25kIHBhcnQuCisgICAgICAgIChOZXN0ZWRGdXp6eURpY3QuZ2V0
KTogRGl0dG8uCisgICAgICAgIChOZXN0ZWRGdXp6eURpY3QuZ2V0aXRlbSk6IFJldHVybiB0aGUg
Y29tcGxldGUga2V5bmFtZSBhbmQgdmFsdWUuCisgICAgICAgIChOZXN0ZWRGdXp6eURpY3QuX19z
ZXRpdGVtX18pOiBBZGQgdmFsdWUgdG8gZGljdGlvbmFyeS4KKyAgICAgICAgKE5lc3RlZEZ1enp5
RGljdC51cGRhdGUpOiBHaXZlbiBhIGRpY3Rpb25hcnksIGluc2VydCBpdCdzIGNvbnRlbnRzIGlu
dG8gdGhpcyBvYmplY3QuCisgICAgICAgIChOZXN0ZWRGdXp6eURpY3Qua2V5cyk6IEl0ZXJhdGUg
dGhyb3VnaCBhbGwga2V5cyBpbiB0aGUgb2JqZWN0LgorICAgICAgICAoTmVzdGVkRnV6enlEaWN0
LnZhbHVlcyk6IEl0ZXJhdGUgdGhyb3VnaCBhbGwgdmFsdWVzIGluIHRoZSBvYmplY3QuCisgICAg
ICAgIChOZXN0ZWRGdXp6eURpY3QuaXRlbXMpOiBJdGVyYXRlIHRocm91Z2ggYWxsIGtleS92YWx1
ZSBwYWlycyBpbiB0aGUgb2JqZWN0LgorICAgICAgICAoTmVzdGVkRnV6enlEaWN0LmRpY3QpOiBS
ZXR1cm4gYSBzdGFuZGFyZCBkaWN0aW9uYXJ5IHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoaXMgb2Jq
ZWN0LgorICAgICAgICAoTmVzdGVkRnV6enlEaWN0Ll9fcmVwcl9fKToKKyAgICAgICAgKE5lc3Rl
ZEZ1enp5RGljdC5fX3N0cl9fKToKKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRj
b3JlcHkvd2Via2l0Y29yZXB5L3Rlc3RzL25lc3RlZF9mdXp6eV9kaWN0X3VuaXR0ZXN0LnB5OiBB
ZGRlZC4KKyAgICAgICAgKFRlc3ROZXN0ZWRGdXp6eURpY3QpOgorICAgICAgICAoVGVzdE5lc3Rl
ZEZ1enp5RGljdC50ZXN0X2NvbnN0cnVjdG9yKToKKyAgICAgICAgKFRlc3ROZXN0ZWRGdXp6eURp
Y3QudGVzdF9pbmRleCk6CisgICAgICAgIChUZXN0TmVzdGVkRnV6enlEaWN0LnRlc3RfZ2V0KToK
KyAgICAgICAgKFRlc3ROZXN0ZWRGdXp6eURpY3QudGVzdF9nZXRpdGVtKToKKyAgICAgICAgKFRl
c3ROZXN0ZWRGdXp6eURpY3QudGVzdF9zZXQpOgorICAgICAgICAoVGVzdE5lc3RlZEZ1enp5RGlj
dC50ZXN0X2RpY3QpOgorCiAyMDIxLTA2LTE3ICBXLkQuIFhpb25nICA8d194aW9uZ0BhcHBsZS5j
b20+CiAKICAgICAgICAgW3dhdGNoT1MgOF0gQWRkIHdhdGNoT1MgOCBzaW11bGF0b3IvZGV2aWNl
IHRvIGJvdCB3YXRjaGVycycgZGFzaGJvYXJkCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRjb3JlcHkvc2V0dXAucHkgYi9Ub29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRjb3JlcHkvc2V0dXAucHkKaW5kZXggMjA3MmRhYjFiYTFhZTg1NTk4MzRkYzJhMjUzN2Ix
OTc3MTY0M2E0Ny4uZGNkYzdjOTE3ZThkMmNiOTdjN2M0NDI0ZWU3ODM1NjA4MWJiMjZiOSAxMDA2
NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3NldHVwLnB5Cisr
KyBiL1Rvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS9zZXR1cC5weQpAQCAtMzAs
NyArMzAsNyBAQCBkZWYgcmVhZG1lKCk6CiAKIHNldHVwKAogICAgIG5hbWU9J3dlYmtpdGNvcmVw
eScsCi0gICAgdmVyc2lvbj0nMC41LjE4JywKKyAgICB2ZXJzaW9uPScwLjYuMCcsCiAgICAgZGVz
Y3JpcHRpb249J0xpYnJhcnkgY29udGFpbmluZyB2YXJpb3VzIFB5dGhvbiBzdXBwb3J0IGNsYXNz
ZXMgYW5kIGZ1bmN0aW9ucy4nLAogICAgIGxvbmdfZGVzY3JpcHRpb249cmVhZG1lKCksCiAgICAg
Y2xhc3NpZmllcnM9WwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weSBiL1Rvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHkKaW5kZXggZWRhMGE0OWRhMjE5
OTE3MTg4MDI3YmU4NGMwNzU2YTE3MDM3YTMxMy4uNTFjNjJlZWZlNmJiMDY5NmZjZjhhMTZlZTY2
NTNkMWNiOTE4OTAwNCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weQorKysgYi9Ub29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5CkBAIC0zNiw4ICszNiw5
IEBAIGZyb20gd2Via2l0Y29yZXB5LnN1YnByb2Nlc3NfdXRpbHMgaW1wb3J0IFRpbWVvdXRFeHBp
cmVkLCBDb21wbGV0ZWRQcm9jZXNzLCBydW4KIGZyb20gd2Via2l0Y29yZXB5Lm91dHB1dF9jYXB0
dXJlIGltcG9ydCBMb2dnZXJDYXB0dXJlLCBPdXRwdXRDYXB0dXJlLCBPdXRwdXREdXBsaWNhdGUK
IGZyb20gd2Via2l0Y29yZXB5LnRhc2tfcG9vbCBpbXBvcnQgVGFza1Bvb2wKIGZyb20gd2Via2l0
Y29yZXB5LmNyZWRlbnRpYWxzIGltcG9ydCBjcmVkZW50aWFscworZnJvbSB3ZWJraXRjb3JlcHku
bmVzdGVkX2Z1enp5X2RpY3QgaW1wb3J0IE5lc3RlZEZ1enp5RGljdAogCi12ZXJzaW9uID0gVmVy
c2lvbigwLCA1LCAxOCkKK3ZlcnNpb24gPSBWZXJzaW9uKDAsIDYsIDApCiAKIGZyb20gd2Via2l0
Y29yZXB5LmF1dG9pbnN0YWxsIGltcG9ydCBQYWNrYWdlLCBBdXRvSW5zdGFsbAogaWYgc3lzLnZl
cnNpb25faW5mbyA+ICgzLCAwKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvbmVzdGVkX2Z1enp5X2RpY3QucHkgYi9Ub29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L25lc3RlZF9mdXp6eV9k
aWN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjJmNmRkYWFhMTFjYWJkMDJhMzYxMzZmOTYzNzVkODU2ODcwZTJk
MTIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3Jl
cHkvd2Via2l0Y29yZXB5L25lc3RlZF9mdXp6eV9kaWN0LnB5CkBAIC0wLDAgKzEsMTAwIEBACisj
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gd2Via2l0Y29yZXB5LnN0
cmluZ191dGlscyBpbXBvcnQgdW5pY29kZQorCisKK2NsYXNzIE5lc3RlZEZ1enp5RGljdChvYmpl
Y3QpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBhc3NlcnRfdmFsaWRfa2V5KGNscywga2V5
KToKKyAgICAgICAgaWYgbm90IGFueSgoaXNpbnN0YW5jZShrZXksIHN0ciksIGlzaW5zdGFuY2Uo
a2V5LCB1bmljb2RlKSwgaXNpbnN0YW5jZShrZXksIGJ5dGVzKSkpOgorICAgICAgICAgICAgcmFp
c2UgVmFsdWVFcnJvcigiJ3t9JyBpcyBub3QgYSB2YWxpZCBrZXkgZm9yIGEgTmVzdGVkRGljdCIu
Zm9ybWF0KHR5cGUoa2V5KSkpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJpbWFyeV9zaXpl
PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5wcmltYXJ5X3NpemUgPSBpbnQocHJpbWFy
eV9zaXplIG9yIDQpCisgICAgICAgIHNlbGYuX2RhdGEgPSBkaWN0KCkKKyAgICAgICAgc2VsZi51
cGRhdGUoZGljdCgqKmt3YXJncykpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5bmFt
ZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0X3ZhbGlkX2tleShrZXluYW1lKQorICAgICAgICBrZXlf
YSwga2V5X2IgPSBrZXluYW1lWzpzZWxmLnByaW1hcnlfc2l6ZV0sIGtleW5hbWVbc2VsZi5wcmlt
YXJ5X3NpemU6XQorICAgICAgICB2YWx1ZSA9IE5vbmUKKyAgICAgICAgZm91bmQgPSBGYWxzZQor
ICAgICAgICBmb3Iga2V5LCByZXN1bHQgaW4gc2VsZi5fZGF0YS5nZXQoa2V5X2EsIGRpY3QoKSku
aXRlbXMoKToKKyAgICAgICAgICAgIGlmIGtleS5zdGFydHN3aXRoKGtleV9iKToKKyAgICAgICAg
ICAgICAgICBpZiBmb3VuZDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoIk11
bHRpcGxlIHZhbHVlcyBtYXRjaCAne30nIi5mb3JtYXQoa2V5bmFtZSkpCisgICAgICAgICAgICAg
ICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgdmFsdWUgPSByZXN1bHQKKyAgICAgICAg
aWYgZm91bmQ6CisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKyAgICAgICAgcmFpc2UgS2V5RXJy
b3Ioa2V5bmFtZSkKKworICAgIGRlZiBnZXQoc2VsZiwga2V5bmFtZSwgdmFsdWU9Tm9uZSk6Cisg
ICAgICAgIHJldHVybiBzZWxmLmdldGl0ZW0oa2V5bmFtZSwgdmFsdWUpWzFdCisKKyAgICBkZWYg
Z2V0aXRlbShzZWxmLCBrZXluYW1lLCB2YWx1ZT1Ob25lKToKKyAgICAgICAgc2VsZi5hc3NlcnRf
dmFsaWRfa2V5KGtleW5hbWUpCisgICAgICAgIGtleV9hLCBrZXlfYiA9IGtleW5hbWVbOnNlbGYu
cHJpbWFyeV9zaXplXSwga2V5bmFtZVtzZWxmLnByaW1hcnlfc2l6ZTpdCisgICAgICAgIGZvdW5k
ID0gTm9uZQorICAgICAgICBmb3Iga2V5LCByZXN1bHQgaW4gc2VsZi5fZGF0YS5nZXQoa2V5X2Es
IGRpY3QoKSkuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGtleS5zdGFydHN3aXRoKGtleV9iKToK
KyAgICAgICAgICAgICAgICBpZiBmb3VuZDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgS2V5
RXJyb3IoIk11bHRpcGxlIHZhbHVlcyBtYXRjaCAne30nIi5mb3JtYXQoa2V5bmFtZSkpCisgICAg
ICAgICAgICAgICAgZm91bmQgPSBrZXkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHJlc3VsdAor
ICAgICAgICByZXR1cm4gZm91bmQsIHZhbHVlCisKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwg
a2V5LCB2YWx1ZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0X3ZhbGlkX2tleShrZXkpCisgICAgICAg
IHNlbGYuX2RhdGEuc2V0ZGVmYXVsdChrZXlbOnNlbGYucHJpbWFyeV9zaXplXSwgZGljdCgpKVtr
ZXlbc2VsZi5wcmltYXJ5X3NpemU6XV0gPSB2YWx1ZQorCisgICAgZGVmIHVwZGF0ZShzZWxmLCBk
YXRhKToKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZGF0YS5pdGVtcygpOgorICAgICAgICAg
ICAgc2VsZltrZXldID0gdmFsdWUKKworICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICBmb3Ig
a2V5X2EsIHZhbHVlcyBpbiBzZWxmLl9kYXRhLml0ZW1zKCk6CisgICAgICAgICAgICBmb3Iga2V5
X2IgaW4gdmFsdWVzLmtleXMoKToKKyAgICAgICAgICAgICAgICB5aWVsZCBrZXlfYSArIGtleV9i
CisKKyAgICBkZWYgdmFsdWVzKHNlbGYpOgorICAgICAgICBmb3IgdmFsdWVzIGluIHNlbGYuX2Rh
dGEudmFsdWVzKCk6CisgICAgICAgICAgICBmb3IgdmFsdWUgaW4gdmFsdWVzLnZhbHVlcygpOgor
ICAgICAgICAgICAgICAgIHlpZWxkIHZhbHVlCisKKyAgICBkZWYgaXRlbXMoc2VsZik6CisgICAg
ICAgIGZvciBrZXlfYSwgdmFsdWVzIGluIHNlbGYuX2RhdGEuaXRlbXMoKToKKyAgICAgICAgICAg
IGZvciBrZXlfYiwgdmFsdWUgaW4gdmFsdWVzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgeWll
bGQga2V5X2EgKyBrZXlfYiwgdmFsdWUKKworICAgIGRlZiBkaWN0KHNlbGYpOgorICAgICAgICBy
ZXN1bHQgPSBkaWN0KCkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5pdGVtcygpOgor
ICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gcmVzdWx0CisK
KyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmRpY3QoKS5fX3Jl
cHJfXygpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZGlj
dCgpLl9fc3RyX18oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0cy9uZXN0ZWRfZnV6enlfZGljdF91bml0dGVzdC5weSBi
L1Rvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGVzdHMv
bmVzdGVkX2Z1enp5X2RpY3RfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDk1NzcxOTc5MGYwYmZj
MTZjOTM1ZWYwNjI3MTI1MDYzZDg5M2Q1ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Njcmlw
dHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGVzdHMvbmVzdGVkX2Z1enp5
X2RpY3RfdW5pdHRlc3QucHkKQEAgLTAsMCArMSw3OSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0Y29yZXB5IGlt
cG9ydCBOZXN0ZWRGdXp6eURpY3QKKworCitjbGFzcyBUZXN0TmVzdGVkRnV6enlEaWN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAg
ZCA9IE5lc3RlZEZ1enp5RGljdCh2YWx1ZWE9MSwgdmFsdWViPTIsIG90aGVyPTMpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGxpc3QoZC52YWx1ZXMoKSkpLCBzb3J0ZWQoKDEsIDIs
IDMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQobGlzdChkLmtleXMoKSkpLCBz
b3J0ZWQoKCd2YWx1ZWEnLCAndmFsdWViJywgJ290aGVyJykpKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKAorICAgICAgICAgICAgc29ydGVkKGxpc3QoZC5pdGVtcygpKSksCisgICAgICAgICAg
ICBzb3J0ZWQoKCgndmFsdWVhJywgMSksICgndmFsdWViJywgMiksICgnb3RoZXInLCAzKSkpLAor
ICAgICAgICApCisKKyAgICBkZWYgdGVzdF9pbmRleChzZWxmKToKKyAgICAgICAgZCA9IE5lc3Rl
ZEZ1enp5RGljdCh2YWx1ZWE9MSwgdmFsdWViPTIsIG90aGVyPTMpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoZFsndmFsdWVhJ10sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsndmFs
dWViJ10sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnb3RoZSddLCAzKQorCisgICAg
ICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChkWydub3RoaW5nJ10sIE5vbmUpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2Vy
dFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ3ZhbHVl
J10sIE5vbmUpCisKKyAgICBkZWYgdGVzdF9nZXQoc2VsZik6CisgICAgICAgIGQgPSBOZXN0ZWRG
dXp6eURpY3QodmFsdWVhPTEsIHZhbHVlYj0yLCBvdGhlcj0zKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGQuZ2V0KCd2YWx1ZWEnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdl
dCgndmFsdWViJyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ290aGUnKSwg
MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgnbm90aGluZycpLCBOb25lKQorCisg
ICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChkLmdldCgndmFsdWUnKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2dldGl0
ZW0oc2VsZik6CisgICAgICAgIGQgPSBOZXN0ZWRGdXp6eURpY3QodmFsdWVhPTEsIHZhbHVlYj0y
LCBvdGhlcj0zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCd2YWx1ZWEnKSwgKCd2
YWx1ZWEnLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgndmFsdWViJyksICgn
dmFsdWViJywgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ290aGUnKSwgKCdv
dGhlcicsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCdub3RoaW5nJyksIChO
b25lLCBOb25lKSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ3ZhbHVlJyksIE5vbmUpCisKKyAg
ICBkZWYgdGVzdF9zZXQoc2VsZik6CisgICAgICAgIGQgPSBOZXN0ZWRGdXp6eURpY3QoKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCdzb21lbG9uZ3ZhbHVlJyksIE5vbmUpCisgICAg
ICAgIGRbJ3NvbWVsb25ndmFsdWUnXSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdl
dCgnc29tZWxvbmd2YWx1ZScpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCdz
b21lJyksIDEpCisKKyAgICBkZWYgdGVzdF9kaWN0KHNlbGYpOgorICAgICAgICBkID0gTmVzdGVk
RnV6enlEaWN0KHZhbHVlYT0xLCB2YWx1ZWI9Miwgb3RoZXI9MykKKyAgICAgICAgc2VsZi5hc3Nl
cnREaWN0RXF1YWwoZC5kaWN0KCksIGRpY3QodmFsdWVhPTEsIHZhbHVlYj0yLCBvdGhlcj0zKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431737</attachid>
            <date>2021-06-17 16:27:25 -0700</date>
            <delta_ts>2021-06-23 08:33:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227150-20210617162723.patch</filename>
            <type>text/plain</type>
            <size>11825</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MDIzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDc3OGJhMzhiNTUwZjI2NGJjNDVhNDZhOWQ0NTZkNGNh
NmU1OGJmYy4uYzA5YTg5NTM1NmEyNzRlOWZhZDJlMjYxMzY5ZjE3YjY5NzJiZTc2YiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3
IEBACisyMDIxLTA2LTE3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbd2Via2l0Y29yZXB5XSBBZGQgTmVzdGVkRnV6enlEaWN0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcxNTAKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzc5NDc1NDY0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3NldHVwLnB5OiBC
dW1wIHZlcnNpb24uCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dl
YmtpdGNvcmVweS9fX2luaXRfXy5weTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9uZXN0ZWRfZnV6enlfZGljdC5weTogQWRkZWQu
CisgICAgICAgIChOZXN0ZWRGdXp6eURpY3QpOgorICAgICAgICAoTmVzdGVkRnV6enlEaWN0LmFz
c2VydF92YWxpZF9rZXkpOiBFbnN1cmUgdGhhdCB0aGUgcHJvdmlkZWQga2V5IGlzIGZ1enotYWJs
ZS4KKyAgICAgICAgKE5lc3RlZEZ1enp5RGljdC5fX2luaXRfXyk6IENvbnN0cnVjdCB0aGUgb2Jq
ZWN0IHRoZSBzYW1lIHdheSBhIGRpY3Rpb25hcnkgaXMgY29uc3RydWN0ZWQuCisgICAgICAgIChO
ZXN0ZWRGdXp6eURpY3QuX19nZXRpdGVtX18pOiBTcGxpdCBwcm92aWRlZCBrZXluYW1lIGFuZCBm
dXp6eSBtYXRjaCB0aGUgc2Vjb25kIHBhcnQuCisgICAgICAgIChOZXN0ZWRGdXp6eURpY3QuZ2V0
KTogRGl0dG8uCisgICAgICAgIChOZXN0ZWRGdXp6eURpY3QuZ2V0aXRlbSk6IFJldHVybiB0aGUg
Y29tcGxldGUga2V5bmFtZSBhbmQgdmFsdWUuCisgICAgICAgIChOZXN0ZWRGdXp6eURpY3QuX19z
ZXRpdGVtX18pOiBBZGQgdmFsdWUgdG8gZGljdGlvbmFyeS4KKyAgICAgICAgKE5lc3RlZEZ1enp5
RGljdC51cGRhdGUpOiBHaXZlbiBhIGRpY3Rpb25hcnksIGluc2VydCBpdCdzIGNvbnRlbnRzIGlu
dG8gdGhpcyBvYmplY3QuCisgICAgICAgIChOZXN0ZWRGdXp6eURpY3Qua2V5cyk6IEl0ZXJhdGUg
dGhyb3VnaCBhbGwga2V5cyBpbiB0aGUgb2JqZWN0LgorICAgICAgICAoTmVzdGVkRnV6enlEaWN0
LnZhbHVlcyk6IEl0ZXJhdGUgdGhyb3VnaCBhbGwgdmFsdWVzIGluIHRoZSBvYmplY3QuCisgICAg
ICAgIChOZXN0ZWRGdXp6eURpY3QuaXRlbXMpOiBJdGVyYXRlIHRocm91Z2ggYWxsIGtleS92YWx1
ZSBwYWlycyBpbiB0aGUgb2JqZWN0LgorICAgICAgICAoTmVzdGVkRnV6enlEaWN0LmRpY3QpOiBS
ZXR1cm4gYSBzdGFuZGFyZCBkaWN0aW9uYXJ5IHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoaXMgb2Jq
ZWN0LgorICAgICAgICAoTmVzdGVkRnV6enlEaWN0Ll9fcmVwcl9fKToKKyAgICAgICAgKE5lc3Rl
ZEZ1enp5RGljdC5fX3N0cl9fKToKKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRj
b3JlcHkvd2Via2l0Y29yZXB5L3Rlc3RzL25lc3RlZF9mdXp6eV9kaWN0X3VuaXR0ZXN0LnB5OiBB
ZGRlZC4KKyAgICAgICAgKFRlc3ROZXN0ZWRGdXp6eURpY3QpOgorICAgICAgICAoVGVzdE5lc3Rl
ZEZ1enp5RGljdC50ZXN0X2NvbnN0cnVjdG9yKToKKyAgICAgICAgKFRlc3ROZXN0ZWRGdXp6eURp
Y3QudGVzdF9pbmRleCk6CisgICAgICAgIChUZXN0TmVzdGVkRnV6enlEaWN0LnRlc3RfZ2V0KToK
KyAgICAgICAgKFRlc3ROZXN0ZWRGdXp6eURpY3QudGVzdF9nZXRpdGVtKToKKyAgICAgICAgKFRl
c3ROZXN0ZWRGdXp6eURpY3QudGVzdF9zZXQpOgorICAgICAgICAoVGVzdE5lc3RlZEZ1enp5RGlj
dC50ZXN0X2RpY3QpOgorCiAyMDIxLTA2LTE3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFw
cGxlLmNvbT4KIAogICAgICAgICBbcmVzdWx0c2RicHldIEFkb3B0IGF1dG9pbnN0YWxsZXIKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS9zZXR1cC5weSBi
L1Rvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS9zZXR1cC5weQppbmRleCAwOWE3
OTg3ODQzZGUwMDYxMjY3NzkxNWQwNDUwYzM1NzA3OGJlODEwLi5kY2RjN2M5MTdlOGQyY2I5N2M3
YzQ0MjRlZTc4MzU2MDgxYmIyNmI5IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRjb3JlcHkvc2V0dXAucHkKKysrIGIvVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0Y29yZXB5L3NldHVwLnB5CkBAIC0zMCw3ICszMCw3IEBAIGRlZiByZWFkbWUoKToKIAogc2V0
dXAoCiAgICAgbmFtZT0nd2Via2l0Y29yZXB5JywKLSAgICB2ZXJzaW9uPScwLjUuMTknLAorICAg
IHZlcnNpb249JzAuNi4wJywKICAgICBkZXNjcmlwdGlvbj0nTGlicmFyeSBjb250YWluaW5nIHZh
cmlvdXMgUHl0aG9uIHN1cHBvcnQgY2xhc3NlcyBhbmQgZnVuY3Rpb25zLicsCiAgICAgbG9uZ19k
ZXNjcmlwdGlvbj1yZWFkbWUoKSwKICAgICBjbGFzc2lmaWVycz1bCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5
IGIvVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2lu
aXRfXy5weQppbmRleCAwMDg2YzliZmMwNDkwMGRjZmYwZDFhYWQwYTExNWM0NzU4YmQ4ODhlLi41
MWM2MmVlZmU2YmIwNjk2ZmNmOGExNmVlNjY1M2QxY2I5MTg5MDA0IDEwMDY0NAotLS0gYS9Ub29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkv
X19pbml0X18ucHkKQEAgLTM2LDggKzM2LDkgQEAgZnJvbSB3ZWJraXRjb3JlcHkuc3VicHJvY2Vz
c191dGlscyBpbXBvcnQgVGltZW91dEV4cGlyZWQsIENvbXBsZXRlZFByb2Nlc3MsIHJ1bgogZnJv
bSB3ZWJraXRjb3JlcHkub3V0cHV0X2NhcHR1cmUgaW1wb3J0IExvZ2dlckNhcHR1cmUsIE91dHB1
dENhcHR1cmUsIE91dHB1dER1cGxpY2F0ZQogZnJvbSB3ZWJraXRjb3JlcHkudGFza19wb29sIGlt
cG9ydCBUYXNrUG9vbAogZnJvbSB3ZWJraXRjb3JlcHkuY3JlZGVudGlhbHMgaW1wb3J0IGNyZWRl
bnRpYWxzCitmcm9tIHdlYmtpdGNvcmVweS5uZXN0ZWRfZnV6enlfZGljdCBpbXBvcnQgTmVzdGVk
RnV6enlEaWN0CiAKLXZlcnNpb24gPSBWZXJzaW9uKDAsIDUsIDE5KQordmVyc2lvbiA9IFZlcnNp
b24oMCwgNiwgMCkKIAogZnJvbSB3ZWJraXRjb3JlcHkuYXV0b2luc3RhbGwgaW1wb3J0IFBhY2th
Z2UsIEF1dG9JbnN0YWxsCiBpZiBzeXMudmVyc2lvbl9pbmZvID4gKDMsIDApOgpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9uZXN0
ZWRfZnV6enlfZGljdC5weSBiL1Rvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93
ZWJraXRjb3JlcHkvbmVzdGVkX2Z1enp5X2RpY3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmY2ZGRhYWExMWNh
YmQwMmEzNjEzNmY5NjM3NWQ4NTY4NzBlMmQxMgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvbmVzdGVkX2Z1enp5X2Rp
Y3QucHkKQEAgLTAsMCArMSwxMDAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
IyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworZnJvbSB3ZWJraXRjb3JlcHkuc3RyaW5nX3V0aWxzIGltcG9ydCB1bmljb2RlCisKKwor
Y2xhc3MgTmVzdGVkRnV6enlEaWN0KG9iamVjdCk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVm
IGFzc2VydF92YWxpZF9rZXkoY2xzLCBrZXkpOgorICAgICAgICBpZiBub3QgYW55KChpc2luc3Rh
bmNlKGtleSwgc3RyKSwgaXNpbnN0YW5jZShrZXksIHVuaWNvZGUpLCBpc2luc3RhbmNlKGtleSwg
Ynl0ZXMpKSk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIne30nIGlzIG5vdCBhIHZh
bGlkIGtleSBmb3IgYSBOZXN0ZWREaWN0Ii5mb3JtYXQodHlwZShrZXkpKSkKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwcmltYXJ5X3NpemU9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICBzZWxm
LnByaW1hcnlfc2l6ZSA9IGludChwcmltYXJ5X3NpemUgb3IgNCkKKyAgICAgICAgc2VsZi5fZGF0
YSA9IGRpY3QoKQorICAgICAgICBzZWxmLnVwZGF0ZShkaWN0KCoqa3dhcmdzKSkKKworICAgIGRl
ZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXluYW1lKToKKyAgICAgICAgc2VsZi5hc3NlcnRfdmFsaWRf
a2V5KGtleW5hbWUpCisgICAgICAgIGtleV9hLCBrZXlfYiA9IGtleW5hbWVbOnNlbGYucHJpbWFy
eV9zaXplXSwga2V5bmFtZVtzZWxmLnByaW1hcnlfc2l6ZTpdCisgICAgICAgIHZhbHVlID0gTm9u
ZQorICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgIGZvciBrZXksIHJlc3VsdCBpbiBzZWxm
Ll9kYXRhLmdldChrZXlfYSwgZGljdCgpKS5pdGVtcygpOgorICAgICAgICAgICAgaWYga2V5LnN0
YXJ0c3dpdGgoa2V5X2IpOgorICAgICAgICAgICAgICAgIGlmIGZvdW5kOgorICAgICAgICAgICAg
ICAgICAgICByYWlzZSBLZXlFcnJvcigiTXVsdGlwbGUgdmFsdWVzIG1hdGNoICd7fSciLmZvcm1h
dChrZXluYW1lKSkKKyAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAg
ICB2YWx1ZSA9IHJlc3VsdAorICAgICAgICBpZiBmb3VuZDoKKyAgICAgICAgICAgIHJldHVybiB2
YWx1ZQorICAgICAgICByYWlzZSBLZXlFcnJvcihrZXluYW1lKQorCisgICAgZGVmIGdldChzZWxm
LCBrZXluYW1lLCB2YWx1ZT1Ob25lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0aXRlbShrZXlu
YW1lLCB2YWx1ZSlbMV0KKworICAgIGRlZiBnZXRpdGVtKHNlbGYsIGtleW5hbWUsIHZhbHVlPU5v
bmUpOgorICAgICAgICBzZWxmLmFzc2VydF92YWxpZF9rZXkoa2V5bmFtZSkKKyAgICAgICAga2V5
X2EsIGtleV9iID0ga2V5bmFtZVs6c2VsZi5wcmltYXJ5X3NpemVdLCBrZXluYW1lW3NlbGYucHJp
bWFyeV9zaXplOl0KKyAgICAgICAgZm91bmQgPSBOb25lCisgICAgICAgIGZvciBrZXksIHJlc3Vs
dCBpbiBzZWxmLl9kYXRhLmdldChrZXlfYSwgZGljdCgpKS5pdGVtcygpOgorICAgICAgICAgICAg
aWYga2V5LnN0YXJ0c3dpdGgoa2V5X2IpOgorICAgICAgICAgICAgICAgIGlmIGZvdW5kOgorICAg
ICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigiTXVsdGlwbGUgdmFsdWVzIG1hdGNoICd7
fSciLmZvcm1hdChrZXluYW1lKSkKKyAgICAgICAgICAgICAgICBmb3VuZCA9IGtleQorICAgICAg
ICAgICAgICAgIHZhbHVlID0gcmVzdWx0CisgICAgICAgIHJldHVybiBmb3VuZCwgdmFsdWUKKwor
ICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgc2VsZi5hc3Nl
cnRfdmFsaWRfa2V5KGtleSkKKyAgICAgICAgc2VsZi5fZGF0YS5zZXRkZWZhdWx0KGtleVs6c2Vs
Zi5wcmltYXJ5X3NpemVdLCBkaWN0KCkpW2tleVtzZWxmLnByaW1hcnlfc2l6ZTpdXSA9IHZhbHVl
CisKKyAgICBkZWYgdXBkYXRlKHNlbGYsIGRhdGEpOgorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBp
biBkYXRhLml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmW2tleV0gPSB2YWx1ZQorCisgICAgZGVm
IGtleXMoc2VsZik6CisgICAgICAgIGZvciBrZXlfYSwgdmFsdWVzIGluIHNlbGYuX2RhdGEuaXRl
bXMoKToKKyAgICAgICAgICAgIGZvciBrZXlfYiBpbiB2YWx1ZXMua2V5cygpOgorICAgICAgICAg
ICAgICAgIHlpZWxkIGtleV9hICsga2V5X2IKKworICAgIGRlZiB2YWx1ZXMoc2VsZik6CisgICAg
ICAgIGZvciB2YWx1ZXMgaW4gc2VsZi5fZGF0YS52YWx1ZXMoKToKKyAgICAgICAgICAgIGZvciB2
YWx1ZSBpbiB2YWx1ZXMudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgeWllbGQgdmFsdWUKKwor
ICAgIGRlZiBpdGVtcyhzZWxmKToKKyAgICAgICAgZm9yIGtleV9hLCB2YWx1ZXMgaW4gc2VsZi5f
ZGF0YS5pdGVtcygpOgorICAgICAgICAgICAgZm9yIGtleV9iLCB2YWx1ZSBpbiB2YWx1ZXMuaXRl
bXMoKToKKyAgICAgICAgICAgICAgICB5aWVsZCBrZXlfYSArIGtleV9iLCB2YWx1ZQorCisgICAg
ZGVmIGRpY3Qoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IGRpY3QoKQorICAgICAgICBmb3Iga2V5
LCB2YWx1ZSBpbiBzZWxmLml0ZW1zKCk6CisgICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVl
CisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuZGljdCgpLl9fcmVwcl9fKCkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi5kaWN0KCkuX19zdHJfXygpCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rlc3RzL25lc3Rl
ZF9mdXp6eV9kaWN0X3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0cy9uZXN0ZWRfZnV6enlfZGljdF91bml0dGVzdC5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40OTU3NzE5NzkwZjBiZmMxNmM5MzVlZjA2MjcxMjUwNjNkODkzZDVmCi0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtp
dGNvcmVweS90ZXN0cy9uZXN0ZWRfZnV6enlfZGljdF91bml0dGVzdC5weQpAQCAtMCwwICsxLDc5
IEBACisjIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdW5pdHRl
c3QKKworZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IE5lc3RlZEZ1enp5RGljdAorCisKK2NsYXNz
IFRlc3ROZXN0ZWRGdXp6eURpY3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2Nv
bnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBkID0gTmVzdGVkRnV6enlEaWN0KHZhbHVlYT0xLCB2
YWx1ZWI9Miwgb3RoZXI9MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQobGlzdChk
LnZhbHVlcygpKSksIHNvcnRlZCgoMSwgMiwgMykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNvcnRlZChsaXN0KGQua2V5cygpKSksIHNvcnRlZCgoJ3ZhbHVlYScsICd2YWx1ZWInLCAnb3Ro
ZXInKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3J0ZWQobGlz
dChkLml0ZW1zKCkpKSwKKyAgICAgICAgICAgIHNvcnRlZCgoKCd2YWx1ZWEnLCAxKSwgKCd2YWx1
ZWInLCAyKSwgKCdvdGhlcicsIDMpKSksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2luZGV4
KHNlbGYpOgorICAgICAgICBkID0gTmVzdGVkRnV6enlEaWN0KHZhbHVlYT0xLCB2YWx1ZWI9Miwg
b3RoZXI9MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWyd2YWx1ZWEnXSwgMSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChkWyd2YWx1ZWInXSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChkWydvdGhlJ10sIDMpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlF
cnJvcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ25vdGhpbmcnXSwgTm9uZSkK
KworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoZFsndmFsdWUnXSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2dldChz
ZWxmKToKKyAgICAgICAgZCA9IE5lc3RlZEZ1enp5RGljdCh2YWx1ZWE9MSwgdmFsdWViPTIsIG90
aGVyPTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ3ZhbHVlYScpLCAxKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCd2YWx1ZWInKSwgMikKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChkLmdldCgnb3RoZScpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQu
Z2V0KCdub3RoaW5nJyksIE5vbmUpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhL
ZXlFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCd2YWx1ZScpLCBO
b25lKQorCisgICAgZGVmIHRlc3RfZ2V0aXRlbShzZWxmKToKKyAgICAgICAgZCA9IE5lc3RlZEZ1
enp5RGljdCh2YWx1ZWE9MSwgdmFsdWViPTIsIG90aGVyPTMpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoZC5nZXQoJ3ZhbHVlYScpLCAoJ3ZhbHVlYScsIDEpKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGQuZ2V0KCd2YWx1ZWInKSwgKCd2YWx1ZWInLCAyKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChkLmdldCgnb3RoZScpLCAoJ290aGVyJywgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoZC5nZXQoJ25vdGhpbmcnKSwgKE5vbmUsIE5vbmUpKQorCisgICAgICAgIHdpdGggc2Vs
Zi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChk
LmdldCgndmFsdWUnKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3NldChzZWxmKToKKyAgICAgICAg
ZCA9IE5lc3RlZEZ1enp5RGljdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ3Nv
bWVsb25ndmFsdWUnKSwgTm9uZSkKKyAgICAgICAgZFsnc29tZWxvbmd2YWx1ZSddID0gMQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCdzb21lbG9uZ3ZhbHVlJyksIDEpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ3NvbWUnKSwgMSkKKworICAgIGRlZiB0ZXN0X2RpY3Qo
c2VsZik6CisgICAgICAgIGQgPSBOZXN0ZWRGdXp6eURpY3QodmFsdWVhPTEsIHZhbHVlYj0yLCBv
dGhlcj0zKQorICAgICAgICBzZWxmLmFzc2VydERpY3RFcXVhbChkLmRpY3QoKSwgZGljdCh2YWx1
ZWE9MSwgdmFsdWViPTIsIG90aGVyPTMpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432048</attachid>
            <date>2021-06-23 08:33:03 -0700</date>
            <delta_ts>2021-06-28 14:47:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227150-20210623083302.patch</filename>
            <type>text/plain</type>
            <size>11597</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3OTE1MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM3IEBACisyMDIxLTA2LTIyICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0Y29yZXB5XSBBZGQgTmVzdGVkRnV6enlEaWN0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcxNTAKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzc5NDc1NDY0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3NldHVw
LnB5OiBCdW1wIHZlcnNpb24uCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29y
ZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9uZXN0ZWRfZnV6enlfZGljdC5weTog
QWRkZWQuCisgICAgICAgIChOZXN0ZWRGdXp6eURpY3QpOgorICAgICAgICAoTmVzdGVkRnV6enlE
aWN0LmFzc2VydF92YWxpZF9rZXkpOiBFbnN1cmUgdGhhdCB0aGUgcHJvdmlkZWQga2V5IGlzIGZ1
enotYWJsZS4KKyAgICAgICAgKE5lc3RlZEZ1enp5RGljdC5fX2luaXRfXyk6IENvbnN0cnVjdCB0
aGUgb2JqZWN0IHRoZSBzYW1lIHdheSBhIGRpY3Rpb25hcnkgaXMgY29uc3RydWN0ZWQuCisgICAg
ICAgIChOZXN0ZWRGdXp6eURpY3QuX19nZXRpdGVtX18pOiBTcGxpdCBwcm92aWRlZCBrZXluYW1l
IGFuZCBmdXp6eSBtYXRjaCB0aGUgc2Vjb25kIHBhcnQuCisgICAgICAgIChOZXN0ZWRGdXp6eURp
Y3QuZ2V0KTogRGl0dG8uCisgICAgICAgIChOZXN0ZWRGdXp6eURpY3QuZ2V0aXRlbSk6IFJldHVy
biB0aGUgY29tcGxldGUga2V5bmFtZSBhbmQgdmFsdWUuCisgICAgICAgIChOZXN0ZWRGdXp6eURp
Y3QuX19zZXRpdGVtX18pOiBBZGQgdmFsdWUgdG8gZGljdGlvbmFyeS4KKyAgICAgICAgKE5lc3Rl
ZEZ1enp5RGljdC51cGRhdGUpOiBHaXZlbiBhIGRpY3Rpb25hcnksIGluc2VydCBpdCdzIGNvbnRl
bnRzIGludG8gdGhpcyBvYmplY3QuCisgICAgICAgIChOZXN0ZWRGdXp6eURpY3Qua2V5cyk6IEl0
ZXJhdGUgdGhyb3VnaCBhbGwga2V5cyBpbiB0aGUgb2JqZWN0LgorICAgICAgICAoTmVzdGVkRnV6
enlEaWN0LnZhbHVlcyk6IEl0ZXJhdGUgdGhyb3VnaCBhbGwgdmFsdWVzIGluIHRoZSBvYmplY3Qu
CisgICAgICAgIChOZXN0ZWRGdXp6eURpY3QuaXRlbXMpOiBJdGVyYXRlIHRocm91Z2ggYWxsIGtl
eS92YWx1ZSBwYWlycyBpbiB0aGUgb2JqZWN0LgorICAgICAgICAoTmVzdGVkRnV6enlEaWN0LmRp
Y3QpOiBSZXR1cm4gYSBzdGFuZGFyZCBkaWN0aW9uYXJ5IHdpdGggdGhlIGNvbnRlbnRzIG9mIHRo
aXMgb2JqZWN0LgorICAgICAgICAoTmVzdGVkRnV6enlEaWN0Ll9fcmVwcl9fKToKKyAgICAgICAg
KE5lc3RlZEZ1enp5RGljdC5fX3N0cl9fKToKKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rlc3RzL25lc3RlZF9mdXp6eV9kaWN0X3VuaXR0ZXN0
LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3ROZXN0ZWRGdXp6eURpY3QpOgorICAgICAgICAoVGVz
dE5lc3RlZEZ1enp5RGljdC50ZXN0X2NvbnN0cnVjdG9yKToKKyAgICAgICAgKFRlc3ROZXN0ZWRG
dXp6eURpY3QudGVzdF9pbmRleCk6CisgICAgICAgIChUZXN0TmVzdGVkRnV6enlEaWN0LnRlc3Rf
Z2V0KToKKyAgICAgICAgKFRlc3ROZXN0ZWRGdXp6eURpY3QudGVzdF9nZXRpdGVtKToKKyAgICAg
ICAgKFRlc3ROZXN0ZWRGdXp6eURpY3QudGVzdF9zZXQpOgorICAgICAgICAoVGVzdE5lc3RlZEZ1
enp5RGljdC50ZXN0X2RpY3QpOgorCiAyMDIxLTA2LTIyICBKb25hdGhhbiBCZWRhcmQgIDxqYmVk
YXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbcmVzdWx0cy53ZWJraXQub3JnXSBYU1MgdnVsbmVy
YWJpbGl0eSBpbiBjb25maWd1cmF0aW9uCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRjb3JlcHkvc2V0dXAucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0Y29yZXB5L3NldHVwLnB5CShyZXZpc2lvbiAyNzkxNTApCisrKyBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvc2V0dXAucHkJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDcgKzMwLDcgQEAgZGVmIHJlYWRtZSgpOgogCiBzZXR1cCgKICAgICBuYW1lPSd3ZWJraXRjb3Jl
cHknLAotICAgIHZlcnNpb249JzAuNS4xOScsCisgICAgdmVyc2lvbj0nMC42LjAnLAogICAgIGRl
c2NyaXB0aW9uPSdMaWJyYXJ5IGNvbnRhaW5pbmcgdmFyaW91cyBQeXRob24gc3VwcG9ydCBjbGFz
c2VzIGFuZCBmdW5jdGlvbnMuJywKICAgICBsb25nX2Rlc2NyaXB0aW9uPXJlYWRtZSgpLAogICAg
IGNsYXNzaWZpZXJzPVsKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVw
eS93ZWJraXRjb3JlcHkvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weQkocmV2aXNpb24g
Mjc5MTUwKQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNv
cmVweS9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsOSBAQCBmcm9tIHdl
YmtpdGNvcmVweS5zdWJwcm9jZXNzX3V0aWxzIGltcG9yCiBmcm9tIHdlYmtpdGNvcmVweS5vdXRw
dXRfY2FwdHVyZSBpbXBvcnQgTG9nZ2VyQ2FwdHVyZSwgT3V0cHV0Q2FwdHVyZSwgT3V0cHV0RHVw
bGljYXRlCiBmcm9tIHdlYmtpdGNvcmVweS50YXNrX3Bvb2wgaW1wb3J0IFRhc2tQb29sCiBmcm9t
IHdlYmtpdGNvcmVweS5jcmVkZW50aWFscyBpbXBvcnQgY3JlZGVudGlhbHMKK2Zyb20gd2Via2l0
Y29yZXB5Lm5lc3RlZF9mdXp6eV9kaWN0IGltcG9ydCBOZXN0ZWRGdXp6eURpY3QKIAotdmVyc2lv
biA9IFZlcnNpb24oMCwgNSwgMTkpCit2ZXJzaW9uID0gVmVyc2lvbigwLCA2LCAwKQogCiBmcm9t
IHdlYmtpdGNvcmVweS5hdXRvaW5zdGFsbCBpbXBvcnQgUGFja2FnZSwgQXV0b0luc3RhbGwKIGlm
IHN5cy52ZXJzaW9uX2luZm8gPiAoMywgMCk6CkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L25lc3RlZF9mdXp6eV9kaWN0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkv
bmVzdGVkX2Z1enp5X2RpY3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9uZXN0ZWRfZnV6enlfZGljdC5weQkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisj
IGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
IyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCitmcm9tIHdlYmtpdGNvcmVweS5zdHJpbmdfdXRpbHMgaW1wb3J0IHVuaWNvZGUK
KworCitjbGFzcyBOZXN0ZWRGdXp6eURpY3Qob2JqZWN0KToKKyAgICBAY2xhc3NtZXRob2QKKyAg
ICBkZWYgYXNzZXJ0X3ZhbGlkX2tleShjbHMsIGtleSk6CisgICAgICAgIGlmIG5vdCBhbnkoKGlz
aW5zdGFuY2Uoa2V5LCBzdHIpLCBpc2luc3RhbmNlKGtleSwgdW5pY29kZSksIGlzaW5zdGFuY2Uo
a2V5LCBieXRlcykpKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIid7fScgaXMgbm90
IGEgdmFsaWQga2V5IGZvciBhIE5lc3RlZERpY3QiLmZvcm1hdCh0eXBlKGtleSkpKQorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHByaW1hcnlfc2l6ZT1Ob25lLCAqKmt3YXJncyk6CisgICAgICAg
IHNlbGYucHJpbWFyeV9zaXplID0gaW50KHByaW1hcnlfc2l6ZSBvciA0KQorICAgICAgICBzZWxm
Ll9kYXRhID0gZGljdCgpCisgICAgICAgIHNlbGYudXBkYXRlKGRpY3QoKiprd2FyZ3MpKQorCisg
ICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleW5hbWUpOgorICAgICAgICBzZWxmLmFzc2VydF92
YWxpZF9rZXkoa2V5bmFtZSkKKyAgICAgICAga2V5X2EsIGtleV9iID0ga2V5bmFtZVs6c2VsZi5w
cmltYXJ5X3NpemVdLCBrZXluYW1lW3NlbGYucHJpbWFyeV9zaXplOl0KKyAgICAgICAgdmFsdWUg
PSBOb25lCisgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgZm9yIGtleSwgcmVzdWx0IGlu
IHNlbGYuX2RhdGEuZ2V0KGtleV9hLCBkaWN0KCkpLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBr
ZXkuc3RhcnRzd2l0aChrZXlfYik6CisgICAgICAgICAgICAgICAgaWYgZm91bmQ6CisgICAgICAg
ICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJNdWx0aXBsZSB2YWx1ZXMgbWF0Y2ggJ3t9JyIu
Zm9ybWF0KGtleW5hbWUpKQorICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAg
ICAgICAgIHZhbHVlID0gcmVzdWx0CisgICAgICAgIGlmIGZvdW5kOgorICAgICAgICAgICAgcmV0
dXJuIHZhbHVlCisgICAgICAgIHJhaXNlIEtleUVycm9yKGtleW5hbWUpCisKKyAgICBkZWYgZ2V0
KHNlbGYsIGtleW5hbWUsIHZhbHVlPU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5nZXRpdGVt
KGtleW5hbWUsIHZhbHVlKVsxXQorCisgICAgZGVmIGdldGl0ZW0oc2VsZiwga2V5bmFtZSwgdmFs
dWU9Tm9uZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0X3ZhbGlkX2tleShrZXluYW1lKQorICAgICAg
ICBrZXlfYSwga2V5X2IgPSBrZXluYW1lWzpzZWxmLnByaW1hcnlfc2l6ZV0sIGtleW5hbWVbc2Vs
Zi5wcmltYXJ5X3NpemU6XQorICAgICAgICBmb3VuZCA9IE5vbmUKKyAgICAgICAgZm9yIGtleSwg
cmVzdWx0IGluIHNlbGYuX2RhdGEuZ2V0KGtleV9hLCBkaWN0KCkpLml0ZW1zKCk6CisgICAgICAg
ICAgICBpZiBrZXkuc3RhcnRzd2l0aChrZXlfYik6CisgICAgICAgICAgICAgICAgaWYgZm91bmQ6
CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJNdWx0aXBsZSB2YWx1ZXMgbWF0
Y2ggJ3t9JyIuZm9ybWF0KGtleW5hbWUpKQorICAgICAgICAgICAgICAgIGZvdW5kID0ga2V5X2Eg
KyBrZXkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHJlc3VsdAorICAgICAgICByZXR1cm4gZm91
bmQsIHZhbHVlCisKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAg
ICAgIHNlbGYuYXNzZXJ0X3ZhbGlkX2tleShrZXkpCisgICAgICAgIHNlbGYuX2RhdGEuc2V0ZGVm
YXVsdChrZXlbOnNlbGYucHJpbWFyeV9zaXplXSwgZGljdCgpKVtrZXlbc2VsZi5wcmltYXJ5X3Np
emU6XV0gPSB2YWx1ZQorCisgICAgZGVmIHVwZGF0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgZm9y
IGtleSwgdmFsdWUgaW4gZGF0YS5pdGVtcygpOgorICAgICAgICAgICAgc2VsZltrZXldID0gdmFs
dWUKKworICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICBmb3Iga2V5X2EsIHZhbHVlcyBpbiBz
ZWxmLl9kYXRhLml0ZW1zKCk6CisgICAgICAgICAgICBmb3Iga2V5X2IgaW4gdmFsdWVzLmtleXMo
KToKKyAgICAgICAgICAgICAgICB5aWVsZCBrZXlfYSArIGtleV9iCisKKyAgICBkZWYgdmFsdWVz
KHNlbGYpOgorICAgICAgICBmb3IgdmFsdWVzIGluIHNlbGYuX2RhdGEudmFsdWVzKCk6CisgICAg
ICAgICAgICBmb3IgdmFsdWUgaW4gdmFsdWVzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIHlp
ZWxkIHZhbHVlCisKKyAgICBkZWYgaXRlbXMoc2VsZik6CisgICAgICAgIGZvciBrZXlfYSwgdmFs
dWVzIGluIHNlbGYuX2RhdGEuaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBrZXlfYiwgdmFsdWUg
aW4gdmFsdWVzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgeWllbGQga2V5X2EgKyBrZXlfYiwg
dmFsdWUKKworICAgIGRlZiBkaWN0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBkaWN0KCkKKyAg
ICAgICAgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5pdGVtcygpOgorICAgICAgICAgICAgcmVzdWx0
W2tleV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX19yZXByX18o
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmRpY3QoKS5fX3JlcHJfXygpCisKKyAgICBkZWYg
X19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZGljdCgpLl9fc3RyX18oKQpJbmRl
eDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0
cy9uZXN0ZWRfZnV6enlfZGljdF91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rlc3RzL25lc3RlZF9mdXp6
eV9kaWN0X3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGVzdHMvbmVzdGVkX2Z1enp5X2RpY3RfdW5p
dHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OSBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0Y29y
ZXB5IGltcG9ydCBOZXN0ZWRGdXp6eURpY3QKKworCitjbGFzcyBUZXN0TmVzdGVkRnV6enlEaWN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAg
ICAgICAgZCA9IE5lc3RlZEZ1enp5RGljdCh2YWx1ZWE9MSwgdmFsdWViPTIsIG90aGVyPTMpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGxpc3QoZC52YWx1ZXMoKSkpLCBzb3J0ZWQo
KDEsIDIsIDMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQobGlzdChkLmtleXMo
KSkpLCBzb3J0ZWQoKCd2YWx1ZWEnLCAndmFsdWViJywgJ290aGVyJykpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc29ydGVkKGxpc3QoZC5pdGVtcygpKSksCisgICAg
ICAgICAgICBzb3J0ZWQoKCgndmFsdWVhJywgMSksICgndmFsdWViJywgMiksICgnb3RoZXInLCAz
KSkpLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9pbmRleChzZWxmKToKKyAgICAgICAgZCA9
IE5lc3RlZEZ1enp5RGljdCh2YWx1ZWE9MSwgdmFsdWViPTIsIG90aGVyPTMpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoZFsndmFsdWVhJ10sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
ZFsndmFsdWViJ10sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnb3RoZSddLCAzKQor
CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChkWydub3RoaW5nJ10sIE5vbmUpCisKKyAgICAgICAgd2l0aCBzZWxm
LmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRb
J3ZhbHVlJ10sIE5vbmUpCisKKyAgICBkZWYgdGVzdF9nZXQoc2VsZik6CisgICAgICAgIGQgPSBO
ZXN0ZWRGdXp6eURpY3QodmFsdWVhPTEsIHZhbHVlYj0yLCBvdGhlcj0zKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGQuZ2V0KCd2YWx1ZWEnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChkLmdldCgndmFsdWViJyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ290
aGUnKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgnbm90aGluZycpLCBOb25l
KQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgndmFsdWUnKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0
X2dldGl0ZW0oc2VsZik6CisgICAgICAgIGQgPSBOZXN0ZWRGdXp6eURpY3QodmFsdWVhPTEsIHZh
bHVlYj0yLCBvdGhlcj0zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0aXRlbSgndmFs
dWVhJyksICgndmFsdWVhJywgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXRpdGVt
KCd2YWx1ZWInKSwgKCd2YWx1ZWInLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdl
dGl0ZW0oJ290aGUnKSwgKCdvdGhlcicsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQu
Z2V0aXRlbSgnbm90aGluZycpLCAoTm9uZSwgTm9uZSkpCisKKyAgICAgICAgd2l0aCBzZWxmLmFz
c2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0
aXRlbSgndmFsdWUnKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3NldChzZWxmKToKKyAgICAgICAg
ZCA9IE5lc3RlZEZ1enp5RGljdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ3Nv
bWVsb25ndmFsdWUnKSwgTm9uZSkKKyAgICAgICAgZFsnc29tZWxvbmd2YWx1ZSddID0gMQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCdzb21lbG9uZ3ZhbHVlJyksIDEpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ3NvbWUnKSwgMSkKKworICAgIGRlZiB0ZXN0X2RpY3Qo
c2VsZik6CisgICAgICAgIGQgPSBOZXN0ZWRGdXp6eURpY3QodmFsdWVhPTEsIHZhbHVlYj0yLCBv
dGhlcj0zKQorICAgICAgICBzZWxmLmFzc2VydERpY3RFcXVhbChkLmRpY3QoKSwgZGljdCh2YWx1
ZWE9MSwgdmFsdWViPTIsIG90aGVyPTMpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432425</attachid>
            <date>2021-06-28 14:47:32 -0700</date>
            <delta_ts>2021-06-29 11:46:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227150-20210628144731.patch</filename>
            <type>text/plain</type>
            <size>11589</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3OTM0OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM3IEBACisyMDIxLTA2LTI4ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0Y29yZXB5XSBBZGQgTmVzdGVkRnV6enlEaWN0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcxNTAKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzc5NDc1NDY0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3NldHVw
LnB5OiBCdW1wIHZlcnNpb24uCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29y
ZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9uZXN0ZWRfZnV6enlfZGljdC5weTog
QWRkZWQuCisgICAgICAgIChOZXN0ZWRGdXp6eURpY3QpOgorICAgICAgICAoTmVzdGVkRnV6enlE
aWN0LmFzc2VydF92YWxpZF9rZXkpOiBFbnN1cmUgdGhhdCB0aGUgcHJvdmlkZWQga2V5IGlzIGZ1
enotYWJsZS4KKyAgICAgICAgKE5lc3RlZEZ1enp5RGljdC5fX2luaXRfXyk6IENvbnN0cnVjdCB0
aGUgb2JqZWN0IHRoZSBzYW1lIHdheSBhIGRpY3Rpb25hcnkgaXMgY29uc3RydWN0ZWQuCisgICAg
ICAgIChOZXN0ZWRGdXp6eURpY3QuX19nZXRpdGVtX18pOiBTcGxpdCBwcm92aWRlZCBrZXluYW1l
IGFuZCBmdXp6eSBtYXRjaCB0aGUgc2Vjb25kIHBhcnQuCisgICAgICAgIChOZXN0ZWRGdXp6eURp
Y3QuZ2V0KTogRGl0dG8uCisgICAgICAgIChOZXN0ZWRGdXp6eURpY3QuZ2V0aXRlbSk6IFJldHVy
biB0aGUgY29tcGxldGUga2V5bmFtZSBhbmQgdmFsdWUuCisgICAgICAgIChOZXN0ZWRGdXp6eURp
Y3QuX19zZXRpdGVtX18pOiBBZGQgdmFsdWUgdG8gZGljdGlvbmFyeS4KKyAgICAgICAgKE5lc3Rl
ZEZ1enp5RGljdC51cGRhdGUpOiBHaXZlbiBhIGRpY3Rpb25hcnksIGluc2VydCBpdCdzIGNvbnRl
bnRzIGludG8gdGhpcyBvYmplY3QuCisgICAgICAgIChOZXN0ZWRGdXp6eURpY3Qua2V5cyk6IEl0
ZXJhdGUgdGhyb3VnaCBhbGwga2V5cyBpbiB0aGUgb2JqZWN0LgorICAgICAgICAoTmVzdGVkRnV6
enlEaWN0LnZhbHVlcyk6IEl0ZXJhdGUgdGhyb3VnaCBhbGwgdmFsdWVzIGluIHRoZSBvYmplY3Qu
CisgICAgICAgIChOZXN0ZWRGdXp6eURpY3QuaXRlbXMpOiBJdGVyYXRlIHRocm91Z2ggYWxsIGtl
eS92YWx1ZSBwYWlycyBpbiB0aGUgb2JqZWN0LgorICAgICAgICAoTmVzdGVkRnV6enlEaWN0LmRp
Y3QpOiBSZXR1cm4gYSBzdGFuZGFyZCBkaWN0aW9uYXJ5IHdpdGggdGhlIGNvbnRlbnRzIG9mIHRo
aXMgb2JqZWN0LgorICAgICAgICAoTmVzdGVkRnV6enlEaWN0Ll9fcmVwcl9fKToKKyAgICAgICAg
KE5lc3RlZEZ1enp5RGljdC5fX3N0cl9fKToKKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rlc3RzL25lc3RlZF9mdXp6eV9kaWN0X3VuaXR0ZXN0
LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3ROZXN0ZWRGdXp6eURpY3QpOgorICAgICAgICAoVGVz
dE5lc3RlZEZ1enp5RGljdC50ZXN0X2NvbnN0cnVjdG9yKToKKyAgICAgICAgKFRlc3ROZXN0ZWRG
dXp6eURpY3QudGVzdF9pbmRleCk6CisgICAgICAgIChUZXN0TmVzdGVkRnV6enlEaWN0LnRlc3Rf
Z2V0KToKKyAgICAgICAgKFRlc3ROZXN0ZWRGdXp6eURpY3QudGVzdF9nZXRpdGVtKToKKyAgICAg
ICAgKFRlc3ROZXN0ZWRGdXp6eURpY3QudGVzdF9zZXQpOgorICAgICAgICAoVGVzdE5lc3RlZEZ1
enp5RGljdC50ZXN0X2RpY3QpOgorCiAyMDIxLTA2LTI4ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVk
YXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbd2Via2l0Y29yZXB5XSBBZGQgdGVzdCBzdWl0ZSB3
aXRoIHRlbXAgZGlyZWN0b3J5CkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRj
b3JlcHkvc2V0dXAucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0Y29yZXB5L3NldHVwLnB5CShyZXZpc2lvbiAyNzkzNDgpCisrKyBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRjb3JlcHkvc2V0dXAucHkJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMw
LDcgQEAgZGVmIHJlYWRtZSgpOgogCiBzZXR1cCgKICAgICBuYW1lPSd3ZWJraXRjb3JlcHknLAot
ICAgIHZlcnNpb249JzAuNi4wJywKKyAgICB2ZXJzaW9uPScwLjcuMCcsCiAgICAgZGVzY3JpcHRp
b249J0xpYnJhcnkgY29udGFpbmluZyB2YXJpb3VzIFB5dGhvbiBzdXBwb3J0IGNsYXNzZXMgYW5k
IGZ1bmN0aW9ucy4nLAogICAgIGxvbmdfZGVzY3JpcHRpb249cmVhZG1lKCksCiAgICAgY2xhc3Np
ZmllcnM9WwpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtp
dGNvcmVweS9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5CShyZXZpc2lvbiAyNzkzNDgp
CisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19f
aW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw5IEBAIGZyb20gd2Via2l0Y29y
ZXB5LnN1YnByb2Nlc3NfdXRpbHMgaW1wb3IKIGZyb20gd2Via2l0Y29yZXB5Lm91dHB1dF9jYXB0
dXJlIGltcG9ydCBMb2dnZXJDYXB0dXJlLCBPdXRwdXRDYXB0dXJlLCBPdXRwdXREdXBsaWNhdGUK
IGZyb20gd2Via2l0Y29yZXB5LnRhc2tfcG9vbCBpbXBvcnQgVGFza1Bvb2wKIGZyb20gd2Via2l0
Y29yZXB5LmNyZWRlbnRpYWxzIGltcG9ydCBjcmVkZW50aWFscworZnJvbSB3ZWJraXRjb3JlcHku
bmVzdGVkX2Z1enp5X2RpY3QgaW1wb3J0IE5lc3RlZEZ1enp5RGljdAogCi12ZXJzaW9uID0gVmVy
c2lvbigwLCA2LCAwKQordmVyc2lvbiA9IFZlcnNpb24oMCwgNywgMCkKIAogZnJvbSB3ZWJraXRj
b3JlcHkuYXV0b2luc3RhbGwgaW1wb3J0IFBhY2thZ2UsIEF1dG9JbnN0YWxsCiBpZiBzeXMudmVy
c2lvbl9pbmZvID4gKDMsIDApOgpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
Y29yZXB5L3dlYmtpdGNvcmVweS9uZXN0ZWRfZnV6enlfZGljdC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L25lc3RlZF9m
dXp6eV9kaWN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dl
YmtpdGNvcmVweS93ZWJraXRjb3JlcHkvbmVzdGVkX2Z1enp5X2RpY3QucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMDAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworZnJvbSB3ZWJraXRjb3JlcHkuc3RyaW5nX3V0aWxzIGltcG9ydCB1bmljb2RlCisKKworY2xh
c3MgTmVzdGVkRnV6enlEaWN0KG9iamVjdCk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGFz
c2VydF92YWxpZF9rZXkoY2xzLCBrZXkpOgorICAgICAgICBpZiBub3QgYW55KChpc2luc3RhbmNl
KGtleSwgc3RyKSwgaXNpbnN0YW5jZShrZXksIHVuaWNvZGUpLCBpc2luc3RhbmNlKGtleSwgYnl0
ZXMpKSk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIne30nIGlzIG5vdCBhIHZhbGlk
IGtleSBmb3IgYSBOZXN0ZWREaWN0Ii5mb3JtYXQodHlwZShrZXkpKSkKKworICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBwcmltYXJ5X3NpemU9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLnBy
aW1hcnlfc2l6ZSA9IGludChwcmltYXJ5X3NpemUgb3IgNCkKKyAgICAgICAgc2VsZi5fZGF0YSA9
IGRpY3QoKQorICAgICAgICBzZWxmLnVwZGF0ZShkaWN0KCoqa3dhcmdzKSkKKworICAgIGRlZiBf
X2dldGl0ZW1fXyhzZWxmLCBrZXluYW1lKToKKyAgICAgICAgc2VsZi5hc3NlcnRfdmFsaWRfa2V5
KGtleW5hbWUpCisgICAgICAgIGtleV9hLCBrZXlfYiA9IGtleW5hbWVbOnNlbGYucHJpbWFyeV9z
aXplXSwga2V5bmFtZVtzZWxmLnByaW1hcnlfc2l6ZTpdCisgICAgICAgIHZhbHVlID0gTm9uZQor
ICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgIGZvciBrZXksIHJlc3VsdCBpbiBzZWxmLl9k
YXRhLmdldChrZXlfYSwgZGljdCgpKS5pdGVtcygpOgorICAgICAgICAgICAgaWYga2V5LnN0YXJ0
c3dpdGgoa2V5X2IpOgorICAgICAgICAgICAgICAgIGlmIGZvdW5kOgorICAgICAgICAgICAgICAg
ICAgICByYWlzZSBLZXlFcnJvcigiTXVsdGlwbGUgdmFsdWVzIG1hdGNoICd7fSciLmZvcm1hdChr
ZXluYW1lKSkKKyAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICB2
YWx1ZSA9IHJlc3VsdAorICAgICAgICBpZiBmb3VuZDoKKyAgICAgICAgICAgIHJldHVybiB2YWx1
ZQorICAgICAgICByYWlzZSBLZXlFcnJvcihrZXluYW1lKQorCisgICAgZGVmIGdldChzZWxmLCBr
ZXluYW1lLCB2YWx1ZT1Ob25lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0aXRlbShrZXluYW1l
LCB2YWx1ZSlbMV0KKworICAgIGRlZiBnZXRpdGVtKHNlbGYsIGtleW5hbWUsIHZhbHVlPU5vbmUp
OgorICAgICAgICBzZWxmLmFzc2VydF92YWxpZF9rZXkoa2V5bmFtZSkKKyAgICAgICAga2V5X2Es
IGtleV9iID0ga2V5bmFtZVs6c2VsZi5wcmltYXJ5X3NpemVdLCBrZXluYW1lW3NlbGYucHJpbWFy
eV9zaXplOl0KKyAgICAgICAgZm91bmQgPSBOb25lCisgICAgICAgIGZvciBrZXksIHJlc3VsdCBp
biBzZWxmLl9kYXRhLmdldChrZXlfYSwgZGljdCgpKS5pdGVtcygpOgorICAgICAgICAgICAgaWYg
a2V5LnN0YXJ0c3dpdGgoa2V5X2IpOgorICAgICAgICAgICAgICAgIGlmIGZvdW5kOgorICAgICAg
ICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigiTXVsdGlwbGUgdmFsdWVzIG1hdGNoICd7fSci
LmZvcm1hdChrZXluYW1lKSkKKyAgICAgICAgICAgICAgICBmb3VuZCA9IGtleV9hICsga2V5Cisg
ICAgICAgICAgICAgICAgdmFsdWUgPSByZXN1bHQKKyAgICAgICAgcmV0dXJuIGZvdW5kLCB2YWx1
ZQorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICBzZWxm
LmFzc2VydF92YWxpZF9rZXkoa2V5KQorICAgICAgICBzZWxmLl9kYXRhLnNldGRlZmF1bHQoa2V5
WzpzZWxmLnByaW1hcnlfc2l6ZV0sIGRpY3QoKSlba2V5W3NlbGYucHJpbWFyeV9zaXplOl1dID0g
dmFsdWUKKworICAgIGRlZiB1cGRhdGUoc2VsZiwgZGF0YSk6CisgICAgICAgIGZvciBrZXksIHZh
bHVlIGluIGRhdGEuaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGZba2V5XSA9IHZhbHVlCisKKyAg
ICBkZWYga2V5cyhzZWxmKToKKyAgICAgICAgZm9yIGtleV9hLCB2YWx1ZXMgaW4gc2VsZi5fZGF0
YS5pdGVtcygpOgorICAgICAgICAgICAgZm9yIGtleV9iIGluIHZhbHVlcy5rZXlzKCk6CisgICAg
ICAgICAgICAgICAgeWllbGQga2V5X2EgKyBrZXlfYgorCisgICAgZGVmIHZhbHVlcyhzZWxmKToK
KyAgICAgICAgZm9yIHZhbHVlcyBpbiBzZWxmLl9kYXRhLnZhbHVlcygpOgorICAgICAgICAgICAg
Zm9yIHZhbHVlIGluIHZhbHVlcy52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICB5aWVsZCB2YWx1
ZQorCisgICAgZGVmIGl0ZW1zKHNlbGYpOgorICAgICAgICBmb3Iga2V5X2EsIHZhbHVlcyBpbiBz
ZWxmLl9kYXRhLml0ZW1zKCk6CisgICAgICAgICAgICBmb3Iga2V5X2IsIHZhbHVlIGluIHZhbHVl
cy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHlpZWxkIGtleV9hICsga2V5X2IsIHZhbHVlCisK
KyAgICBkZWYgZGljdChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gZGljdCgpCisgICAgICAgIGZv
ciBrZXksIHZhbHVlIGluIHNlbGYuaXRlbXMoKToKKyAgICAgICAgICAgIHJlc3VsdFtrZXldID0g
dmFsdWUKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5kaWN0KCkuX19yZXByX18oKQorCisgICAgZGVmIF9fc3RyX18o
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmRpY3QoKS5fX3N0cl9fKCkKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGVzdHMvbmVzdGVk
X2Z1enp5X2RpY3RfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0cy9uZXN0ZWRfZnV6enlfZGljdF91
bml0dGVzdC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rlc3RzL25lc3RlZF9mdXp6eV9kaWN0X3VuaXR0ZXN0LnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQK
KyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdGNvcmVweSBpbXBv
cnQgTmVzdGVkRnV6enlEaWN0CisKKworY2xhc3MgVGVzdE5lc3RlZEZ1enp5RGljdCh1bml0dGVz
dC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIGQg
PSBOZXN0ZWRGdXp6eURpY3QodmFsdWVhPTEsIHZhbHVlYj0yLCBvdGhlcj0zKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNvcnRlZChsaXN0KGQudmFsdWVzKCkpKSwgc29ydGVkKCgxLCAyLCAz
KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGxpc3QoZC5rZXlzKCkpKSwgc29y
dGVkKCgndmFsdWVhJywgJ3ZhbHVlYicsICdvdGhlcicpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgKKyAgICAgICAgICAgIHNvcnRlZChsaXN0KGQuaXRlbXMoKSkpLAorICAgICAgICAgICAg
c29ydGVkKCgoJ3ZhbHVlYScsIDEpLCAoJ3ZhbHVlYicsIDIpLCAoJ290aGVyJywgMykpKSwKKyAg
ICAgICAgKQorCisgICAgZGVmIHRlc3RfaW5kZXgoc2VsZik6CisgICAgICAgIGQgPSBOZXN0ZWRG
dXp6eURpY3QodmFsdWVhPTEsIHZhbHVlYj0yLCBvdGhlcj0zKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGRbJ3ZhbHVlYSddLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ3ZhbHVl
YiddLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ290aGUnXSwgMykKKworICAgICAg
ICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoZFsnbm90aGluZyddLCBOb25lKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRS
YWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWyd2YWx1ZSdd
LCBOb25lKQorCisgICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgorICAgICAgICBkID0gTmVzdGVkRnV6
enlEaWN0KHZhbHVlYT0xLCB2YWx1ZWI9Miwgb3RoZXI9MykKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChkLmdldCgndmFsdWVhJyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQo
J3ZhbHVlYicpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCdvdGhlJyksIDMp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ25vdGhpbmcnKSwgTm9uZSkKKworICAg
ICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoZC5nZXQoJ3ZhbHVlJyksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9nZXRpdGVt
KHNlbGYpOgorICAgICAgICBkID0gTmVzdGVkRnV6enlEaWN0KHZhbHVlYT0xLCB2YWx1ZWI9Miwg
b3RoZXI9MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldGl0ZW0oJ3ZhbHVlYScpLCAo
J3ZhbHVlYScsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0aXRlbSgndmFsdWVi
JyksICgndmFsdWViJywgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXRpdGVtKCdv
dGhlJyksICgnb3RoZXInLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldGl0ZW0o
J25vdGhpbmcnKSwgKE5vbmUsIE5vbmUpKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlz
ZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldGl0ZW0oJ3Zh
bHVlJyksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9zZXQoc2VsZik6CisgICAgICAgIGQgPSBOZXN0
ZWRGdXp6eURpY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCdzb21lbG9uZ3Zh
bHVlJyksIE5vbmUpCisgICAgICAgIGRbJ3NvbWVsb25ndmFsdWUnXSA9IDEKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChkLmdldCgnc29tZWxvbmd2YWx1ZScpLCAxKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGQuZ2V0KCdzb21lJyksIDEpCisKKyAgICBkZWYgdGVzdF9kaWN0KHNlbGYpOgor
ICAgICAgICBkID0gTmVzdGVkRnV6enlEaWN0KHZhbHVlYT0xLCB2YWx1ZWI9Miwgb3RoZXI9MykK
KyAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwoZC5kaWN0KCksIGRpY3QodmFsdWVhPTEsIHZh
bHVlYj0yLCBvdGhlcj0zKSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432505</attachid>
            <date>2021-06-29 11:46:21 -0700</date>
            <delta_ts>2021-06-29 12:27:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227150-20210629114620.patch</filename>
            <type>text/plain</type>
            <size>12722</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3OTM3NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM3IEBACisyMDIxLTA2LTI5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0Y29yZXB5XSBBZGQgTmVzdGVkRnV6enlEaWN0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcxNTAKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzc5NDc1NDY0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3NldHVw
LnB5OiBCdW1wIHZlcnNpb24uCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29y
ZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9uZXN0ZWRfZnV6enlfZGljdC5weTog
QWRkZWQuCisgICAgICAgIChOZXN0ZWRGdXp6eURpY3QpOgorICAgICAgICAoTmVzdGVkRnV6enlE
aWN0LmFzc2VydF92YWxpZF9rZXkpOiBFbnN1cmUgdGhhdCB0aGUgcHJvdmlkZWQga2V5IGlzIGZ1
enotYWJsZS4KKyAgICAgICAgKE5lc3RlZEZ1enp5RGljdC5fX2luaXRfXyk6IENvbnN0cnVjdCB0
aGUgb2JqZWN0IHRoZSBzYW1lIHdheSBhIGRpY3Rpb25hcnkgaXMgY29uc3RydWN0ZWQuCisgICAg
ICAgIChOZXN0ZWRGdXp6eURpY3QuX19nZXRpdGVtX18pOiBTcGxpdCBwcm92aWRlZCBrZXluYW1l
IGFuZCBmdXp6eSBtYXRjaCB0aGUgc2Vjb25kIHBhcnQuCisgICAgICAgIChOZXN0ZWRGdXp6eURp
Y3QuZ2V0KTogRGl0dG8uCisgICAgICAgIChOZXN0ZWRGdXp6eURpY3QuZ2V0aXRlbSk6IFJldHVy
biB0aGUgY29tcGxldGUga2V5bmFtZSBhbmQgdmFsdWUuCisgICAgICAgIChOZXN0ZWRGdXp6eURp
Y3QuX19zZXRpdGVtX18pOiBBZGQgdmFsdWUgdG8gZGljdGlvbmFyeS4KKyAgICAgICAgKE5lc3Rl
ZEZ1enp5RGljdC51cGRhdGUpOiBHaXZlbiBhIGRpY3Rpb25hcnksIGluc2VydCBpdCdzIGNvbnRl
bnRzIGludG8gdGhpcyBvYmplY3QuCisgICAgICAgIChOZXN0ZWRGdXp6eURpY3Qua2V5cyk6IEl0
ZXJhdGUgdGhyb3VnaCBhbGwga2V5cyBpbiB0aGUgb2JqZWN0LgorICAgICAgICAoTmVzdGVkRnV6
enlEaWN0LnZhbHVlcyk6IEl0ZXJhdGUgdGhyb3VnaCBhbGwgdmFsdWVzIGluIHRoZSBvYmplY3Qu
CisgICAgICAgIChOZXN0ZWRGdXp6eURpY3QuaXRlbXMpOiBJdGVyYXRlIHRocm91Z2ggYWxsIGtl
eS92YWx1ZSBwYWlycyBpbiB0aGUgb2JqZWN0LgorICAgICAgICAoTmVzdGVkRnV6enlEaWN0LmRp
Y3QpOiBSZXR1cm4gYSBzdGFuZGFyZCBkaWN0aW9uYXJ5IHdpdGggdGhlIGNvbnRlbnRzIG9mIHRo
aXMgb2JqZWN0LgorICAgICAgICAoTmVzdGVkRnV6enlEaWN0Ll9fcmVwcl9fKToKKyAgICAgICAg
KE5lc3RlZEZ1enp5RGljdC5fX3N0cl9fKToKKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rlc3RzL25lc3RlZF9mdXp6eV9kaWN0X3VuaXR0ZXN0
LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3ROZXN0ZWRGdXp6eURpY3QpOgorICAgICAgICAoVGVz
dE5lc3RlZEZ1enp5RGljdC50ZXN0X2NvbnN0cnVjdG9yKToKKyAgICAgICAgKFRlc3ROZXN0ZWRG
dXp6eURpY3QudGVzdF9pbmRleCk6CisgICAgICAgIChUZXN0TmVzdGVkRnV6enlEaWN0LnRlc3Rf
Z2V0KToKKyAgICAgICAgKFRlc3ROZXN0ZWRGdXp6eURpY3QudGVzdF9nZXRpdGVtKToKKyAgICAg
ICAgKFRlc3ROZXN0ZWRGdXp6eURpY3QudGVzdF9zZXQpOgorICAgICAgICAoVGVzdE5lc3RlZEZ1
enp5RGljdC50ZXN0X2RpY3QpOgorCiAyMDIxLTA2LTI5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVk
YXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbd2Via2l0Y29yZXB5XSBBZGQgTWVhc3VyZVRpbWUg
cHl0aG9uIHRvb2wKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS9z
ZXR1cC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3Jl
cHkvc2V0dXAucHkJKHJldmlzaW9uIDI3OTM3NykKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdGNvcmVweS9zZXR1cC5weQkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQCBk
ZWYgcmVhZG1lKCk6CiAKIHNldHVwKAogICAgIG5hbWU9J3dlYmtpdGNvcmVweScsCi0gICAgdmVy
c2lvbj0nMC42LjEnLAorICAgIHZlcnNpb249JzAuNy4wJywKICAgICBkZXNjcmlwdGlvbj0nTGli
cmFyeSBjb250YWluaW5nIHZhcmlvdXMgUHl0aG9uIHN1cHBvcnQgY2xhc3NlcyBhbmQgZnVuY3Rp
b25zLicsCiAgICAgbG9uZ19kZXNjcmlwdGlvbj1yZWFkbWUoKSwKICAgICBjbGFzc2lmaWVycz1b
CkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5
L19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHkJKHJldmlzaW9uIDI3OTM3NykKKysrIFRv
b2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18u
cHkJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDkgQEAgZnJvbSB3ZWJraXRjb3JlcHkub3V0
cHV0X2NhcHR1cmUgaW1wb3J0IAogZnJvbSB3ZWJraXRjb3JlcHkudGFza19wb29sIGltcG9ydCBU
YXNrUG9vbAogZnJvbSB3ZWJraXRjb3JlcHkuY3JlZGVudGlhbHMgaW1wb3J0IGNyZWRlbnRpYWxz
CiBmcm9tIHdlYmtpdGNvcmVweS5tZWFzdXJlX3RpbWUgaW1wb3J0IE1lYXN1cmVUaW1lCitmcm9t
IHdlYmtpdGNvcmVweS5uZXN0ZWRfZnV6enlfZGljdCBpbXBvcnQgTmVzdGVkRnV6enlEaWN0CiAK
LXZlcnNpb24gPSBWZXJzaW9uKDAsIDYsIDEpCit2ZXJzaW9uID0gVmVyc2lvbigwLCA3LCAwKQog
CiBmcm9tIHdlYmtpdGNvcmVweS5hdXRvaW5zdGFsbCBpbXBvcnQgUGFja2FnZSwgQXV0b0luc3Rh
bGwKIGlmIHN5cy52ZXJzaW9uX2luZm8gPiAoMywgMCk6CkluZGV4OiBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L25lc3RlZF9mdXp6eV9kaWN0LnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRj
b3JlcHkvbmVzdGVkX2Z1enp5X2RpY3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9uZXN0ZWRfZnV6enlfZGljdC5w
eQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCitmcm9tIHdlYmtpdGNvcmVweS5zdHJpbmdfdXRpbHMgaW1wb3J0IHVu
aWNvZGUKKworCitjbGFzcyBOZXN0ZWRGdXp6eURpY3Qob2JqZWN0KToKKyAgICBAY2xhc3NtZXRo
b2QKKyAgICBkZWYgYXNzZXJ0X3ZhbGlkX2tleShjbHMsIGtleSk6CisgICAgICAgIGlmIG5vdCBh
bnkoKGlzaW5zdGFuY2Uoa2V5LCBzdHIpLCBpc2luc3RhbmNlKGtleSwgdW5pY29kZSksIGlzaW5z
dGFuY2Uoa2V5LCBieXRlcykpKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIid7fScg
aXMgbm90IGEgdmFsaWQga2V5IGZvciBhIE5lc3RlZERpY3QiLmZvcm1hdCh0eXBlKGtleSkpKQor
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByaW1hcnlfc2l6ZT1Ob25lLCAqKmt3YXJncyk6Cisg
ICAgICAgIHNlbGYucHJpbWFyeV9zaXplID0gaW50KHByaW1hcnlfc2l6ZSBvciA2KQorICAgICAg
ICBzZWxmLl9kYXRhID0gZGljdCgpCisgICAgICAgIHNlbGYudXBkYXRlKGRpY3QoKiprd2FyZ3Mp
KQorCisgICAgZGVmIGdldGl0ZW0oc2VsZiwga2V5bmFtZSwgdmFsdWU9Tm9uZSk6CisgICAgICAg
IHNlbGYuYXNzZXJ0X3ZhbGlkX2tleShrZXluYW1lKQorICAgICAgICBrZXlfYSwga2V5X2IgPSBr
ZXluYW1lWzpzZWxmLnByaW1hcnlfc2l6ZV0sIGtleW5hbWVbc2VsZi5wcmltYXJ5X3NpemU6XQor
ICAgICAgICBmb3VuZCA9IE5vbmUKKyAgICAgICAgZm9yIGtleSwgcmVzdWx0IGluIHNlbGYuX2Rh
dGEuZ2V0KGtleV9hLCBkaWN0KCkpLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBrZXkuc3RhcnRz
d2l0aChrZXlfYik6CisgICAgICAgICAgICAgICAgaWYgZm91bmQ6CisgICAgICAgICAgICAgICAg
ICAgIHJhaXNlIEtleUVycm9yKCJNdWx0aXBsZSB2YWx1ZXMgbWF0Y2ggJ3t9JyIuZm9ybWF0KGtl
eW5hbWUpKQorICAgICAgICAgICAgICAgIGZvdW5kID0ga2V5X2EgKyBrZXkKKyAgICAgICAgICAg
ICAgICB2YWx1ZSA9IHJlc3VsdAorICAgICAgICByZXR1cm4gZm91bmQsIHZhbHVlCisKKyAgICBk
ZWYgX19nZXRpdGVtX18oc2VsZiwga2V5bmFtZSk6CisgICAgICAgIGtleSwgdmFsdWUgPSBzZWxm
LmdldGl0ZW0oa2V5bmFtZSkKKyAgICAgICAgaWYga2V5OgorICAgICAgICAgICAgcmV0dXJuIHZh
bHVlCisgICAgICAgIHJhaXNlIEtleUVycm9yKGtleW5hbWUpCisKKyAgICBkZWYgZ2V0KHNlbGYs
IGtleW5hbWUsIHZhbHVlPU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5nZXRpdGVtKGtleW5h
bWUsIHZhbHVlKVsxXQorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgor
ICAgICAgICBzZWxmLmFzc2VydF92YWxpZF9rZXkoa2V5KQorICAgICAgICBzZWxmLl9kYXRhLnNl
dGRlZmF1bHQoa2V5WzpzZWxmLnByaW1hcnlfc2l6ZV0sIGRpY3QoKSlba2V5W3NlbGYucHJpbWFy
eV9zaXplOl1dID0gdmFsdWUKKworICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXluYW1lKToK
KyAgICAgICAgc2VsZi5hc3NlcnRfdmFsaWRfa2V5KGtleW5hbWUpCisgICAgICAgIGtleV9hLCBr
ZXlfYiA9IGtleW5hbWVbOnNlbGYucHJpbWFyeV9zaXplXSwga2V5bmFtZVtzZWxmLnByaW1hcnlf
c2l6ZTpdCisgICAgICAgIHRvX3JlbW92ZSA9IFtdCisgICAgICAgIGZvciBrZXksIHJlc3VsdCBp
biBzZWxmLl9kYXRhLmdldChrZXlfYSwgZGljdCgpKS5pdGVtcygpOgorICAgICAgICAgICAgaWYg
a2V5LnN0YXJ0c3dpdGgoa2V5X2IpOgorICAgICAgICAgICAgICAgIHRvX3JlbW92ZS5hcHBlbmQo
a2V5KQorICAgICAgICBpZiBub3QgdG9fcmVtb3ZlOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJy
b3Ioa2V5bmFtZSkKKyAgICAgICAgZm9yIGtleSBpbiB0b19yZW1vdmU6CisgICAgICAgICAgICBk
ZWwgc2VsZi5fZGF0YVtrZXlfYV1ba2V5XQorICAgICAgICBpZiBub3Qgc2VsZi5fZGF0YS5nZXQo
a2V5X2EsIFRydWUpOgorICAgICAgICAgICAgZGVsIHNlbGYuX2RhdGFba2V5X2FdCisKKyAgICBk
ZWYgX19jb250YWluc19fKHNlbGYsIGtleW5hbWUpOgorICAgICAgICBrZXlfYSwga2V5X2IgPSBr
ZXluYW1lWzpzZWxmLnByaW1hcnlfc2l6ZV0sIGtleW5hbWVbc2VsZi5wcmltYXJ5X3NpemU6XQor
ICAgICAgICBmb3Iga2V5LCByZXN1bHQgaW4gc2VsZi5fZGF0YS5nZXQoa2V5X2EsIGRpY3QoKSku
aXRlbXMoKToKKyAgICAgICAgICAgIGlmIGtleS5zdGFydHN3aXRoKGtleV9iKToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiB1cGRh
dGUoc2VsZiwgZGF0YSk6CisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGRhdGEuaXRlbXMoKToK
KyAgICAgICAgICAgIHNlbGZba2V5XSA9IHZhbHVlCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToK
KyAgICAgICAgcmV0dXJuIHN1bShbbGVuKHZhbHVlcykgZm9yIHZhbHVlcyBpbiBzZWxmLl9kYXRh
LnZhbHVlcygpXSkKKworICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICBmb3Iga2V5X2EsIHZh
bHVlcyBpbiBzZWxmLl9kYXRhLml0ZW1zKCk6CisgICAgICAgICAgICBmb3Iga2V5X2IgaW4gdmFs
dWVzLmtleXMoKToKKyAgICAgICAgICAgICAgICB5aWVsZCBrZXlfYSArIGtleV9iCisKKyAgICBk
ZWYgdmFsdWVzKHNlbGYpOgorICAgICAgICBmb3IgdmFsdWVzIGluIHNlbGYuX2RhdGEudmFsdWVz
KCk6CisgICAgICAgICAgICBmb3IgdmFsdWUgaW4gdmFsdWVzLnZhbHVlcygpOgorICAgICAgICAg
ICAgICAgIHlpZWxkIHZhbHVlCisKKyAgICBkZWYgaXRlbXMoc2VsZik6CisgICAgICAgIGZvciBr
ZXlfYSwgdmFsdWVzIGluIHNlbGYuX2RhdGEuaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBrZXlf
YiwgdmFsdWUgaW4gdmFsdWVzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgeWllbGQga2V5X2Eg
KyBrZXlfYiwgdmFsdWUKKworICAgIGRlZiBkaWN0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBk
aWN0KCkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5pdGVtcygpOgorICAgICAgICAg
ICAgcmVzdWx0W2tleV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYg
X19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmRpY3QoKS5fX3JlcHJfXygpCisK
KyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZGljdCgpLl9fc3Ry
X18oKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNv
cmVweS90ZXN0cy9uZXN0ZWRfZnV6enlfZGljdF91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rlc3RzL25l
c3RlZF9mdXp6eV9kaWN0X3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1Njcmlw
dHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGVzdHMvbmVzdGVkX2Z1enp5
X2RpY3RfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NSBAQAorIyBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20g
d2Via2l0Y29yZXB5IGltcG9ydCBOZXN0ZWRGdXp6eURpY3QKKworCitjbGFzcyBUZXN0TmVzdGVk
RnV6enlEaWN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcihz
ZWxmKToKKyAgICAgICAgZCA9IE5lc3RlZEZ1enp5RGljdCh2YWx1ZV9hPTEsIHZhbHVlX2I9Miwg
b3RoZXJfdmFsdWU9MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQobGlzdChkLnZh
bHVlcygpKSksIHNvcnRlZCgoMSwgMiwgMykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNv
cnRlZChsaXN0KGQua2V5cygpKSksIHNvcnRlZCgoJ3ZhbHVlX2EnLCAndmFsdWVfYicsICdvdGhl
cl92YWx1ZScpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvcnRl
ZChsaXN0KGQuaXRlbXMoKSkpLAorICAgICAgICAgICAgc29ydGVkKCgoJ3ZhbHVlX2EnLCAxKSwg
KCd2YWx1ZV9iJywgMiksICgnb3RoZXJfdmFsdWUnLCAzKSkpLAorICAgICAgICApCisKKyAgICBk
ZWYgdGVzdF9pbmRleChzZWxmKToKKyAgICAgICAgZCA9IE5lc3RlZEZ1enp5RGljdCh2YWx1ZV9h
PTEsIHZhbHVlX2I9Miwgb3RoZXJfdmFsdWU9MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChk
Wyd2YWx1ZV9hJ10sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsndmFsdWVfYiddLCAy
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ290aGVyXyddLCAzKQorCisgICAgICAgIHdp
dGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChkWydub3RoaW5nJ10sIE5vbmUpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNl
cyhLZXlFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ3ZhbHVlJ10sIE5v
bmUpCisKKyAgICBkZWYgdGVzdF9nZXQoc2VsZik6CisgICAgICAgIGQgPSBOZXN0ZWRGdXp6eURp
Y3QodmFsdWVfYT0xLCB2YWx1ZV9iPTIsIG90aGVyX3ZhbHVlPTMpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoZC5nZXQoJ3ZhbHVlX2EnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChk
LmdldCgndmFsdWVfYicpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCdvdGhl
cl8nKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgnbm90aGluZycpLCBOb25l
KQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgndmFsdWVfJyksIE5vbmUpCisKKyAgICBkZWYgdGVz
dF9nZXRpdGVtKHNlbGYpOgorICAgICAgICBkID0gTmVzdGVkRnV6enlEaWN0KHZhbHVlX2E9MSwg
dmFsdWVfYj0yLCBvdGhlcl92YWx1ZT0zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0
aXRlbSgndmFsdWVfYScpLCAoJ3ZhbHVlX2EnLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChkLmdldGl0ZW0oJ3ZhbHVlX2InKSwgKCd2YWx1ZV9iJywgMikpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoZC5nZXRpdGVtKCdvdGhlcl8nKSwgKCdvdGhlcl92YWx1ZScsIDMpKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0aXRlbSgnbm90aGluZycpLCAoTm9uZSwgTm9uZSkpCisK
KyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGQuZ2V0aXRlbSgndmFsdWVfJyksIChOb25lLCBOb25lKSkKKworICAg
IGRlZiB0ZXN0X3NldChzZWxmKToKKyAgICAgICAgZCA9IE5lc3RlZEZ1enp5RGljdCgpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ3NvbWVsb25ndmFsdWUnKSwgTm9uZSkKKyAgICAg
ICAgZFsnc29tZWxvbmd2YWx1ZSddID0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0
KCdzb21lbG9uZ3ZhbHVlJyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ3Nv
bWVsb25nJyksIDEpCisKKyAgICBkZWYgdGVzdF9kZWxpdGVtKHNlbGYpOgorICAgICAgICBkID0g
TmVzdGVkRnV6enlEaWN0KHZhbHVlX2E9MSwgdmFsdWVfYj0yLCBvdGhlcl92YWx1ZT0zKQorICAg
ICAgICBkZWwgZFsnb3RoZXJfdmFsdWUnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihk
KSwgMikKKyAgICAgICAgZGVsIGRbJ3ZhbHVlXyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
bGVuKGQpLCAwKQorCisgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CisgICAgICAgIGQgPSBO
ZXN0ZWRGdXp6eURpY3QodmFsdWVfYT0xLCB2YWx1ZV9iPTIsIG90aGVyX3ZhbHVlPTMpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZSgndmFsdWVfYScgaW4gZCkKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKCd2YWx1ZV8nIGluIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoJ2NvbnRlbnQnIGlu
IGQpCisKKyAgICBkZWYgdGVzdF9sZW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
bGVuKE5lc3RlZEZ1enp5RGljdCh2YWx1ZV9hPTEsIHZhbHVlX2I9Miwgb3RoZXJfdmFsdWU9Mykp
LCAzKQorCisgICAgZGVmIHRlc3RfZGljdChzZWxmKToKKyAgICAgICAgZCA9IE5lc3RlZEZ1enp5
RGljdCh2YWx1ZV9hPTEsIHZhbHVlX2I9Miwgb3RoZXJfdmFsdWU9MykKKyAgICAgICAgc2VsZi5h
c3NlcnREaWN0RXF1YWwoZC5kaWN0KCksIGRpY3QodmFsdWVfYT0xLCB2YWx1ZV9iPTIsIG90aGVy
X3ZhbHVlPTMpKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>