<?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>78326</bug_id>
          
          <creation_ts>2012-02-09 21:41:39 -0800</creation_ts>
          <short_desc>Do not reformat strings in &lt;input type=number&gt; on platforms using LocalizedNumberICU</short_desc>
          <delta_ts>2012-03-11 22:51:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>62939</blocked>
    
    <blocked>80815</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kent Tamura">tkent</reporter>
          <assigned_to name="Kent Tamura">tkent</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>morrita</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>553808</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-02-09 21:41:39 -0800</bug_when>
    <thetext>Do not reformat strings in &lt;input type=number&gt; on platforms using LocalizedNumberICU.
Note that LocalizedNumberICU is used only on Chromium port for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553829</commentid>
    <comment_count>1</comment_count>
      <attachid>126452</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-02-09 22:12:21 -0800</bug_when>
    <thetext>Created attachment 126452
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553831</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-09 22:14:59 -0800</bug_when>
    <thetext>Attachment 126452 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebKit/chromium/tests/LocalizedNumberICUTest.cpp:33:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Source/WebCore/platform/text/LocalizedNumberICU.cpp:33:  Found header this file implements after a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/platform/text/LocalizedNumberICU.cpp:213:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 3 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553852</commentid>
    <comment_count>3</comment_count>
      <attachid>126452</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-09 22:44:25 -0800</bug_when>
    <thetext>Comment on attachment 126452
Patch

Attachment 126452 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11447568

New failing tests:
fast/speech/input-appearance-numberandspeech.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553860</commentid>
    <comment_count>4</comment_count>
      <attachid>126459</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-02-09 23:00:03 -0800</bug_when>
    <thetext>Created attachment 126459
Patch 2

style errors and test_expectations.txt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558481</commentid>
    <comment_count>5</comment_count>
      <attachid>126459</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-16 13:39:02 -0800</bug_when>
    <thetext>Comment on attachment 126459
Patch 2

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        We had buss such as stripping leading zeros, dropping lower digits

bugs?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558776</commentid>
    <comment_count>6</comment_count>
      <attachid>127490</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-02-16 18:13:29 -0800</bug_when>
    <thetext>Created attachment 127490
Patch 3

buss</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571434</commentid>
    <comment_count>7</comment_count>
      <attachid>127490</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-03-05 20:50:53 -0800</bug_when>
    <thetext>Comment on attachment 127490
Patch 3

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

&gt; Source/WebCore/platform/text/LocalizedNumberICU.cpp:173
&gt; +        if (matches(input, 0, prefix) &amp;&amp; matches(input, endIndex - suffix.length(), suffix)) {

isn&apos;t it possible to underflow |endIndex - suffix.length()|?

&gt; Source/WebCore/platform/text/LocalizedNumberICU.cpp:203
&gt; +        for (; symbolIndex &lt; DecimalSymbolsSize; ++symbolIndex) {

I hope these have named as a functions.

&gt; Source/WebCore/platform/text/LocalizedNumberICU.h:62
&gt; +    String m_decimalSymbols[12];

nit: Could be m_decimalSymbols[DecimalSymbolsSize] ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571450</commentid>
    <comment_count>8</comment_count>
      <attachid>127490</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-03-05 21:45:25 -0800</bug_when>
    <thetext>Comment on attachment 127490
Patch 3

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

&gt;&gt; Source/WebCore/platform/text/LocalizedNumberICU.cpp:173
&gt;&gt; +        if (matches(input, 0, prefix) &amp;&amp; matches(input, endIndex - suffix.length(), suffix)) {
&gt; 
&gt; isn&apos;t it possible to underflow |endIndex - suffix.length()|?

it&apos;s possible. Thank you for pointing out.
I&apos;ll fix it and two instances below.

&gt;&gt; Source/WebCore/platform/text/LocalizedNumberICU.cpp:203
&gt;&gt; +        for (; symbolIndex &lt; DecimalSymbolsSize; ++symbolIndex) {
&gt; 
&gt; I hope these have named as a functions.

What are &apos;these&apos; pointing? Do you mean this &apos;for&apos; loop should be a separated function?

&gt;&gt; Source/WebCore/platform/text/LocalizedNumberICU.h:62
&gt;&gt; +    String m_decimalSymbols[12];
&gt; 
&gt; nit: Could be m_decimalSymbols[DecimalSymbolsSize] ?

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571470</commentid>
    <comment_count>9</comment_count>
      <attachid>130287</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-03-05 22:13:55 -0800</bug_when>
    <thetext>Created attachment 130287
Patch 4

Apply review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571602</commentid>
    <comment_count>10</comment_count>
      <attachid>130287</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-03-06 00:50:36 -0800</bug_when>
    <thetext>Comment on attachment 130287
Patch 4

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

ok.

&gt; Source/WebCore/platform/text/LocalizedNumberICU.cpp:142
&gt; +template &lt;class StringType&gt; bool matches(const String&amp; text, unsigned position, const StringType&amp; part)

Can be static or ALWAYS_INLINE to save namespace pollution?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571619</commentid>
    <comment_count>11</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-03-06 01:13:03 -0800</bug_when>
    <thetext>Committed r109876: &lt;http://trac.webkit.org/changeset/109876&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571621</commentid>
    <comment_count>12</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-03-06 01:15:20 -0800</bug_when>
    <thetext>Thank you!

(In reply to comment #10)
&gt; &gt; Source/WebCore/platform/text/LocalizedNumberICU.cpp:142
&gt; &gt; +template &lt;class StringType&gt; bool matches(const String&amp; text, unsigned position, const StringType&amp; part)
&gt; 
&gt; Can be static or ALWAYS_INLINE to save namespace pollution?

I added static.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126452</attachid>
            <date>2012-02-09 22:12:21 -0800</date>
            <delta_ts>2012-02-09 22:59:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78326-20120210151219.patch</filename>
            <type>text/plain</type>
            <size>21178</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3Mjk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzkyNDIwZWUwNTUyZWIw
YzVkYmEzMWRmNGE2MTc0ZGQ4NDZlM2E0Yi4uOTYzNTFmMDZhNDZkYjY2ZWRjZmY2OWYzY2VjZmY2
MjE2ODVhOTdhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEyLTAyLTA5ICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBEbyBub3QgcmVmb3JtYXQg
c3RyaW5ncyBpbiA8aW5wdXQgdHlwZT1udW1iZXI+IG9uIHBsYXRmb3JtcyB1c2luZyBMb2NhbGl6
ZWROdW1iZXJJQ1UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03ODMyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFdlIGhhZCBidXNzIHN1Y2ggYXMgc3RyaXBwaW5nIGxlYWRpbmcgemVyb3MsIGRyb3BwaW5n
IGxvd2VyIGRpZ2l0cworICAgICAgICBvZiBsYXJnZSBudW1iZXJzIGJlY2F1c2Ugd2UgcGFyc2Ug
YSB1c2VyLWlucHV0IHN0cmluZyB0byBhIGRvdWJsZQorICAgICAgICB2YWx1ZSwgYW5kIGdlbmVy
YXRlIGEgc3RyaW5nIGZyb20gdGhlIGRvdWJsZSB2YWx1ZS4KKworICAgICAgICBJbiBvcmRlciB0
byBhdm9pZCBzdWNoIHJlZm9ybWF0dGluZywgd2UgY29udmVydHMgbnVtYmVyIHN0cmluZ3MgYnkK
KyAgICAgICAgcmVwbGFjaW5nIHN0YW5kYXJkIGRpZ2l0cyB0byBjb3JyZXNwb25kaW5nIGxvY2Fs
aXplZCBkaWdpdHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZGVkIExvY2FsaXplZE51
bWJlcklDVS5oCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWROdW1iZXJJQ1UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SUNVTG9jYWxlOjpJQ1VMb2NhbGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OklDVUxvY2FsZTo6Y3JlYXRlKTogQSB0ZXN0aW5nIGZhY3RvcnkgZnVuY3Rp
b24uCisgICAgICAgIChXZWJDb3JlOjpJQ1VMb2NhbGU6OmNyZWF0ZUZvckN1cnJlbnRMb2NhbGUp
OiBBIHByYWN0aWNhbCBmYWN0b3J5IGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6SUNVTG9j
YWxlOjpzZXREZWNpbWFsU3ltYm9sKTogSW5pdGlhbGl6ZSBhIHN5bWJvbCB0YWJsZS4KKyAgICAg
ICAgKFdlYkNvcmU6OklDVUxvY2FsZTo6aW5pdGlhbGl6ZURlY2ltYWxGb3JtYXQpOiBJbml0aWFs
aXplIElDVSBEZWNpbWFsRm9ybWF0LgorICAgICAgICAoV2ViQ29yZTo6SUNVTG9jYWxlOjpjb252
ZXJ0VG9Mb2NhbGl6ZWROdW1iZXIpOgorICAgICAgICAgUmVwbGFjZSBjaGFyYWN0ZXJzIHRvIGNv
cnJlc3BvbmRpbmcgbG9jYWxpemVkIGNoYXJhY3RlcnMuCisgICAgICAgIChXZWJDb3JlOjptYXRj
aGVzKTogQSBoZWxwZXIgZnVuY3Rpb24gZm9yIGNvbnZlcnRGcm9tTG9jYWxpemVkTnVtYmVyLgor
ICAgICAgICAoV2ViQ29yZTo6SUNVTG9jYWxlOjpjb252ZXJ0RnJvbUxvY2FsaXplZE51bWJlcik6
CisgICAgICAgICBSZXBsYWNlIGNoYXJhY3RlcnMgdG8gY29ycmVzcG9uZGluZyBzdGFuZGFyZCBj
aGFyYWN0ZXJzLgorICAgICAgICAoV2ViQ29yZTo6Y3VycmVudExvY2FsZSk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Y29udmVydFRvTG9jYWxpemVkTnVtYmVyKTogVXNlcyBJQ1VMb2NhbGU6
OmNvbnZlcnRUb0xvY2FsaXplZE51bWJlci4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRGcm9t
TG9jYWxpemVkTnVtYmVyKTogVXNlcyBJQ1VMb2NhbGU6OmNvbnZlcnRGcm9tTG9jYWxpemVkTnVt
YmVyLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvTG9jYWxpemVkTnVtYmVySUNVLmg6IEFkZGVk
LgorICAgICAgICAoSUNVTG9jYWxlKTogQWRkZWQuIFRoaXMgaXMgZXhwb3NlZCB0byBXZWJLaXQv
Y2hyb21pdW0vdGVzdHMvTG9jYWxpemVkTnVtYmVySUNVVGVzdC5jcHAuCisKIDIwMTItMDItMDkg
IEpvaG4gQmF0ZXMgIDxqYmF0ZXNAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbQ2hyb21pdW1dIEFk
ZCBjaHJvbWl1bS1zdHlsZSB0cmFjaW5nIHN1cHBvcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
aW5kZXggYzRjYTRjMGVlYWJmNDI0MDc1YWY5NmQxYjA5YmE4ZjJiNGM3MjA4Yy4uM2ZjMGNjYWFj
NjEzMjdhZjgzNzc4MzU2ZGY5Y2I4OTY4OTU1OWI0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMi0wOSAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgRG8gbm90IHJlZm9ybWF0IHN0cmluZ3MgaW4gPGlucHV0IHR5
cGU9bnVtYmVyPiBvbiBwbGF0Zm9ybXMgdXNpbmcgTG9jYWxpemVkTnVtYmVySUNVLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzgzMjYKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSB0ZXN0IGZvciBX
ZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxpemVkTnVtYmVySUNVLgorCisgICAgICAgICogV2Vi
S2l0Lmd5cGk6IEFkZGVkIExvY2FsaXplZE51bWJlcklDVVRlc3QuY3BwCisgICAgICAgICogdGVz
dHMvTG9jYWxpemVkTnVtYmVySUNVVGVzdC5jcHA6IEFkZGVkLgorCiAyMDEyLTAyLTA5ICBKb2hu
IEJhdGVzICA8amJhdGVzQGdvb2dsZS5jb20+CiAKICAgICAgICAgW0Nocm9taXVtXSBBZGQgY2hy
b21pdW0tc3R5bGUgdHJhY2luZyBzdXBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOTBjZDhlMTQ4
ZTY2OWFlZmMzYTI1ZTE4OGNlZTQ2YmRhZThmNjVmMS4uMjA4OWIzNGM0NmM2ODg2ZDRjYmU5NWFh
OTg4NDc4OGQ0MWNjYjc4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDA2Miw2ICs0MDYyLDcgQEAK
ICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L0xvY2FsaXplZERhdGVOb25lLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWROdW1iZXIuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWROdW1iZXJJQ1UuY3BwJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS90ZXh0L0xvY2FsaXplZE51bWJlcklDVS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90
ZXh0L0xvY2FsaXplZE51bWJlck5vbmUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0
L1BhcnNlclV0aWxpdGllcy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L1F1b3RlZFBy
aW50YWJsZS5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9j
YWxpemVkTnVtYmVySUNVLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxp
emVkTnVtYmVySUNVLmNwcAppbmRleCAwM2RiNGQ1NDYyODlmMTQ3ZDhmOTU3OGMxNWZlOWQzYWE3
OWMwOTc1Li45NmMwZGM2YmZlMzk0YmUzMWE0MjQ1ZjFlYzg1ZGZhZTE2M2Y0NGVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsaXplZE51bWJlcklDVS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWROdW1iZXJJQ1UuY3Bw
CkBAIC0zMCwxMDYgKzMwLDIwNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
TG9jYWxpemVkTnVtYmVyLmgiCisjaW5jbHVkZSAiTG9jYWxpemVkTnVtYmVySUNVLmgiCiAKLSNp
bmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8dW5pY29kZS9kZWNpbWZtdC5oPgogI2luY2x1ZGUg
PHVuaWNvZGUvbnVtZm10Lmg+Ci0jaW5jbHVkZSA8dW5pY29kZS9wYXJzZXBvcy5oPgotI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9kdG9hLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgaWN1OwotdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgUGFzc093blB0
cjxOdW1iZXJGb3JtYXQ+IGNyZWF0ZUZvcm1hdHRlckZvckN1cnJlbnRMb2NhbGUoKQorSUNVTG9j
YWxlOjpJQ1VMb2NhbGUoY29uc3QgTG9jYWxlJiBsb2NhbGUpCisgICAgOiBtX2xvY2FsZShsb2Nh
bGUpCisgICAgLCBtX2RpZENyZWF0ZURlY2ltYWxGb3JtYXQoZmFsc2UpCiB7Ci0gICAgVUVycm9y
Q29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgT3duUHRyPE51bWJlckZvcm1hdD4gZm9y
bWF0dGVyID0gYWRvcHRQdHIoTnVtYmVyRm9ybWF0OjpjcmVhdGVJbnN0YW5jZShzdGF0dXMpKTsK
LSAgICByZXR1cm4gVV9TVUNDRVNTKHN0YXR1cykgPyBmb3JtYXR0ZXIucmVsZWFzZSgpIDogbnVs
bHB0cjsKIH0KIAotc3RhdGljIFBhc3NPd25QdHI8TnVtYmVyRm9ybWF0PiBjcmVhdGVGb3JtYXR0
ZXJGb3JDdXJyZW50TG9jYWxlVG9EaXNwbGF5KCkKK1Bhc3NPd25QdHI8SUNVTG9jYWxlPiBJQ1VM
b2NhbGU6OmNyZWF0ZShjb25zdCBjaGFyKiBsb2NhbGVTdHJpbmcpCiB7Ci0gICAgT3duUHRyPE51
bWJlckZvcm1hdD4gZm9ybWF0dGVyKGNyZWF0ZUZvcm1hdHRlckZvckN1cnJlbnRMb2NhbGUoKSk7
Ci0gICAgaWYgKCFmb3JtYXR0ZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgZm9y
bWF0dGVyLT5zZXRHcm91cGluZ1VzZWQoRkFMU0UpOwotICAgIHJldHVybiBmb3JtYXR0ZXIucmVs
ZWFzZSgpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgSUNVTG9jYWxlKExvY2FsZTo6Y3JlYXRl
Q2Fub25pY2FsKGxvY2FsZVN0cmluZykpKTsKIH0KIAotLy8gVGhpcyBtaWdodCByZXR1cm4gMC4K
LXN0YXRpYyBOdW1iZXJGb3JtYXQqIG51bWJlckZvcm1hdHRlckZvclBhcnNpbmcoKQorUGFzc093
blB0cjxJQ1VMb2NhbGU+IElDVUxvY2FsZTo6Y3JlYXRlRm9yQ3VycmVudExvY2FsZSgpCiB7Ci0g
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBzdGF0aWMgTnVtYmVyRm9ybWF0KiBmb3Jt
YXR0ZXIgPSBjcmVhdGVGb3JtYXR0ZXJGb3JDdXJyZW50TG9jYWxlKCkubGVha1B0cigpOwotICAg
IHJldHVybiBmb3JtYXR0ZXI7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJQ1VMb2NhbGUoTG9j
YWxlOjpnZXREZWZhdWx0KCkpKTsKIH0KIAotLy8gVGhpcyBtaWdodCByZXR1cm4gMC4KLXN0YXRp
YyBOdW1iZXJGb3JtYXQqIG51bWJlckZvcm1hdHRlckZvckRpc3BsYXkoKQordm9pZCBJQ1VMb2Nh
bGU6OnNldERlY2ltYWxTeW1ib2wodW5zaWduZWQgaW5kZXgsIERlY2ltYWxGb3JtYXRTeW1ib2xz
OjpFTnVtYmVyRm9ybWF0U3ltYm9sIHN5bWJvbCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotICAgIHN0YXRpYyBOdW1iZXJGb3JtYXQqIGZvcm1hdHRlciA9IGNyZWF0ZUZvcm1hdHRl
ckZvckN1cnJlbnRMb2NhbGVUb0Rpc3BsYXkoKS5sZWFrUHRyKCk7Ci0gICAgcmV0dXJuIGZvcm1h
dHRlcjsKKyAgICBVbmljb2RlU3RyaW5nIHVzdHJpbmcgPSBtX2RlY2ltYWxGb3JtYXQtPmdldERl
Y2ltYWxGb3JtYXRTeW1ib2xzKCktPmdldFN5bWJvbChzeW1ib2wpOworICAgIG1fZGVjaW1hbFN5
bWJvbHNbaW5kZXhdID0gU3RyaW5nKHVzdHJpbmcuZ2V0QnVmZmVyKCksIHVzdHJpbmcubGVuZ3Ro
KCkpOwogfQogCi1zdGF0aWMgZG91YmxlIHBhcnNlTG9jYWxpemVkTnVtYmVyKGNvbnN0IFN0cmlu
ZyYgbnVtYmVyU3RyaW5nKQordm9pZCBJQ1VMb2NhbGU6OmluaXRpYWxpemVEZWNpbWFsRm9ybWF0
KCkKIHsKLSAgICBpZiAobnVtYmVyU3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51
bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgIE51bWJlckZvcm1hdCogZm9y
bWF0dGVyID0gbnVtYmVyRm9ybWF0dGVyRm9yUGFyc2luZygpOwotICAgIGlmICghZm9ybWF0dGVy
KQotICAgICAgICByZXR1cm4gbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0g
ICAgVW5pY29kZVN0cmluZyBudW1iZXJVbmljb2RlU3RyaW5nKG51bWJlclN0cmluZy5jaGFyYWN0
ZXJzKCksIG51bWJlclN0cmluZy5sZW5ndGgoKSk7Ci0gICAgRm9ybWF0dGFibGUgcmVzdWx0Owot
ICAgIFBhcnNlUG9zaXRpb24gcG9zaXRpb24oMCk7Ci0gICAgZm9ybWF0dGVyLT5wYXJzZShudW1i
ZXJVbmljb2RlU3RyaW5nLCByZXN1bHQsIHBvc2l0aW9uKTsKLSAgICBpZiAocG9zaXRpb24uZ2V0
SW5kZXgoKSAhPSBudW1iZXJVbmljb2RlU3RyaW5nLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4g
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgaWYgKG1fZGlkQ3JlYXRl
RGVjaW1hbEZvcm1hdCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZGlkQ3JlYXRlRGVjaW1hbEZv
cm1hdCA9IHRydWU7CiAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAg
ZG91YmxlIG51bWVyaWNSZXN1bHQgPSByZXN1bHQuZ2V0RG91YmxlKHN0YXR1cyk7Ci0gICAgcmV0
dXJuIFVfU1VDQ0VTUyhzdGF0dXMpID8gbnVtZXJpY1Jlc3VsdCA6IG51bWVyaWNfbGltaXRzPGRv
dWJsZT46OnF1aWV0X05hTigpOworICAgIE51bWJlckZvcm1hdCogZm9ybWF0ID0gTnVtYmVyRm9y
bWF0OjpjcmVhdGVJbnN0YW5jZShtX2xvY2FsZSwgTnVtYmVyRm9ybWF0OjprTnVtYmVyU3R5bGUs
IHN0YXR1cyk7CisgICAgaWYgKCFVX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fZGVjaW1hbEZvcm1hdCA9IGFkb3B0UHRyKHN0YXRpY19jYXN0PERlY2ltYWxGb3JtYXQq
Pihmb3JtYXQpKTsKKworICAgIHNldERlY2ltYWxTeW1ib2woMCwgRGVjaW1hbEZvcm1hdFN5bWJv
bHM6OmtaZXJvRGlnaXRTeW1ib2wpOworICAgIHNldERlY2ltYWxTeW1ib2woMSwgRGVjaW1hbEZv
cm1hdFN5bWJvbHM6OmtPbmVEaWdpdFN5bWJvbCk7CisgICAgc2V0RGVjaW1hbFN5bWJvbCgyLCBE
ZWNpbWFsRm9ybWF0U3ltYm9sczo6a1R3b0RpZ2l0U3ltYm9sKTsKKyAgICBzZXREZWNpbWFsU3lt
Ym9sKDMsIERlY2ltYWxGb3JtYXRTeW1ib2xzOjprVGhyZWVEaWdpdFN5bWJvbCk7CisgICAgc2V0
RGVjaW1hbFN5bWJvbCg0LCBEZWNpbWFsRm9ybWF0U3ltYm9sczo6a0ZvdXJEaWdpdFN5bWJvbCk7
CisgICAgc2V0RGVjaW1hbFN5bWJvbCg1LCBEZWNpbWFsRm9ybWF0U3ltYm9sczo6a0ZpdmVEaWdp
dFN5bWJvbCk7CisgICAgc2V0RGVjaW1hbFN5bWJvbCg2LCBEZWNpbWFsRm9ybWF0U3ltYm9sczo6
a1NpeERpZ2l0U3ltYm9sKTsKKyAgICBzZXREZWNpbWFsU3ltYm9sKDcsIERlY2ltYWxGb3JtYXRT
eW1ib2xzOjprU2V2ZW5EaWdpdFN5bWJvbCk7CisgICAgc2V0RGVjaW1hbFN5bWJvbCg4LCBEZWNp
bWFsRm9ybWF0U3ltYm9sczo6a0VpZ2h0RGlnaXRTeW1ib2wpOworICAgIHNldERlY2ltYWxTeW1i
b2woOSwgRGVjaW1hbEZvcm1hdFN5bWJvbHM6OmtOaW5lRGlnaXRTeW1ib2wpOworICAgIHNldERl
Y2ltYWxTeW1ib2woRGVjaW1hbFNlcGFyYXRvckluZGV4LCBEZWNpbWFsRm9ybWF0U3ltYm9sczo6
a0RlY2ltYWxTZXBhcmF0b3JTeW1ib2wpOworICAgIHNldERlY2ltYWxTeW1ib2woR3JvdXBTZXBh
cmF0b3JJbmRleCwgRGVjaW1hbEZvcm1hdFN5bWJvbHM6OmtHcm91cGluZ1NlcGFyYXRvclN5bWJv
bCk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgZm9ybWF0TG9jYWxpemVkTnVtYmVyKGRvdWJsZSBudW1i
ZXIsIHVuc2lnbmVkIGZyYWN0aW9uRGlnaXRzKQorU3RyaW5nIElDVUxvY2FsZTo6Y29udmVydFRv
TG9jYWxpemVkTnVtYmVyKGNvbnN0IFN0cmluZyYgaW5wdXQpCiB7Ci0gICAgTnVtYmVyRm9ybWF0
KiBmb3JtYXR0ZXIgPSBudW1iZXJGb3JtYXR0ZXJGb3JEaXNwbGF5KCk7Ci0gICAgaWYgKCFmb3Jt
YXR0ZXIpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBVbmljb2RlU3RyaW5nIHJlc3Vs
dDsKLSAgICBmb3JtYXR0ZXItPnNldE1heGltdW1GcmFjdGlvbkRpZ2l0cyhjbGFtcFRvSW50ZWdl
cihmcmFjdGlvbkRpZ2l0cykpOwotICAgIGZvcm1hdHRlci0+Zm9ybWF0KG51bWJlciwgcmVzdWx0
KTsKLSAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5nZXRCdWZmZXIoKSwgcmVzdWx0Lmxlbmd0aCgp
KTsKKyAgICBpbml0aWFsaXplRGVjaW1hbEZvcm1hdCgpOworICAgIGlmICghbV9kZWNpbWFsRm9y
bWF0IHx8IGlucHV0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGlucHV0OworCisgICAgdW5z
aWduZWQgaSA9IDA7CisgICAgYm9vbCBpc05lZ2F0aXZlID0gZmFsc2U7CisgICAgVW5pY29kZVN0
cmluZyB1c3RyaW5nOworCisgICAgaWYgKGlucHV0WzBdID09ICctJykgeworICAgICAgICArK2k7
CisgICAgICAgIGlzTmVnYXRpdmUgPSB0cnVlOworICAgICAgICBtX2RlY2ltYWxGb3JtYXQtPmdl
dE5lZ2F0aXZlUHJlZml4KHVzdHJpbmcpOworICAgIH0gZWxzZQorICAgICAgICBtX2RlY2ltYWxG
b3JtYXQtPmdldFBvc2l0aXZlUHJlZml4KHVzdHJpbmcpOworICAgIFN0cmluZ0J1aWxkZXIgYnVp
bGRlcjsKKyAgICBidWlsZGVyLnJlc2VydmVDYXBhY2l0eShpbnB1dC5sZW5ndGgoKSk7CisgICAg
YnVpbGRlci5hcHBlbmQodXN0cmluZy5nZXRCdWZmZXIoKSwgdXN0cmluZy5sZW5ndGgoKSk7CisK
KyAgICBmb3IgKDsgaSA8IGlucHV0Lmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgc3dpdGNoIChp
bnB1dFtpXSkgeworICAgICAgICBjYXNlICcwJzoKKyAgICAgICAgY2FzZSAnMSc6CisgICAgICAg
IGNhc2UgJzInOgorICAgICAgICBjYXNlICczJzoKKyAgICAgICAgY2FzZSAnNCc6CisgICAgICAg
IGNhc2UgJzUnOgorICAgICAgICBjYXNlICc2JzoKKyAgICAgICAgY2FzZSAnNyc6CisgICAgICAg
IGNhc2UgJzgnOgorICAgICAgICBjYXNlICc5JzoKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KG1fZGVjaW1hbFN5bWJvbHNbaW5wdXRbaV0gLSAnMCddKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlICcuJzoKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1fZGVjaW1hbFN5
bWJvbHNbRGVjaW1hbFNlcGFyYXRvckluZGV4XSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKGlzTmVnYXRpdmUpCisgICAgICAgIG1fZGVjaW1hbEZvcm1hdC0+
Z2V0TmVnYXRpdmVTdWZmaXgodXN0cmluZyk7CisgICAgZWxzZQorICAgICAgICBtX2RlY2ltYWxG
b3JtYXQtPmdldFBvc2l0aXZlU3VmZml4KHVzdHJpbmcpOworICAgIGJ1aWxkZXIuYXBwZW5kKHVz
dHJpbmcuZ2V0QnVmZmVyKCksIHVzdHJpbmcubGVuZ3RoKCkpOworCisgICAgcmV0dXJuIGJ1aWxk
ZXIudG9TdHJpbmcoKTsKIH0KIAotU3RyaW5nIGNvbnZlcnRUb0xvY2FsaXplZE51bWJlcihjb25z
dCBTdHJpbmcmIGNhbm9uaWNhbE51bWJlclN0cmluZywgdW5zaWduZWQgZnJhY3Rpb25EaWdpdHMp
Cit0ZW1wbGF0ZSA8Y2xhc3MgU3RyaW5nVHlwZT4gYm9vbCBtYXRjaGVzKGNvbnN0IFN0cmluZyYg
dGV4dCwgdW5zaWduZWQgcG9zaXRpb24sIGNvbnN0IFN0cmluZ1R5cGUmIHBhcnQpCiB7Ci0gICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBub3QgZG8gcGFyc2UtdGhlbi1mb3JtYXQuIEl0IG1ha2VzIHNv
bWUKLSAgICAvLyBwcm9ibGVtcyBzdWNoIGFzIHJlbW92aW5nIGxlYWRpbmcgemVyb3MsIGNoYW5n
aW5nIHRyYWlsaW5nCi0gICAgLy8gZGlnaXRzIHRvIHplcm9zLgotICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgbm90IHVzZSB0aGUgZnJhY3Rpb25EaWdpdHMgYXJndW1lbnQuCisgICAgaWYgKHBhcnQu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAocG9zaXRpb24gKyBwYXJ0
Lmxlbmd0aCgpID4gdGV4dC5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocGFydC5sZW5ndGgo
KSk7ICsraSkgeworICAgICAgICBpZiAodGV4dFtwb3NpdGlvbiArIGldICE9IHBhcnRbaV0pCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQogCi0g
ICAgZG91YmxlIGRvdWJsZVZhbHVlID0gY2Fub25pY2FsTnVtYmVyU3RyaW5nLnRvRG91YmxlKCk7
Ci0gICAgLy8gVGhlIGlucHV0IHN0cmluZyBtdXN0IGJlIHZhbGlkLgotICAgIHJldHVybiBmb3Jt
YXRMb2NhbGl6ZWROdW1iZXIoZG91YmxlVmFsdWUsIGZyYWN0aW9uRGlnaXRzKTsKK1N0cmluZyBJ
Q1VMb2NhbGU6OmNvbnZlcnRGcm9tTG9jYWxpemVkTnVtYmVyKGNvbnN0IFN0cmluZyYgbG9jYWxp
emVkKQoreworICAgIGluaXRpYWxpemVEZWNpbWFsRm9ybWF0KCk7CisgICAgU3RyaW5nIGlucHV0
ID0gbG9jYWxpemVkLnN0cmlwV2hpdGVTcGFjZSgpOworICAgIGlmICghbV9kZWNpbWFsRm9ybWF0
IHx8IGlucHV0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGlucHV0OworCisgICAgYm9vbCBp
c05lZ2F0aXZlOworICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXggPSAwOworICAgIHVuc2lnbmVkIGVu
ZEluZGV4ID0gaW5wdXQubGVuZ3RoKCk7CisgICAgVW5pY29kZVN0cmluZyBwcmVmaXg7CisgICAg
bV9kZWNpbWFsRm9ybWF0LT5nZXROZWdhdGl2ZVByZWZpeChwcmVmaXgpOworICAgIFVuaWNvZGVT
dHJpbmcgc3VmZml4OworICAgIG1fZGVjaW1hbEZvcm1hdC0+Z2V0TmVnYXRpdmVTdWZmaXgoc3Vm
Zml4KTsKKyAgICBpZiAocHJlZml4LmlzRW1wdHkoKSAmJiBzdWZmaXguaXNFbXB0eSgpKSB7Cisg
ICAgICAgIG1fZGVjaW1hbEZvcm1hdC0+Z2V0UG9zaXRpdmVQcmVmaXgocHJlZml4KTsKKyAgICAg
ICAgbV9kZWNpbWFsRm9ybWF0LT5nZXRQb3NpdGl2ZVN1ZmZpeChzdWZmaXgpOworICAgICAgICBB
U1NFUlQoIShwcmVmaXguaXNFbXB0eSgpICYmIHN1ZmZpeC5pc0VtcHR5KCkpKTsKKyAgICAgICAg
aWYgKG1hdGNoZXMoaW5wdXQsIDAsIHByZWZpeCkgJiYgbWF0Y2hlcyhpbnB1dCwgZW5kSW5kZXgg
LSBzdWZmaXgubGVuZ3RoKCksIHN1ZmZpeCkpIHsKKyAgICAgICAgICAgIGlzTmVnYXRpdmUgPSBm
YWxzZTsKKyAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBwcmVmaXgubGVuZ3RoKCk7CisgICAgICAg
ICAgICBlbmRJbmRleCAtPSBzdWZmaXgubGVuZ3RoKCk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgaXNOZWdhdGl2ZSA9IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1hdGNo
ZXMoaW5wdXQsIDAsIHByZWZpeCkgJiYgbWF0Y2hlcyhpbnB1dCwgZW5kSW5kZXggLSBzdWZmaXgu
bGVuZ3RoKCksIHN1ZmZpeCkpIHsKKyAgICAgICAgICAgIGlzTmVnYXRpdmUgPSB0cnVlOworICAg
ICAgICAgICAgc3RhcnRJbmRleCA9IHByZWZpeC5sZW5ndGgoKTsKKyAgICAgICAgICAgIGVuZElu
ZGV4IC09IHN1ZmZpeC5sZW5ndGgoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlz
TmVnYXRpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fZGVjaW1hbEZvcm1hdC0+Z2V0UG9zaXRp
dmVQcmVmaXgocHJlZml4KTsKKyAgICAgICAgICAgIG1fZGVjaW1hbEZvcm1hdC0+Z2V0UG9zaXRp
dmVTdWZmaXgoc3VmZml4KTsKKyAgICAgICAgICAgIGlmIChtYXRjaGVzKGlucHV0LCAwLCBwcmVm
aXgpICYmIG1hdGNoZXMoaW5wdXQsIGVuZEluZGV4IC0gc3VmZml4Lmxlbmd0aCgpLCBzdWZmaXgp
KSB7CisgICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IHByZWZpeC5sZW5ndGgoKTsKKyAgICAg
ICAgICAgICAgICBlbmRJbmRleCAtPSBzdWZmaXgubGVuZ3RoKCk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIC8vIElucHV0IGlzIGJyb2tlbi4gUmV0dXJuaW5nIGFuIGlu
dmFsaWQgbnVtYmVyIHN0cmluZy4KKyAgICAgICAgICAgICAgICByZXR1cm4gIioiOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAg
ICBidWlsZGVyLnJlc2VydmVDYXBhY2l0eShpbnB1dC5sZW5ndGgoKSk7CisgICAgaWYgKGlzTmVn
YXRpdmUpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCItIik7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gc3RhcnRJbmRleDsgaSA8IGVuZEluZGV4OykgeworICAgICAgICB1bnNpZ25lZCBzeW1ib2xJ
bmRleCA9IDA7CisgICAgICAgIGZvciAoOyBzeW1ib2xJbmRleCA8IERlY2ltYWxTeW1ib2xzU2l6
ZTsgKytzeW1ib2xJbmRleCkgeworICAgICAgICAgICAgaWYgKG1fZGVjaW1hbFN5bWJvbHNbc3lt
Ym9sSW5kZXhdLmxlbmd0aCgpICYmIG1hdGNoZXMoaW5wdXQsIGksIG1fZGVjaW1hbFN5bWJvbHNb
c3ltYm9sSW5kZXhdKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoc3ltYm9sSW5kZXggPj0gRGVjaW1hbFN5bWJvbHNTaXplKQorICAgICAgICAgICAgcmV0
dXJuICIqIjsKKyAgICAgICAgaWYgKHN5bWJvbEluZGV4ID09IERlY2ltYWxTZXBhcmF0b3JJbmRl
eCkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcuJyk7CisgICAgICAgIGVsc2UgaWYgKHN5
bWJvbEluZGV4ID09IEdyb3VwU2VwYXJhdG9ySW5kZXgpIHsKKyAgICAgICAgICAgIC8vIElnbm9y
ZSBncm91cCBzZXBhcmF0b3JzLgorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPignMCcgKyBzeW1ib2xJbmRleCkpOworICAgICAgICBp
ICs9IG1fZGVjaW1hbFN5bWJvbHNbc3ltYm9sSW5kZXhdLmxlbmd0aCgpOworICAgIH0KKyAgICBy
ZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQogCitzdGF0aWMgSUNVTG9jYWxlKiBjdXJyZW50
TG9jYWxlKCkKK3sKKyAgICBzdGF0aWMgSUNVTG9jYWxlKiBjdXJyZW50SUNVTG9jYWxlID0gSUNV
TG9jYWxlOjpjcmVhdGVGb3JDdXJyZW50TG9jYWxlKCkubGVha1B0cigpOworICAgIHJldHVybiBj
dXJyZW50SUNVTG9jYWxlOworfQorCitTdHJpbmcgY29udmVydFRvTG9jYWxpemVkTnVtYmVyKGNv
bnN0IFN0cmluZyYgY2Fub25pY2FsTnVtYmVyU3RyaW5nLCB1bnNpZ25lZCBmcmFjdGlvbkRpZ2l0
cykKK3sKKyAgICByZXR1cm4gY3VycmVudExvY2FsZSgpLT5jb252ZXJ0VG9Mb2NhbGl6ZWROdW1i
ZXIoY2Fub25pY2FsTnVtYmVyU3RyaW5nKTsKIH0KIAogU3RyaW5nIGNvbnZlcnRGcm9tTG9jYWxp
emVkTnVtYmVyKGNvbnN0IFN0cmluZyYgbG9jYWxpemVkTnVtYmVyU3RyaW5nKQogewotICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgbm90IGRvIHBhcnNlLXRoZW4tZm9ybWF0LiBJdCBtYWtlcyBzb21l
Ci0gICAgLy8gcHJvYmxlbXMgc3VjaCBhcyByZW1vdmluZyBsZWFkaW5nIHplcm9zLCBjaGFuZ2lu
ZyB0cmFpbGluZwotICAgIC8vIGRpZ2l0cyB0byB6ZXJvcy4KLQotICAgIGRvdWJsZSBkb3VibGVW
YWx1ZSA9IHBhcnNlTG9jYWxpemVkTnVtYmVyKGxvY2FsaXplZE51bWJlclN0cmluZyk7Ci0gICAg
aWYgKCFpc2Zpbml0ZShkb3VibGVWYWx1ZSkpCi0gICAgICAgIHJldHVybiBsb2NhbGl6ZWROdW1i
ZXJTdHJpbmc7Ci0gICAgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyOwotICAgIHJldHVybiBT
dHJpbmcobnVtYmVyVG9TdHJpbmcoZG91YmxlVmFsdWUsIGJ1ZmZlcikpOworICAgIHJldHVybiBj
dXJyZW50TG9jYWxlKCktPmNvbnZlcnRGcm9tTG9jYWxpemVkTnVtYmVyKGxvY2FsaXplZE51bWJl
clN0cmluZyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxpemVkTnVtYmVySUNVLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsaXplZE51bWJlcklDVS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5ZWE4
MjA2ZTU5ODY3MjhlNjRjN2NkZWU4NGZhODBmNjg0Y2IxYzgKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsaXplZE51bWJlcklDVS5oCkBAIC0wLDAg
KzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIExvY2FsaXplZE51bWJlcklDVV9oCisjZGVmaW5lIExvY2FsaXplZE51
bWJlcklDVV9oCisKKyNpbmNsdWRlIDx1bmljb2RlL2RlY2ltZm10Lmg+CisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gV2Ugc2hvdWxkIHVzZSB0
aGlzIGNsYXNzIG9ubHkgZm9yIExvY2FsaXplZE51bWJlcklDVS5jcHAgYW5kIExvY2FsaXplZE51
bWJlcklDVVRlc3QuY3BwLgorY2xhc3MgSUNVTG9jYWxlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxJQ1VMb2NhbGU+IGNyZWF0ZShjb25zdCBjaGFyKiBsb2NhbGVTdHJpbmcpOwor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPElDVUxvY2FsZT4gY3JlYXRlRm9yQ3VycmVudExvY2FsZSgp
OworICAgIFN0cmluZyBjb252ZXJ0VG9Mb2NhbGl6ZWROdW1iZXIoY29uc3QgU3RyaW5nJik7Cisg
ICAgU3RyaW5nIGNvbnZlcnRGcm9tTG9jYWxpemVkTnVtYmVyKGNvbnN0IFN0cmluZyYpOworCitw
cml2YXRlOgorICAgIElDVUxvY2FsZShjb25zdCBpY3U6OkxvY2FsZSYpOworICAgIHZvaWQgc2V0
RGVjaW1hbFN5bWJvbCh1bnNpZ25lZCBpbmRleCwgaWN1OjpEZWNpbWFsRm9ybWF0U3ltYm9sczo6
RU51bWJlckZvcm1hdFN5bWJvbCk7CisgICAgdm9pZCBpbml0aWFsaXplRGVjaW1hbEZvcm1hdCgp
OworCisgICAgaWN1OjpMb2NhbGUgbV9sb2NhbGU7CisgICAgT3duUHRyPGljdTo6RGVjaW1hbEZv
cm1hdD4gbV9kZWNpbWFsRm9ybWF0OworICAgIGVudW0geworICAgICAgICAvLyAwLTkgZm9yIGRp
Z2l0cy4KKyAgICAgICAgRGVjaW1hbFNlcGFyYXRvckluZGV4ID0gMTAsCisgICAgICAgIEdyb3Vw
U2VwYXJhdG9ySW5kZXggPSAxMSwKKyAgICAgICAgRGVjaW1hbFN5bWJvbHNTaXplCisgICAgfTsK
KyAgICBTdHJpbmcgbV9kZWNpbWFsU3ltYm9sc1sxMl07CisgICAgYm9vbCBtX2RpZENyZWF0ZURl
Y2ltYWxGb3JtYXQ7Cit9OworCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CmluZGV4IGM4NTAyZjU3M2M0NTE3MDE3MzU0ODVhZjQ3NTIzZTc1MTI5NGM4M2QuLjU4OGNiMGZh
MDliNGViNjFmZWU1YTM2YzVhODcxNjA5OTRjOGZmMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQpAQCAtMTAwLDYgKzEwMCw3IEBACiAgICAgICAgICAgICAndGVzdHMvS1VSTFRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0xheWVyVGV4dHVyZVVwZGF0ZXJUZXN0LmNwcCcsCisgICAgICAgICAgICAn
dGVzdHMvTG9jYWxpemVkTnVtYmVySUNVVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1Bh
aW50QWdncmVnYXRvclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9QT0RBcmVuYVRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9QT0RJbnRlcnZhbFRyZWVUZXN0LmNwcCcsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xvY2FsaXplZE51bWJlcklDVVRl
c3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Mb2NhbGl6ZWROdW1iZXJJQ1VU
ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yMzhkNmFjMzIxYTI3NDBhZmNiZjMwZmE0ZTI1MzRiMzdiMGNj
Yjc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Mb2Nh
bGl6ZWROdW1iZXJJQ1VUZXN0LmNwcApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiTG9jYWxpemVkTnVtYmVySUNVLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rl
c3QuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKwordm9pZCB0ZXN0TnVtYmVySXNSZXZlcnNpYmxlKGNvbnN0IGNoYXIqIGxvY2FsZVN0
cmluZywgY29uc3QgY2hhciogb3JpZ2luYWwsIGNvbnN0IGNoYXIqIHNob3VsZEhhdmUgPSAwKQor
eworICAgIE93blB0cjxJQ1VMb2NhbGU+IGxvY2FsZSA9IElDVUxvY2FsZTo6Y3JlYXRlKGxvY2Fs
ZVN0cmluZyk7CisgICAgU3RyaW5nIGxvY2FsaXplZCA9IGxvY2FsZS0+Y29udmVydFRvTG9jYWxp
emVkTnVtYmVyKG9yaWdpbmFsKTsKKyAgICBpZiAoc2hvdWxkSGF2ZSkKKyAgICAgICAgRVhQRUNU
X1RSVUUobG9jYWxpemVkLmNvbnRhaW5zKHNob3VsZEhhdmUpKTsKKyAgICBTdHJpbmcgY29udmVy
dGVkID0gbG9jYWxlLT5jb252ZXJ0RnJvbUxvY2FsaXplZE51bWJlcihsb2NhbGl6ZWQpOworICAg
IEVYUEVDVF9FUShvcmlnaW5hbCwgY29udmVydGVkKTsKK30KKwordm9pZCB0ZXN0TnVtYmVycyhj
b25zdCBjaGFyKiBsb2NhbGVTdHJpbmcpCit7CisgICAgdGVzdE51bWJlcklzUmV2ZXJzaWJsZShs
b2NhbGVTdHJpbmcsICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKTsKKyAgICB0ZXN0
TnVtYmVySXNSZXZlcnNpYmxlKGxvY2FsZVN0cmluZywgIi0xMjMuNDU2Iik7CisgICAgdGVzdE51
bWJlcklzUmV2ZXJzaWJsZShsb2NhbGVTdHJpbmcsICIuNDU2Iik7CisgICAgdGVzdE51bWJlcklz
UmV2ZXJzaWJsZShsb2NhbGVTdHJpbmcsICItMC40NTYiKTsKK30KKworVEVTVChMb2NhbGl6ZWRO
dW1iZXJJQ1VUZXN0LCBSZXZlcnNpYmxlKQoreworICAgIHRlc3ROdW1iZXJJc1JldmVyc2libGUo
ImVuX1VTIiwgIjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIpOworICAgIHRlc3ROdW1i
ZXJJc1JldmVyc2libGUoImVuX1VTIiwgIi0xMjMuNDU2IiwgIi4iKTsKKyAgICB0ZXN0TnVtYmVy
SXNSZXZlcnNpYmxlKCJlbl9VUyIsICIuNDU2IiwgIi4iKTsKKyAgICB0ZXN0TnVtYmVySXNSZXZl
cnNpYmxlKCJlbl9VUyIsICItMC40NTYiLCAiLiIpOworCisgICAgdGVzdE51bWJlcklzUmV2ZXJz
aWJsZSgiZnIiLCAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIik7CisgICAgdGVzdE51
bWJlcklzUmV2ZXJzaWJsZSgiZnIiLCAiLTEyMy40NTYiLCAiLCIpOworICAgIHRlc3ROdW1iZXJJ
c1JldmVyc2libGUoImZyIiwgIi40NTYiLCAiLCIpOworICAgIHRlc3ROdW1iZXJJc1JldmVyc2li
bGUoImZyIiwgIi0wLjQ1NiIsICIsIik7CisKKyAgICAvLyBQZXJzaWFuIGxvY2FsZSBoYXMgYSBu
ZWdhdGl2ZSBwcmVmaXggYW5kIGEgbmVnYXRpdmUgc3VmZml4LgorICAgIHRlc3ROdW1iZXJzKCJm
YSIpOworCisgICAgLy8gVGVzdCBzb21lIG9mIG1ham9yIGxvY2FsZXMuCisgICAgdGVzdE51bWJl
cnMoImFyIik7CisgICAgdGVzdE51bWJlcnMoImRlX0RFIik7CisgICAgdGVzdE51bWJlcnMoImVz
X0VTIik7CisgICAgdGVzdE51bWJlcnMoImphX0pQIik7CisgICAgdGVzdE51bWJlcnMoImtvX0tS
Iik7CisgICAgdGVzdE51bWJlcnMoInpoX0NOIik7CisgICAgdGVzdE51bWJlcnMoInpoX0hLIik7
CisgICAgdGVzdE51bWJlcnMoInpoX1RXIik7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126459</attachid>
            <date>2012-02-09 23:00:03 -0800</date>
            <delta_ts>2012-02-16 18:13:23 -0800</delta_ts>
            <desc>Patch 2</desc>
            <filename>bug-78326-20120210160001.patch</filename>
            <type>text/plain</type>
            <size>22730</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3Mjk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzkyNDIwZWUwNTUyZWIw
YzVkYmEzMWRmNGE2MTc0ZGQ4NDZlM2E0Yi4uOTYzNTFmMDZhNDZkYjY2ZWRjZmY2OWYzY2VjZmY2
MjE2ODVhOTdhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEyLTAyLTA5ICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBEbyBub3QgcmVmb3JtYXQg
c3RyaW5ncyBpbiA8aW5wdXQgdHlwZT1udW1iZXI+IG9uIHBsYXRmb3JtcyB1c2luZyBMb2NhbGl6
ZWROdW1iZXJJQ1UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03ODMyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFdlIGhhZCBidXNzIHN1Y2ggYXMgc3RyaXBwaW5nIGxlYWRpbmcgemVyb3MsIGRyb3BwaW5n
IGxvd2VyIGRpZ2l0cworICAgICAgICBvZiBsYXJnZSBudW1iZXJzIGJlY2F1c2Ugd2UgcGFyc2Ug
YSB1c2VyLWlucHV0IHN0cmluZyB0byBhIGRvdWJsZQorICAgICAgICB2YWx1ZSwgYW5kIGdlbmVy
YXRlIGEgc3RyaW5nIGZyb20gdGhlIGRvdWJsZSB2YWx1ZS4KKworICAgICAgICBJbiBvcmRlciB0
byBhdm9pZCBzdWNoIHJlZm9ybWF0dGluZywgd2UgY29udmVydHMgbnVtYmVyIHN0cmluZ3MgYnkK
KyAgICAgICAgcmVwbGFjaW5nIHN0YW5kYXJkIGRpZ2l0cyB0byBjb3JyZXNwb25kaW5nIGxvY2Fs
aXplZCBkaWdpdHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZGVkIExvY2FsaXplZE51
bWJlcklDVS5oCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWROdW1iZXJJQ1UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SUNVTG9jYWxlOjpJQ1VMb2NhbGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OklDVUxvY2FsZTo6Y3JlYXRlKTogQSB0ZXN0aW5nIGZhY3RvcnkgZnVuY3Rp
b24uCisgICAgICAgIChXZWJDb3JlOjpJQ1VMb2NhbGU6OmNyZWF0ZUZvckN1cnJlbnRMb2NhbGUp
OiBBIHByYWN0aWNhbCBmYWN0b3J5IGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6SUNVTG9j
YWxlOjpzZXREZWNpbWFsU3ltYm9sKTogSW5pdGlhbGl6ZSBhIHN5bWJvbCB0YWJsZS4KKyAgICAg
ICAgKFdlYkNvcmU6OklDVUxvY2FsZTo6aW5pdGlhbGl6ZURlY2ltYWxGb3JtYXQpOiBJbml0aWFs
aXplIElDVSBEZWNpbWFsRm9ybWF0LgorICAgICAgICAoV2ViQ29yZTo6SUNVTG9jYWxlOjpjb252
ZXJ0VG9Mb2NhbGl6ZWROdW1iZXIpOgorICAgICAgICAgUmVwbGFjZSBjaGFyYWN0ZXJzIHRvIGNv
cnJlc3BvbmRpbmcgbG9jYWxpemVkIGNoYXJhY3RlcnMuCisgICAgICAgIChXZWJDb3JlOjptYXRj
aGVzKTogQSBoZWxwZXIgZnVuY3Rpb24gZm9yIGNvbnZlcnRGcm9tTG9jYWxpemVkTnVtYmVyLgor
ICAgICAgICAoV2ViQ29yZTo6SUNVTG9jYWxlOjpjb252ZXJ0RnJvbUxvY2FsaXplZE51bWJlcik6
CisgICAgICAgICBSZXBsYWNlIGNoYXJhY3RlcnMgdG8gY29ycmVzcG9uZGluZyBzdGFuZGFyZCBj
aGFyYWN0ZXJzLgorICAgICAgICAoV2ViQ29yZTo6Y3VycmVudExvY2FsZSk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Y29udmVydFRvTG9jYWxpemVkTnVtYmVyKTogVXNlcyBJQ1VMb2NhbGU6
OmNvbnZlcnRUb0xvY2FsaXplZE51bWJlci4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRGcm9t
TG9jYWxpemVkTnVtYmVyKTogVXNlcyBJQ1VMb2NhbGU6OmNvbnZlcnRGcm9tTG9jYWxpemVkTnVt
YmVyLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvTG9jYWxpemVkTnVtYmVySUNVLmg6IEFkZGVk
LgorICAgICAgICAoSUNVTG9jYWxlKTogQWRkZWQuIFRoaXMgaXMgZXhwb3NlZCB0byBXZWJLaXQv
Y2hyb21pdW0vdGVzdHMvTG9jYWxpemVkTnVtYmVySUNVVGVzdC5jcHAuCisKIDIwMTItMDItMDkg
IEpvaG4gQmF0ZXMgIDxqYmF0ZXNAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbQ2hyb21pdW1dIEFk
ZCBjaHJvbWl1bS1zdHlsZSB0cmFjaW5nIHN1cHBvcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
aW5kZXggYzRjYTRjMGVlYWJmNDI0MDc1YWY5NmQxYjA5YmE4ZjJiNGM3MjA4Yy4uM2ZjMGNjYWFj
NjEzMjdhZjgzNzc4MzU2ZGY5Y2I4OTY4OTU1OWI0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMi0wOSAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgRG8gbm90IHJlZm9ybWF0IHN0cmluZ3MgaW4gPGlucHV0IHR5
cGU9bnVtYmVyPiBvbiBwbGF0Zm9ybXMgdXNpbmcgTG9jYWxpemVkTnVtYmVySUNVLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzgzMjYKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSB0ZXN0IGZvciBX
ZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxpemVkTnVtYmVySUNVLgorCisgICAgICAgICogV2Vi
S2l0Lmd5cGk6IEFkZGVkIExvY2FsaXplZE51bWJlcklDVVRlc3QuY3BwCisgICAgICAgICogdGVz
dHMvTG9jYWxpemVkTnVtYmVySUNVVGVzdC5jcHA6IEFkZGVkLgorCiAyMDEyLTAyLTA5ICBKb2hu
IEJhdGVzICA8amJhdGVzQGdvb2dsZS5jb20+CiAKICAgICAgICAgW0Nocm9taXVtXSBBZGQgY2hy
b21pdW0tc3R5bGUgdHJhY2luZyBzdXBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOTBjZDhlMTQ4
ZTY2OWFlZmMzYTI1ZTE4OGNlZTQ2YmRhZThmNjVmMS4uMjA4OWIzNGM0NmM2ODg2ZDRjYmU5NWFh
OTg4NDc4OGQ0MWNjYjc4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDA2Miw2ICs0MDYyLDcgQEAK
ICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L0xvY2FsaXplZERhdGVOb25lLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWROdW1iZXIuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWROdW1iZXJJQ1UuY3BwJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS90ZXh0L0xvY2FsaXplZE51bWJlcklDVS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90
ZXh0L0xvY2FsaXplZE51bWJlck5vbmUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0
L1BhcnNlclV0aWxpdGllcy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L1F1b3RlZFBy
aW50YWJsZS5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9j
YWxpemVkTnVtYmVySUNVLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxp
emVkTnVtYmVySUNVLmNwcAppbmRleCAwM2RiNGQ1NDYyODlmMTQ3ZDhmOTU3OGMxNWZlOWQzYWE3
OWMwOTc1Li4wOTdmZGZkY2MxYWIwZTYxYWY5Yzg5YWJlYzg1MjFkNWQxOWU5MTJkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsaXplZE51bWJlcklDVS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWROdW1iZXJJQ1UuY3Bw
CkBAIC0yOSwxMDcgKzI5LDIwOSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJMb2NhbGl6ZWROdW1iZXIuaCIKKyNpbmNsdWRlICJMb2NhbGl6ZWROdW1iZXJJQ1UuaCIK
IAotI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlICJMb2NhbGl6ZWROdW1iZXIuaCIKKyNpbmNs
dWRlIDx1bmljb2RlL2RlY2ltZm10Lmg+CiAjaW5jbHVkZSA8dW5pY29kZS9udW1mbXQuaD4KLSNp
bmNsdWRlIDx1bmljb2RlL3BhcnNlcG9zLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
LSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL2R0b2EuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBpY3U7Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBQYXNzT3duUHRyPE51bWJlckZvcm1hdD4gY3JlYXRl
Rm9ybWF0dGVyRm9yQ3VycmVudExvY2FsZSgpCitJQ1VMb2NhbGU6OklDVUxvY2FsZShjb25zdCBM
b2NhbGUmIGxvY2FsZSkKKyAgICA6IG1fbG9jYWxlKGxvY2FsZSkKKyAgICAsIG1fZGlkQ3JlYXRl
RGVjaW1hbEZvcm1hdChmYWxzZSkKIHsKLSAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19F
UlJPUjsKLSAgICBPd25QdHI8TnVtYmVyRm9ybWF0PiBmb3JtYXR0ZXIgPSBhZG9wdFB0cihOdW1i
ZXJGb3JtYXQ6OmNyZWF0ZUluc3RhbmNlKHN0YXR1cykpOwotICAgIHJldHVybiBVX1NVQ0NFU1Mo
c3RhdHVzKSA/IGZvcm1hdHRlci5yZWxlYXNlKCkgOiBudWxscHRyOwogfQogCi1zdGF0aWMgUGFz
c093blB0cjxOdW1iZXJGb3JtYXQ+IGNyZWF0ZUZvcm1hdHRlckZvckN1cnJlbnRMb2NhbGVUb0Rp
c3BsYXkoKQorUGFzc093blB0cjxJQ1VMb2NhbGU+IElDVUxvY2FsZTo6Y3JlYXRlKGNvbnN0IGNo
YXIqIGxvY2FsZVN0cmluZykKIHsKLSAgICBPd25QdHI8TnVtYmVyRm9ybWF0PiBmb3JtYXR0ZXIo
Y3JlYXRlRm9ybWF0dGVyRm9yQ3VycmVudExvY2FsZSgpKTsKLSAgICBpZiAoIWZvcm1hdHRlcikK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBmb3JtYXR0ZXItPnNldEdyb3VwaW5nVXNl
ZChGQUxTRSk7Ci0gICAgcmV0dXJuIGZvcm1hdHRlci5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBJQ1VMb2NhbGUoTG9jYWxlOjpjcmVhdGVDYW5vbmljYWwobG9jYWxlU3RyaW5n
KSkpOwogfQogCi0vLyBUaGlzIG1pZ2h0IHJldHVybiAwLgotc3RhdGljIE51bWJlckZvcm1hdCog
bnVtYmVyRm9ybWF0dGVyRm9yUGFyc2luZygpCitQYXNzT3duUHRyPElDVUxvY2FsZT4gSUNVTG9j
YWxlOjpjcmVhdGVGb3JDdXJyZW50TG9jYWxlKCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotICAgIHN0YXRpYyBOdW1iZXJGb3JtYXQqIGZvcm1hdHRlciA9IGNyZWF0ZUZvcm1hdHRl
ckZvckN1cnJlbnRMb2NhbGUoKS5sZWFrUHRyKCk7Ci0gICAgcmV0dXJuIGZvcm1hdHRlcjsKKyAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IElDVUxvY2FsZShMb2NhbGU6OmdldERlZmF1bHQoKSkpOwog
fQogCi0vLyBUaGlzIG1pZ2h0IHJldHVybiAwLgotc3RhdGljIE51bWJlckZvcm1hdCogbnVtYmVy
Rm9ybWF0dGVyRm9yRGlzcGxheSgpCit2b2lkIElDVUxvY2FsZTo6c2V0RGVjaW1hbFN5bWJvbCh1
bnNpZ25lZCBpbmRleCwgRGVjaW1hbEZvcm1hdFN5bWJvbHM6OkVOdW1iZXJGb3JtYXRTeW1ib2wg
c3ltYm9sKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc3RhdGljIE51bWJl
ckZvcm1hdCogZm9ybWF0dGVyID0gY3JlYXRlRm9ybWF0dGVyRm9yQ3VycmVudExvY2FsZVRvRGlz
cGxheSgpLmxlYWtQdHIoKTsKLSAgICByZXR1cm4gZm9ybWF0dGVyOworICAgIFVuaWNvZGVTdHJp
bmcgdXN0cmluZyA9IG1fZGVjaW1hbEZvcm1hdC0+Z2V0RGVjaW1hbEZvcm1hdFN5bWJvbHMoKS0+
Z2V0U3ltYm9sKHN5bWJvbCk7CisgICAgbV9kZWNpbWFsU3ltYm9sc1tpbmRleF0gPSBTdHJpbmco
dXN0cmluZy5nZXRCdWZmZXIoKSwgdXN0cmluZy5sZW5ndGgoKSk7CiB9CiAKLXN0YXRpYyBkb3Vi
bGUgcGFyc2VMb2NhbGl6ZWROdW1iZXIoY29uc3QgU3RyaW5nJiBudW1iZXJTdHJpbmcpCit2b2lk
IElDVUxvY2FsZTo6aW5pdGlhbGl6ZURlY2ltYWxGb3JtYXQoKQogewotICAgIGlmIChudW1iZXJT
dHJpbmcuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6
cXVpZXRfTmFOKCk7Ci0gICAgTnVtYmVyRm9ybWF0KiBmb3JtYXR0ZXIgPSBudW1iZXJGb3JtYXR0
ZXJGb3JQYXJzaW5nKCk7Ci0gICAgaWYgKCFmb3JtYXR0ZXIpCi0gICAgICAgIHJldHVybiBudW1l
cmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICBVbmljb2RlU3RyaW5nIG51bWJl
clVuaWNvZGVTdHJpbmcobnVtYmVyU3RyaW5nLmNoYXJhY3RlcnMoKSwgbnVtYmVyU3RyaW5nLmxl
bmd0aCgpKTsKLSAgICBGb3JtYXR0YWJsZSByZXN1bHQ7Ci0gICAgUGFyc2VQb3NpdGlvbiBwb3Np
dGlvbigwKTsKLSAgICBmb3JtYXR0ZXItPnBhcnNlKG51bWJlclVuaWNvZGVTdHJpbmcsIHJlc3Vs
dCwgcG9zaXRpb24pOwotICAgIGlmIChwb3NpdGlvbi5nZXRJbmRleCgpICE9IG51bWJlclVuaWNv
ZGVTdHJpbmcubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBudW1lcmljX2xpbWl0czxkb3VibGU+
OjpxdWlldF9OYU4oKTsKKyAgICBpZiAobV9kaWRDcmVhdGVEZWNpbWFsRm9ybWF0KQorICAgICAg
ICByZXR1cm47CisgICAgbV9kaWRDcmVhdGVEZWNpbWFsRm9ybWF0ID0gdHJ1ZTsKICAgICBVRXJy
b3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICBkb3VibGUgbnVtZXJpY1Jlc3VsdCA9
IHJlc3VsdC5nZXREb3VibGUoc3RhdHVzKTsKLSAgICByZXR1cm4gVV9TVUNDRVNTKHN0YXR1cykg
PyBudW1lcmljUmVzdWx0IDogbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Cisg
ICAgTnVtYmVyRm9ybWF0KiBmb3JtYXQgPSBOdW1iZXJGb3JtYXQ6OmNyZWF0ZUluc3RhbmNlKG1f
bG9jYWxlLCBOdW1iZXJGb3JtYXQ6OmtOdW1iZXJTdHlsZSwgc3RhdHVzKTsKKyAgICBpZiAoIVVf
U1VDQ0VTUyhzdGF0dXMpKQorICAgICAgICByZXR1cm47CisgICAgbV9kZWNpbWFsRm9ybWF0ID0g
YWRvcHRQdHIoc3RhdGljX2Nhc3Q8RGVjaW1hbEZvcm1hdCo+KGZvcm1hdCkpOworCisgICAgc2V0
RGVjaW1hbFN5bWJvbCgwLCBEZWNpbWFsRm9ybWF0U3ltYm9sczo6a1plcm9EaWdpdFN5bWJvbCk7
CisgICAgc2V0RGVjaW1hbFN5bWJvbCgxLCBEZWNpbWFsRm9ybWF0U3ltYm9sczo6a09uZURpZ2l0
U3ltYm9sKTsKKyAgICBzZXREZWNpbWFsU3ltYm9sKDIsIERlY2ltYWxGb3JtYXRTeW1ib2xzOjpr
VHdvRGlnaXRTeW1ib2wpOworICAgIHNldERlY2ltYWxTeW1ib2woMywgRGVjaW1hbEZvcm1hdFN5
bWJvbHM6OmtUaHJlZURpZ2l0U3ltYm9sKTsKKyAgICBzZXREZWNpbWFsU3ltYm9sKDQsIERlY2lt
YWxGb3JtYXRTeW1ib2xzOjprRm91ckRpZ2l0U3ltYm9sKTsKKyAgICBzZXREZWNpbWFsU3ltYm9s
KDUsIERlY2ltYWxGb3JtYXRTeW1ib2xzOjprRml2ZURpZ2l0U3ltYm9sKTsKKyAgICBzZXREZWNp
bWFsU3ltYm9sKDYsIERlY2ltYWxGb3JtYXRTeW1ib2xzOjprU2l4RGlnaXRTeW1ib2wpOworICAg
IHNldERlY2ltYWxTeW1ib2woNywgRGVjaW1hbEZvcm1hdFN5bWJvbHM6OmtTZXZlbkRpZ2l0U3lt
Ym9sKTsKKyAgICBzZXREZWNpbWFsU3ltYm9sKDgsIERlY2ltYWxGb3JtYXRTeW1ib2xzOjprRWln
aHREaWdpdFN5bWJvbCk7CisgICAgc2V0RGVjaW1hbFN5bWJvbCg5LCBEZWNpbWFsRm9ybWF0U3lt
Ym9sczo6a05pbmVEaWdpdFN5bWJvbCk7CisgICAgc2V0RGVjaW1hbFN5bWJvbChEZWNpbWFsU2Vw
YXJhdG9ySW5kZXgsIERlY2ltYWxGb3JtYXRTeW1ib2xzOjprRGVjaW1hbFNlcGFyYXRvclN5bWJv
bCk7CisgICAgc2V0RGVjaW1hbFN5bWJvbChHcm91cFNlcGFyYXRvckluZGV4LCBEZWNpbWFsRm9y
bWF0U3ltYm9sczo6a0dyb3VwaW5nU2VwYXJhdG9yU3ltYm9sKTsKIH0KIAotc3RhdGljIFN0cmlu
ZyBmb3JtYXRMb2NhbGl6ZWROdW1iZXIoZG91YmxlIG51bWJlciwgdW5zaWduZWQgZnJhY3Rpb25E
aWdpdHMpCitTdHJpbmcgSUNVTG9jYWxlOjpjb252ZXJ0VG9Mb2NhbGl6ZWROdW1iZXIoY29uc3Qg
U3RyaW5nJiBpbnB1dCkKIHsKLSAgICBOdW1iZXJGb3JtYXQqIGZvcm1hdHRlciA9IG51bWJlckZv
cm1hdHRlckZvckRpc3BsYXkoKTsKLSAgICBpZiAoIWZvcm1hdHRlcikKLSAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotICAgIFVuaWNvZGVTdHJpbmcgcmVzdWx0OwotICAgIGZvcm1hdHRlci0+c2V0
TWF4aW11bUZyYWN0aW9uRGlnaXRzKGNsYW1wVG9JbnRlZ2VyKGZyYWN0aW9uRGlnaXRzKSk7Ci0g
ICAgZm9ybWF0dGVyLT5mb3JtYXQobnVtYmVyLCByZXN1bHQpOwotICAgIHJldHVybiBTdHJpbmco
cmVzdWx0LmdldEJ1ZmZlcigpLCByZXN1bHQubGVuZ3RoKCkpOworICAgIGluaXRpYWxpemVEZWNp
bWFsRm9ybWF0KCk7CisgICAgaWYgKCFtX2RlY2ltYWxGb3JtYXQgfHwgaW5wdXQuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gaW5wdXQ7CisKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICBib29s
IGlzTmVnYXRpdmUgPSBmYWxzZTsKKyAgICBVbmljb2RlU3RyaW5nIHVzdHJpbmc7CisKKyAgICBp
ZiAoaW5wdXRbMF0gPT0gJy0nKSB7CisgICAgICAgICsraTsKKyAgICAgICAgaXNOZWdhdGl2ZSA9
IHRydWU7CisgICAgICAgIG1fZGVjaW1hbEZvcm1hdC0+Z2V0TmVnYXRpdmVQcmVmaXgodXN0cmlu
Zyk7CisgICAgfSBlbHNlCisgICAgICAgIG1fZGVjaW1hbEZvcm1hdC0+Z2V0UG9zaXRpdmVQcmVm
aXgodXN0cmluZyk7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIucmVz
ZXJ2ZUNhcGFjaXR5KGlucHV0Lmxlbmd0aCgpKTsKKyAgICBidWlsZGVyLmFwcGVuZCh1c3RyaW5n
LmdldEJ1ZmZlcigpLCB1c3RyaW5nLmxlbmd0aCgpKTsKKworICAgIGZvciAoOyBpIDwgaW5wdXQu
bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBzd2l0Y2ggKGlucHV0W2ldKSB7CisgICAgICAgIGNh
c2UgJzAnOgorICAgICAgICBjYXNlICcxJzoKKyAgICAgICAgY2FzZSAnMic6CisgICAgICAgIGNh
c2UgJzMnOgorICAgICAgICBjYXNlICc0JzoKKyAgICAgICAgY2FzZSAnNSc6CisgICAgICAgIGNh
c2UgJzYnOgorICAgICAgICBjYXNlICc3JzoKKyAgICAgICAgY2FzZSAnOCc6CisgICAgICAgIGNh
c2UgJzknOgorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobV9kZWNpbWFsU3ltYm9sc1tpbnB1
dFtpXSAtICcwJ10pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJy4nOgorICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQobV9kZWNpbWFsU3ltYm9sc1tEZWNpbWFsU2VwYXJhdG9y
SW5kZXhdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaXNO
ZWdhdGl2ZSkKKyAgICAgICAgbV9kZWNpbWFsRm9ybWF0LT5nZXROZWdhdGl2ZVN1ZmZpeCh1c3Ry
aW5nKTsKKyAgICBlbHNlCisgICAgICAgIG1fZGVjaW1hbEZvcm1hdC0+Z2V0UG9zaXRpdmVTdWZm
aXgodXN0cmluZyk7CisgICAgYnVpbGRlci5hcHBlbmQodXN0cmluZy5nZXRCdWZmZXIoKSwgdXN0
cmluZy5sZW5ndGgoKSk7CisKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCi1T
dHJpbmcgY29udmVydFRvTG9jYWxpemVkTnVtYmVyKGNvbnN0IFN0cmluZyYgY2Fub25pY2FsTnVt
YmVyU3RyaW5nLCB1bnNpZ25lZCBmcmFjdGlvbkRpZ2l0cykKK3RlbXBsYXRlIDxjbGFzcyBTdHJp
bmdUeXBlPiBib29sIG1hdGNoZXMoY29uc3QgU3RyaW5nJiB0ZXh0LCB1bnNpZ25lZCBwb3NpdGlv
biwgY29uc3QgU3RyaW5nVHlwZSYgcGFydCkKIHsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5v
dCBkbyBwYXJzZS10aGVuLWZvcm1hdC4gSXQgbWFrZXMgc29tZQotICAgIC8vIHByb2JsZW1zIHN1
Y2ggYXMgcmVtb3ZpbmcgbGVhZGluZyB6ZXJvcywgY2hhbmdpbmcgdHJhaWxpbmcKLSAgICAvLyBk
aWdpdHMgdG8gemVyb3MuCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgdXNlIHRoZSBmcmFj
dGlvbkRpZ2l0cyBhcmd1bWVudC4KKyAgICBpZiAocGFydC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGlmIChwb3NpdGlvbiArIHBhcnQubGVuZ3RoKCkgPiB0ZXh0Lmxlbmd0
aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihwYXJ0Lmxlbmd0aCgpKTsgKytpKSB7CisgICAgICAgIGlm
ICh0ZXh0W3Bvc2l0aW9uICsgaV0gIT0gcGFydFtpXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CiAKLSAgICBkb3VibGUgZG91YmxlVmFsdWUg
PSBjYW5vbmljYWxOdW1iZXJTdHJpbmcudG9Eb3VibGUoKTsKLSAgICAvLyBUaGUgaW5wdXQgc3Ry
aW5nIG11c3QgYmUgdmFsaWQuCi0gICAgcmV0dXJuIGZvcm1hdExvY2FsaXplZE51bWJlcihkb3Vi
bGVWYWx1ZSwgZnJhY3Rpb25EaWdpdHMpOworU3RyaW5nIElDVUxvY2FsZTo6Y29udmVydEZyb21M
b2NhbGl6ZWROdW1iZXIoY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWQpCit7CisgICAgaW5pdGlhbGl6
ZURlY2ltYWxGb3JtYXQoKTsKKyAgICBTdHJpbmcgaW5wdXQgPSBsb2NhbGl6ZWQuc3RyaXBXaGl0
ZVNwYWNlKCk7CisgICAgaWYgKCFtX2RlY2ltYWxGb3JtYXQgfHwgaW5wdXQuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gaW5wdXQ7CisKKyAgICBib29sIGlzTmVnYXRpdmU7CisgICAgdW5zaWdu
ZWQgc3RhcnRJbmRleCA9IDA7CisgICAgdW5zaWduZWQgZW5kSW5kZXggPSBpbnB1dC5sZW5ndGgo
KTsKKyAgICBVbmljb2RlU3RyaW5nIHByZWZpeDsKKyAgICBtX2RlY2ltYWxGb3JtYXQtPmdldE5l
Z2F0aXZlUHJlZml4KHByZWZpeCk7CisgICAgVW5pY29kZVN0cmluZyBzdWZmaXg7CisgICAgbV9k
ZWNpbWFsRm9ybWF0LT5nZXROZWdhdGl2ZVN1ZmZpeChzdWZmaXgpOworICAgIGlmIChwcmVmaXgu
aXNFbXB0eSgpICYmIHN1ZmZpeC5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9kZWNpbWFsRm9ybWF0
LT5nZXRQb3NpdGl2ZVByZWZpeChwcmVmaXgpOworICAgICAgICBtX2RlY2ltYWxGb3JtYXQtPmdl
dFBvc2l0aXZlU3VmZml4KHN1ZmZpeCk7CisgICAgICAgIEFTU0VSVCghKHByZWZpeC5pc0VtcHR5
KCkgJiYgc3VmZml4LmlzRW1wdHkoKSkpOworICAgICAgICBpZiAobWF0Y2hlcyhpbnB1dCwgMCwg
cHJlZml4KSAmJiBtYXRjaGVzKGlucHV0LCBlbmRJbmRleCAtIHN1ZmZpeC5sZW5ndGgoKSwgc3Vm
Zml4KSkgeworICAgICAgICAgICAgaXNOZWdhdGl2ZSA9IGZhbHNlOworICAgICAgICAgICAgc3Rh
cnRJbmRleCA9IHByZWZpeC5sZW5ndGgoKTsKKyAgICAgICAgICAgIGVuZEluZGV4IC09IHN1ZmZp
eC5sZW5ndGgoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBpc05lZ2F0aXZlID0gdHJ1
ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobWF0Y2hlcyhpbnB1dCwgMCwgcHJlZml4KSAm
JiBtYXRjaGVzKGlucHV0LCBlbmRJbmRleCAtIHN1ZmZpeC5sZW5ndGgoKSwgc3VmZml4KSkgewor
ICAgICAgICAgICAgaXNOZWdhdGl2ZSA9IHRydWU7CisgICAgICAgICAgICBzdGFydEluZGV4ID0g
cHJlZml4Lmxlbmd0aCgpOworICAgICAgICAgICAgZW5kSW5kZXggLT0gc3VmZml4Lmxlbmd0aCgp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaXNOZWdhdGl2ZSA9IGZhbHNlOworICAg
ICAgICAgICAgbV9kZWNpbWFsRm9ybWF0LT5nZXRQb3NpdGl2ZVByZWZpeChwcmVmaXgpOworICAg
ICAgICAgICAgbV9kZWNpbWFsRm9ybWF0LT5nZXRQb3NpdGl2ZVN1ZmZpeChzdWZmaXgpOworICAg
ICAgICAgICAgaWYgKG1hdGNoZXMoaW5wdXQsIDAsIHByZWZpeCkgJiYgbWF0Y2hlcyhpbnB1dCwg
ZW5kSW5kZXggLSBzdWZmaXgubGVuZ3RoKCksIHN1ZmZpeCkpIHsKKyAgICAgICAgICAgICAgICBz
dGFydEluZGV4ID0gcHJlZml4Lmxlbmd0aCgpOworICAgICAgICAgICAgICAgIGVuZEluZGV4IC09
IHN1ZmZpeC5sZW5ndGgoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
Ly8gSW5wdXQgaXMgYnJva2VuLiBSZXR1cm5pbmcgYW4gaW52YWxpZCBudW1iZXIgc3RyaW5nLgor
ICAgICAgICAgICAgICAgIHJldHVybiAiKiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIucmVzZXJ2ZUNhcGFj
aXR5KGlucHV0Lmxlbmd0aCgpKTsKKyAgICBpZiAoaXNOZWdhdGl2ZSkKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIi0iKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwgZW5k
SW5kZXg7KSB7CisgICAgICAgIHVuc2lnbmVkIHN5bWJvbEluZGV4ID0gMDsKKyAgICAgICAgZm9y
ICg7IHN5bWJvbEluZGV4IDwgRGVjaW1hbFN5bWJvbHNTaXplOyArK3N5bWJvbEluZGV4KSB7Cisg
ICAgICAgICAgICBpZiAobV9kZWNpbWFsU3ltYm9sc1tzeW1ib2xJbmRleF0ubGVuZ3RoKCkgJiYg
bWF0Y2hlcyhpbnB1dCwgaSwgbV9kZWNpbWFsU3ltYm9sc1tzeW1ib2xJbmRleF0pKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChzeW1ib2xJbmRleCA+PSBE
ZWNpbWFsU3ltYm9sc1NpemUpCisgICAgICAgICAgICByZXR1cm4gIioiOworICAgICAgICBpZiAo
c3ltYm9sSW5kZXggPT0gRGVjaW1hbFNlcGFyYXRvckluZGV4KQorICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQoJy4nKTsKKyAgICAgICAgZWxzZSBpZiAoc3ltYm9sSW5kZXggPT0gR3JvdXBTZXBh
cmF0b3JJbmRleCkgeworICAgICAgICAgICAgLy8gSWdub3JlIGdyb3VwIHNlcGFyYXRvcnMuCisK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChzdGF0aWNfY2FzdDxV
Q2hhcj4oJzAnICsgc3ltYm9sSW5kZXgpKTsKKyAgICAgICAgaSArPSBtX2RlY2ltYWxTeW1ib2xz
W3N5bWJvbEluZGV4XS5sZW5ndGgoKTsKKyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJp
bmcoKTsKK30KKworc3RhdGljIElDVUxvY2FsZSogY3VycmVudExvY2FsZSgpCit7CisgICAgc3Rh
dGljIElDVUxvY2FsZSogY3VycmVudElDVUxvY2FsZSA9IElDVUxvY2FsZTo6Y3JlYXRlRm9yQ3Vy
cmVudExvY2FsZSgpLmxlYWtQdHIoKTsKKyAgICByZXR1cm4gY3VycmVudElDVUxvY2FsZTsKK30K
IAorU3RyaW5nIGNvbnZlcnRUb0xvY2FsaXplZE51bWJlcihjb25zdCBTdHJpbmcmIGNhbm9uaWNh
bE51bWJlclN0cmluZywgdW5zaWduZWQgZnJhY3Rpb25EaWdpdHMpCit7CisgICAgcmV0dXJuIGN1
cnJlbnRMb2NhbGUoKS0+Y29udmVydFRvTG9jYWxpemVkTnVtYmVyKGNhbm9uaWNhbE51bWJlclN0
cmluZyk7CiB9CiAKIFN0cmluZyBjb252ZXJ0RnJvbUxvY2FsaXplZE51bWJlcihjb25zdCBTdHJp
bmcmIGxvY2FsaXplZE51bWJlclN0cmluZykKIHsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5v
dCBkbyBwYXJzZS10aGVuLWZvcm1hdC4gSXQgbWFrZXMgc29tZQotICAgIC8vIHByb2JsZW1zIHN1
Y2ggYXMgcmVtb3ZpbmcgbGVhZGluZyB6ZXJvcywgY2hhbmdpbmcgdHJhaWxpbmcKLSAgICAvLyBk
aWdpdHMgdG8gemVyb3MuCi0KLSAgICBkb3VibGUgZG91YmxlVmFsdWUgPSBwYXJzZUxvY2FsaXpl
ZE51bWJlcihsb2NhbGl6ZWROdW1iZXJTdHJpbmcpOwotICAgIGlmICghaXNmaW5pdGUoZG91Ymxl
VmFsdWUpKQotICAgICAgICByZXR1cm4gbG9jYWxpemVkTnVtYmVyU3RyaW5nOwotICAgIE51bWJl
clRvU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKLSAgICByZXR1cm4gU3RyaW5nKG51bWJlclRvU3RyaW5n
KGRvdWJsZVZhbHVlLCBidWZmZXIpKTsKKyAgICByZXR1cm4gY3VycmVudExvY2FsZSgpLT5jb252
ZXJ0RnJvbUxvY2FsaXplZE51bWJlcihsb2NhbGl6ZWROdW1iZXJTdHJpbmcpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L0xvY2FsaXplZE51bWJlcklDVS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9M
b2NhbGl6ZWROdW1iZXJJQ1UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOWVhODIwNmU1OTg2NzI4ZTY0YzdjZGVl
ODRmYTgwZjY4NGNiMWM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9Mb2NhbGl6ZWROdW1iZXJJQ1UuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMb2Nh
bGl6ZWROdW1iZXJJQ1VfaAorI2RlZmluZSBMb2NhbGl6ZWROdW1iZXJJQ1VfaAorCisjaW5jbHVk
ZSA8dW5pY29kZS9kZWNpbWZtdC5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKy8vIFdlIHNob3VsZCB1c2UgdGhpcyBjbGFzcyBvbmx5IGZvciBM
b2NhbGl6ZWROdW1iZXJJQ1UuY3BwIGFuZCBMb2NhbGl6ZWROdW1iZXJJQ1VUZXN0LmNwcC4KK2Ns
YXNzIElDVUxvY2FsZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SUNVTG9jYWxl
PiBjcmVhdGUoY29uc3QgY2hhciogbG9jYWxlU3RyaW5nKTsKKyAgICBzdGF0aWMgUGFzc093blB0
cjxJQ1VMb2NhbGU+IGNyZWF0ZUZvckN1cnJlbnRMb2NhbGUoKTsKKyAgICBTdHJpbmcgY29udmVy
dFRvTG9jYWxpemVkTnVtYmVyKGNvbnN0IFN0cmluZyYpOworICAgIFN0cmluZyBjb252ZXJ0RnJv
bUxvY2FsaXplZE51bWJlcihjb25zdCBTdHJpbmcmKTsKKworcHJpdmF0ZToKKyAgICBJQ1VMb2Nh
bGUoY29uc3QgaWN1OjpMb2NhbGUmKTsKKyAgICB2b2lkIHNldERlY2ltYWxTeW1ib2wodW5zaWdu
ZWQgaW5kZXgsIGljdTo6RGVjaW1hbEZvcm1hdFN5bWJvbHM6OkVOdW1iZXJGb3JtYXRTeW1ib2wp
OworICAgIHZvaWQgaW5pdGlhbGl6ZURlY2ltYWxGb3JtYXQoKTsKKworICAgIGljdTo6TG9jYWxl
IG1fbG9jYWxlOworICAgIE93blB0cjxpY3U6OkRlY2ltYWxGb3JtYXQ+IG1fZGVjaW1hbEZvcm1h
dDsKKyAgICBlbnVtIHsKKyAgICAgICAgLy8gMC05IGZvciBkaWdpdHMuCisgICAgICAgIERlY2lt
YWxTZXBhcmF0b3JJbmRleCA9IDEwLAorICAgICAgICBHcm91cFNlcGFyYXRvckluZGV4ID0gMTEs
CisgICAgICAgIERlY2ltYWxTeW1ib2xzU2l6ZQorICAgIH07CisgICAgU3RyaW5nIG1fZGVjaW1h
bFN5bWJvbHNbMTJdOworICAgIGJvb2wgbV9kaWRDcmVhdGVEZWNpbWFsRm9ybWF0OworfTsKKwor
fQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBjODUwMmY1NzNjNDUx
NzAxNzM1NDg1YWY0NzUyM2U3NTEyOTRjODNkLi41ODhjYjBmYTA5YjRlYjYxZmVlNWEzNmM1YTg3
MTYwOTk0YzhmZjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTEwMCw2ICsx
MDAsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0tVUkxUZXN0LmNwcCcsCiAgICAgICAgICAgICAn
dGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MYXllclRl
eHR1cmVVcGRhdGVyVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0xvY2FsaXplZE51bWJl
cklDVVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9QYWludEFnZ3JlZ2F0b3JUZXN0LmNw
cCcsCiAgICAgICAgICAgICAndGVzdHMvUE9EQXJlbmFUZXN0LmNwcCcsCiAgICAgICAgICAgICAn
dGVzdHMvUE9ESW50ZXJ2YWxUcmVlVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9Mb2NhbGl6ZWROdW1iZXJJQ1VUZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvTG9jYWxpemVkTnVtYmVySUNVVGVzdC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NjIwM2QzNWQ3OWNiNTIzY2FjOTA5ZGNkNjlmMmFlMTRiMjljZTQ1NAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTG9jYWxpemVkTnVtYmVySUNVVGVzdC5j
cHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMb2NhbGl6
ZWROdW1iZXJJQ1UuaCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3ZvaWQgdGVzdE51
bWJlcklzUmV2ZXJzaWJsZShjb25zdCBjaGFyKiBsb2NhbGVTdHJpbmcsIGNvbnN0IGNoYXIqIG9y
aWdpbmFsLCBjb25zdCBjaGFyKiBzaG91bGRIYXZlID0gMCkKK3sKKyAgICBPd25QdHI8SUNVTG9j
YWxlPiBsb2NhbGUgPSBJQ1VMb2NhbGU6OmNyZWF0ZShsb2NhbGVTdHJpbmcpOworICAgIFN0cmlu
ZyBsb2NhbGl6ZWQgPSBsb2NhbGUtPmNvbnZlcnRUb0xvY2FsaXplZE51bWJlcihvcmlnaW5hbCk7
CisgICAgaWYgKHNob3VsZEhhdmUpCisgICAgICAgIEVYUEVDVF9UUlVFKGxvY2FsaXplZC5jb250
YWlucyhzaG91bGRIYXZlKSk7CisgICAgU3RyaW5nIGNvbnZlcnRlZCA9IGxvY2FsZS0+Y29udmVy
dEZyb21Mb2NhbGl6ZWROdW1iZXIobG9jYWxpemVkKTsKKyAgICBFWFBFQ1RfRVEob3JpZ2luYWws
IGNvbnZlcnRlZCk7Cit9CisKK3ZvaWQgdGVzdE51bWJlcnMoY29uc3QgY2hhciogbG9jYWxlU3Ry
aW5nKQoreworICAgIHRlc3ROdW1iZXJJc1JldmVyc2libGUobG9jYWxlU3RyaW5nLCAiMTIzNDU2
Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIik7CisgICAgdGVzdE51bWJlcklzUmV2ZXJzaWJsZShs
b2NhbGVTdHJpbmcsICItMTIzLjQ1NiIpOworICAgIHRlc3ROdW1iZXJJc1JldmVyc2libGUobG9j
YWxlU3RyaW5nLCAiLjQ1NiIpOworICAgIHRlc3ROdW1iZXJJc1JldmVyc2libGUobG9jYWxlU3Ry
aW5nLCAiLTAuNDU2Iik7Cit9CisKK1RFU1QoTG9jYWxpemVkTnVtYmVySUNVVGVzdCwgUmV2ZXJz
aWJsZSkKK3sKKyAgICB0ZXN0TnVtYmVySXNSZXZlcnNpYmxlKCJlbl9VUyIsICIxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKTsKKyAgICB0ZXN0TnVtYmVySXNSZXZlcnNpYmxlKCJlbl9V
UyIsICItMTIzLjQ1NiIsICIuIik7CisgICAgdGVzdE51bWJlcklzUmV2ZXJzaWJsZSgiZW5fVVMi
LCAiLjQ1NiIsICIuIik7CisgICAgdGVzdE51bWJlcklzUmV2ZXJzaWJsZSgiZW5fVVMiLCAiLTAu
NDU2IiwgIi4iKTsKKworICAgIHRlc3ROdW1iZXJJc1JldmVyc2libGUoImZyIiwgIjEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIpOworICAgIHRlc3ROdW1iZXJJc1JldmVyc2libGUoImZy
IiwgIi0xMjMuNDU2IiwgIiwiKTsKKyAgICB0ZXN0TnVtYmVySXNSZXZlcnNpYmxlKCJmciIsICIu
NDU2IiwgIiwiKTsKKyAgICB0ZXN0TnVtYmVySXNSZXZlcnNpYmxlKCJmciIsICItMC40NTYiLCAi
LCIpOworCisgICAgLy8gUGVyc2lhbiBsb2NhbGUgaGFzIGEgbmVnYXRpdmUgcHJlZml4IGFuZCBh
IG5lZ2F0aXZlIHN1ZmZpeC4KKyAgICB0ZXN0TnVtYmVycygiZmEiKTsKKworICAgIC8vIFRlc3Qg
c29tZSBvZiBtYWpvciBsb2NhbGVzLgorICAgIHRlc3ROdW1iZXJzKCJhciIpOworICAgIHRlc3RO
dW1iZXJzKCJkZV9ERSIpOworICAgIHRlc3ROdW1iZXJzKCJlc19FUyIpOworICAgIHRlc3ROdW1i
ZXJzKCJqYV9KUCIpOworICAgIHRlc3ROdW1iZXJzKCJrb19LUiIpOworICAgIHRlc3ROdW1iZXJz
KCJ6aF9DTiIpOworICAgIHRlc3ROdW1iZXJzKCJ6aF9ISyIpOworICAgIHRlc3ROdW1iZXJzKCJ6
aF9UVyIpOworfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCmluZGV4IGQwMzQ2Y2RlMmRjMTY3ZmMxMDFjYTRhYmE3OWQ2NjQ2YzY3NzRk
ODIuLjZiMDZhNzk3Mjc5OTFjYTJlYTBlOTg5ZTc0ZDc4MTYwMDFkNDBmY2IgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNSBAQAorMjAxMi0wMi0wOSAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgRG8gbm90IHJlZm9ybWF0IHN0cmluZ3MgaW4gPGlucHV0IHR5cGU9bnVtYmVy
PiBvbiBwbGF0Zm9ybXMgdXNpbmcgTG9jYWxpemVkTnVtYmVySUNVLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzgzMjYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3Rlc3Rf
ZXhwZWN0YXRpb25zLnR4dDoKKyAgICAgICAgTmVlZCB0byBkbyByZWJhc2VsaW5lIGZvcgorICAg
ICAgICBmYXN0L3NwZWVjaC9pbnB1dC1hcHBlYXJhbmNlLW51bWJlcmFuZHNwZWVjaC5odG1sIGJl
Y2F1c2UgdGhlCisgICAgICAgIG51bWJlciByb3VuZGluZyBpc3N1ZSBpcyBmaXhlZC4KKwogMjAx
Mi0wMi0wOSAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4MjU2CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKaW5kZXggYjg4ZWFj
MTY3YTMzYmJjZjk3M2JlZGNiZGZkZDIxNDM3Yjg0YmMwYi4uZTAzMDY4OTM2MjVmODQ1YTI1YjFm
NTEyYTdlYTZkYTgwZjE2ZmQ4MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dApAQCAtMzg3NCw2ICszODc0LDkgQEAgQlVHX0NB
UllDTEFSSyBNQUMgOiBlZGl0aW5nL3N0eWxlL2NyZWF0ZS1ibG9jay1mb3Itc3R5bGUtMDEyLmh0
bWwgPSBJTUFHRQogQlVHX0NBUllDTEFSSyBNQUMgOiBlZGl0aW5nL3N0eWxlL2NyZWF0ZS1ibG9j
ay1mb3Itc3R5bGUtMDEzLmh0bWwgPSBJTUFHRQogQlVHX0NBUllDTEFSSyBNQUMgOiBmYXN0L2Rv
bS9ibHVyLWNvbnRlbnRlZGl0YWJsZS5odG1sID0gSU1BR0UKIAorLy8gTmVlZCByZWJhc2VsaW5l
CitCVUdXSzc4MzI2IDogZmFzdC9zcGVlY2gvaW5wdXQtYXBwZWFyYW5jZS1udW1iZXJhbmRzcGVl
Y2guaHRtbCA9IEZBSUwKKwogLy8gTmVlZCB0byBpbXBsZW1lbnQgZmlsZSBuYW1lIGxvZ2dpbmcu
CiBCVUdXSzc2NTcyIDogaHR0cC90ZXN0cy9kb3dubG9hZCA9IEZBSUwKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127490</attachid>
            <date>2012-02-16 18:13:29 -0800</date>
            <delta_ts>2012-03-05 22:13:47 -0800</delta_ts>
            <desc>Patch 3</desc>
            <filename>bug-78326-20120217111327.patch</filename>
            <type>text/plain</type>
            <size>22768</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MDExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzE0YWM3MTkxMDNjMDVi
NGIzNGE5NDQ1Njc4Y2U4ZmViN2ZlOTYyNC4uM2M0YTIxM2MzYmE1NzhlNjcwZTU3ODAwNTlmM2Zh
NTNlMGU3ZTg5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEyLTAyLTE2ICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBEbyBub3QgcmVmb3JtYXQg
c3RyaW5ncyBpbiA8aW5wdXQgdHlwZT1udW1iZXI+IG9uIHBsYXRmb3JtcyB1c2luZyBMb2NhbGl6
ZWROdW1iZXJJQ1UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03ODMyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFdlIGhhZCBidWdzIHN1Y2ggYXMgc3RyaXBwaW5nIGxlYWRpbmcgemVyb3MsIGRyb3BwaW5n
IGxvd2VyIGRpZ2l0cworICAgICAgICBvZiBsYXJnZSBudW1iZXJzIGJlY2F1c2Ugd2UgcGFyc2Ug
YSB1c2VyLWlucHV0IHN0cmluZyB0byBhIGRvdWJsZQorICAgICAgICB2YWx1ZSwgYW5kIGdlbmVy
YXRlIGEgc3RyaW5nIGZyb20gdGhlIGRvdWJsZSB2YWx1ZS4KKworICAgICAgICBJbiBvcmRlciB0
byBhdm9pZCBzdWNoIHJlZm9ybWF0dGluZywgd2UgY29udmVydHMgbnVtYmVyIHN0cmluZ3MgYnkK
KyAgICAgICAgcmVwbGFjaW5nIHN0YW5kYXJkIGRpZ2l0cyB0byBjb3JyZXNwb25kaW5nIGxvY2Fs
aXplZCBkaWdpdHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZGVkIExvY2FsaXplZE51
bWJlcklDVS5oCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWROdW1iZXJJQ1UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SUNVTG9jYWxlOjpJQ1VMb2NhbGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OklDVUxvY2FsZTo6Y3JlYXRlKTogQSB0ZXN0aW5nIGZhY3RvcnkgZnVuY3Rp
b24uCisgICAgICAgIChXZWJDb3JlOjpJQ1VMb2NhbGU6OmNyZWF0ZUZvckN1cnJlbnRMb2NhbGUp
OiBBIHByYWN0aWNhbCBmYWN0b3J5IGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6SUNVTG9j
YWxlOjpzZXREZWNpbWFsU3ltYm9sKTogSW5pdGlhbGl6ZSBhIHN5bWJvbCB0YWJsZS4KKyAgICAg
ICAgKFdlYkNvcmU6OklDVUxvY2FsZTo6aW5pdGlhbGl6ZURlY2ltYWxGb3JtYXQpOiBJbml0aWFs
aXplIElDVSBEZWNpbWFsRm9ybWF0LgorICAgICAgICAoV2ViQ29yZTo6SUNVTG9jYWxlOjpjb252
ZXJ0VG9Mb2NhbGl6ZWROdW1iZXIpOgorICAgICAgICAgUmVwbGFjZSBjaGFyYWN0ZXJzIHRvIGNv
cnJlc3BvbmRpbmcgbG9jYWxpemVkIGNoYXJhY3RlcnMuCisgICAgICAgIChXZWJDb3JlOjptYXRj
aGVzKTogQSBoZWxwZXIgZnVuY3Rpb24gZm9yIGNvbnZlcnRGcm9tTG9jYWxpemVkTnVtYmVyLgor
ICAgICAgICAoV2ViQ29yZTo6SUNVTG9jYWxlOjpjb252ZXJ0RnJvbUxvY2FsaXplZE51bWJlcik6
CisgICAgICAgICBSZXBsYWNlIGNoYXJhY3RlcnMgdG8gY29ycmVzcG9uZGluZyBzdGFuZGFyZCBj
aGFyYWN0ZXJzLgorICAgICAgICAoV2ViQ29yZTo6Y3VycmVudExvY2FsZSk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Y29udmVydFRvTG9jYWxpemVkTnVtYmVyKTogVXNlcyBJQ1VMb2NhbGU6
OmNvbnZlcnRUb0xvY2FsaXplZE51bWJlci4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRGcm9t
TG9jYWxpemVkTnVtYmVyKTogVXNlcyBJQ1VMb2NhbGU6OmNvbnZlcnRGcm9tTG9jYWxpemVkTnVt
YmVyLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvTG9jYWxpemVkTnVtYmVySUNVLmg6IEFkZGVk
LgorICAgICAgICAoSUNVTG9jYWxlKTogQWRkZWQuIFRoaXMgaXMgZXhwb3NlZCB0byBXZWJLaXQv
Y2hyb21pdW0vdGVzdHMvTG9jYWxpemVkTnVtYmVySUNVVGVzdC5jcHAuCisKIDIwMTItMDItMTYg
IExlbyBZYW5nICA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNuPgogCiAgICAgICAgIFtCbGFj
a0JlcnJ5XSBBZGFwdCB0byB0aGUgcmVtb3ZhbCBvZiBXZWJTdHJpbmdJbWwuaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwppbmRleCAzMWMzOGVlYTExZDRlZTk3OTM3MGYwNDViZjVkMWE4NmVlMzI1
YjhlLi45ODhhNGNlYTA1YTE2ZTM0ZGZhY2I4ZDUwMTNhNzMwNThhZjc4NDBkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAyLTE2ICBLZW50IFRhbXVy
YSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBEbyBub3QgcmVmb3JtYXQgc3RyaW5n
cyBpbiA8aW5wdXQgdHlwZT1udW1iZXI+IG9uIHBsYXRmb3JtcyB1c2luZyBMb2NhbGl6ZWROdW1i
ZXJJQ1UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
ODMyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBhIHRlc3QgZm9yIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWROdW1iZXJJQ1UuCisK
KyAgICAgICAgKiBXZWJLaXQuZ3lwaTogQWRkZWQgTG9jYWxpemVkTnVtYmVySUNVVGVzdC5jcHAK
KyAgICAgICAgKiB0ZXN0cy9Mb2NhbGl6ZWROdW1iZXJJQ1VUZXN0LmNwcDogQWRkZWQuCisKIDIw
MTItMDItMTYgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJ
bmRleGVkREI6IENocm9taXVtIFdlYktpdCBBUEkgc3VwcG9ydCBmb3IgSURCT2JqZWN0U3RvcmUu
ZGVsZXRlKElEQktleVJhbmdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDZkOTk2NThkNDEwMTkyNzU3
OWY5ZjYwNjJiOTM5OTM2MmM4OTNmMGYuLjA0MjdmYTA3ZWE0Y2FjNzQ4ZTE2MDQ5YTQxMGQ3ZjA2
ZDIwOWRlNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQwNzUsNiArNDA3NSw3IEBACiAgICAgICAg
ICAgICAncGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWREYXRlTm9uZS5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL3RleHQvTG9jYWxpemVkTnVtYmVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L3RleHQvTG9jYWxpemVkTnVtYmVySUNVLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vdGV4
dC9Mb2NhbGl6ZWROdW1iZXJJQ1UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9Mb2Nh
bGl6ZWROdW1iZXJOb25lLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9QYXJzZXJV
dGlsaXRpZXMuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUu
aCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsaXplZE51
bWJlcklDVS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsaXplZE51bWJl
cklDVS5jcHAKaW5kZXggMDNkYjRkNTQ2Mjg5ZjE0N2Q4Zjk1NzhjMTVmZTlkM2FhNzljMDk3NS4u
MDk3ZmRmZGNjMWFiMGU2MWFmOWM4OWFiZWM4NTIxZDVkMTllOTEyZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWROdW1iZXJJQ1UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxpemVkTnVtYmVySUNVLmNwcApAQCAtMjks
MTA3ICsyOSwyMDkgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTG9j
YWxpemVkTnVtYmVyLmgiCisjaW5jbHVkZSAiTG9jYWxpemVkTnVtYmVySUNVLmgiCiAKLSNpbmNs
dWRlIDxsaW1pdHM+CisjaW5jbHVkZSAiTG9jYWxpemVkTnVtYmVyLmgiCisjaW5jbHVkZSA8dW5p
Y29kZS9kZWNpbWZtdC5oPgogI2luY2x1ZGUgPHVuaWNvZGUvbnVtZm10Lmg+Ci0jaW5jbHVkZSA8
dW5pY29kZS9wYXJzZXBvcy5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9kdG9hLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1
c2luZyBuYW1lc3BhY2UgaWN1OwotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1zdGF0aWMgUGFzc093blB0cjxOdW1iZXJGb3JtYXQ+IGNyZWF0ZUZvcm1hdHRl
ckZvckN1cnJlbnRMb2NhbGUoKQorSUNVTG9jYWxlOjpJQ1VMb2NhbGUoY29uc3QgTG9jYWxlJiBs
b2NhbGUpCisgICAgOiBtX2xvY2FsZShsb2NhbGUpCisgICAgLCBtX2RpZENyZWF0ZURlY2ltYWxG
b3JtYXQoZmFsc2UpCiB7Ci0gICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0g
ICAgT3duUHRyPE51bWJlckZvcm1hdD4gZm9ybWF0dGVyID0gYWRvcHRQdHIoTnVtYmVyRm9ybWF0
OjpjcmVhdGVJbnN0YW5jZShzdGF0dXMpKTsKLSAgICByZXR1cm4gVV9TVUNDRVNTKHN0YXR1cykg
PyBmb3JtYXR0ZXIucmVsZWFzZSgpIDogbnVsbHB0cjsKIH0KIAotc3RhdGljIFBhc3NPd25QdHI8
TnVtYmVyRm9ybWF0PiBjcmVhdGVGb3JtYXR0ZXJGb3JDdXJyZW50TG9jYWxlVG9EaXNwbGF5KCkK
K1Bhc3NPd25QdHI8SUNVTG9jYWxlPiBJQ1VMb2NhbGU6OmNyZWF0ZShjb25zdCBjaGFyKiBsb2Nh
bGVTdHJpbmcpCiB7Ci0gICAgT3duUHRyPE51bWJlckZvcm1hdD4gZm9ybWF0dGVyKGNyZWF0ZUZv
cm1hdHRlckZvckN1cnJlbnRMb2NhbGUoKSk7Ci0gICAgaWYgKCFmb3JtYXR0ZXIpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgZm9ybWF0dGVyLT5zZXRHcm91cGluZ1VzZWQoRkFMU0Up
OwotICAgIHJldHVybiBmb3JtYXR0ZXIucmVsZWFzZSgpOworICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgSUNVTG9jYWxlKExvY2FsZTo6Y3JlYXRlQ2Fub25pY2FsKGxvY2FsZVN0cmluZykpKTsKIH0K
IAotLy8gVGhpcyBtaWdodCByZXR1cm4gMC4KLXN0YXRpYyBOdW1iZXJGb3JtYXQqIG51bWJlckZv
cm1hdHRlckZvclBhcnNpbmcoKQorUGFzc093blB0cjxJQ1VMb2NhbGU+IElDVUxvY2FsZTo6Y3Jl
YXRlRm9yQ3VycmVudExvY2FsZSgpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBzdGF0aWMgTnVtYmVyRm9ybWF0KiBmb3JtYXR0ZXIgPSBjcmVhdGVGb3JtYXR0ZXJGb3JDdXJy
ZW50TG9jYWxlKCkubGVha1B0cigpOwotICAgIHJldHVybiBmb3JtYXR0ZXI7CisgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBJQ1VMb2NhbGUoTG9jYWxlOjpnZXREZWZhdWx0KCkpKTsKIH0KIAotLy8g
VGhpcyBtaWdodCByZXR1cm4gMC4KLXN0YXRpYyBOdW1iZXJGb3JtYXQqIG51bWJlckZvcm1hdHRl
ckZvckRpc3BsYXkoKQordm9pZCBJQ1VMb2NhbGU6OnNldERlY2ltYWxTeW1ib2wodW5zaWduZWQg
aW5kZXgsIERlY2ltYWxGb3JtYXRTeW1ib2xzOjpFTnVtYmVyRm9ybWF0U3ltYm9sIHN5bWJvbCkK
IHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHN0YXRpYyBOdW1iZXJGb3JtYXQq
IGZvcm1hdHRlciA9IGNyZWF0ZUZvcm1hdHRlckZvckN1cnJlbnRMb2NhbGVUb0Rpc3BsYXkoKS5s
ZWFrUHRyKCk7Ci0gICAgcmV0dXJuIGZvcm1hdHRlcjsKKyAgICBVbmljb2RlU3RyaW5nIHVzdHJp
bmcgPSBtX2RlY2ltYWxGb3JtYXQtPmdldERlY2ltYWxGb3JtYXRTeW1ib2xzKCktPmdldFN5bWJv
bChzeW1ib2wpOworICAgIG1fZGVjaW1hbFN5bWJvbHNbaW5kZXhdID0gU3RyaW5nKHVzdHJpbmcu
Z2V0QnVmZmVyKCksIHVzdHJpbmcubGVuZ3RoKCkpOwogfQogCi1zdGF0aWMgZG91YmxlIHBhcnNl
TG9jYWxpemVkTnVtYmVyKGNvbnN0IFN0cmluZyYgbnVtYmVyU3RyaW5nKQordm9pZCBJQ1VMb2Nh
bGU6OmluaXRpYWxpemVEZWNpbWFsRm9ybWF0KCkKIHsKLSAgICBpZiAobnVtYmVyU3RyaW5nLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05h
TigpOwotICAgIE51bWJlckZvcm1hdCogZm9ybWF0dGVyID0gbnVtYmVyRm9ybWF0dGVyRm9yUGFy
c2luZygpOwotICAgIGlmICghZm9ybWF0dGVyKQotICAgICAgICByZXR1cm4gbnVtZXJpY19saW1p
dHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgVW5pY29kZVN0cmluZyBudW1iZXJVbmljb2Rl
U3RyaW5nKG51bWJlclN0cmluZy5jaGFyYWN0ZXJzKCksIG51bWJlclN0cmluZy5sZW5ndGgoKSk7
Ci0gICAgRm9ybWF0dGFibGUgcmVzdWx0OwotICAgIFBhcnNlUG9zaXRpb24gcG9zaXRpb24oMCk7
Ci0gICAgZm9ybWF0dGVyLT5wYXJzZShudW1iZXJVbmljb2RlU3RyaW5nLCByZXN1bHQsIHBvc2l0
aW9uKTsKLSAgICBpZiAocG9zaXRpb24uZ2V0SW5kZXgoKSAhPSBudW1iZXJVbmljb2RlU3RyaW5n
Lmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRf
TmFOKCk7CisgICAgaWYgKG1fZGlkQ3JlYXRlRGVjaW1hbEZvcm1hdCkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fZGlkQ3JlYXRlRGVjaW1hbEZvcm1hdCA9IHRydWU7CiAgICAgVUVycm9yQ29kZSBz
dGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgZG91YmxlIG51bWVyaWNSZXN1bHQgPSByZXN1bHQu
Z2V0RG91YmxlKHN0YXR1cyk7Ci0gICAgcmV0dXJuIFVfU1VDQ0VTUyhzdGF0dXMpID8gbnVtZXJp
Y1Jlc3VsdCA6IG51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgIE51bWJl
ckZvcm1hdCogZm9ybWF0ID0gTnVtYmVyRm9ybWF0OjpjcmVhdGVJbnN0YW5jZShtX2xvY2FsZSwg
TnVtYmVyRm9ybWF0OjprTnVtYmVyU3R5bGUsIHN0YXR1cyk7CisgICAgaWYgKCFVX1NVQ0NFU1Mo
c3RhdHVzKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZGVjaW1hbEZvcm1hdCA9IGFkb3B0UHRy
KHN0YXRpY19jYXN0PERlY2ltYWxGb3JtYXQqPihmb3JtYXQpKTsKKworICAgIHNldERlY2ltYWxT
eW1ib2woMCwgRGVjaW1hbEZvcm1hdFN5bWJvbHM6OmtaZXJvRGlnaXRTeW1ib2wpOworICAgIHNl
dERlY2ltYWxTeW1ib2woMSwgRGVjaW1hbEZvcm1hdFN5bWJvbHM6OmtPbmVEaWdpdFN5bWJvbCk7
CisgICAgc2V0RGVjaW1hbFN5bWJvbCgyLCBEZWNpbWFsRm9ybWF0U3ltYm9sczo6a1R3b0RpZ2l0
U3ltYm9sKTsKKyAgICBzZXREZWNpbWFsU3ltYm9sKDMsIERlY2ltYWxGb3JtYXRTeW1ib2xzOjpr
VGhyZWVEaWdpdFN5bWJvbCk7CisgICAgc2V0RGVjaW1hbFN5bWJvbCg0LCBEZWNpbWFsRm9ybWF0
U3ltYm9sczo6a0ZvdXJEaWdpdFN5bWJvbCk7CisgICAgc2V0RGVjaW1hbFN5bWJvbCg1LCBEZWNp
bWFsRm9ybWF0U3ltYm9sczo6a0ZpdmVEaWdpdFN5bWJvbCk7CisgICAgc2V0RGVjaW1hbFN5bWJv
bCg2LCBEZWNpbWFsRm9ybWF0U3ltYm9sczo6a1NpeERpZ2l0U3ltYm9sKTsKKyAgICBzZXREZWNp
bWFsU3ltYm9sKDcsIERlY2ltYWxGb3JtYXRTeW1ib2xzOjprU2V2ZW5EaWdpdFN5bWJvbCk7Cisg
ICAgc2V0RGVjaW1hbFN5bWJvbCg4LCBEZWNpbWFsRm9ybWF0U3ltYm9sczo6a0VpZ2h0RGlnaXRT
eW1ib2wpOworICAgIHNldERlY2ltYWxTeW1ib2woOSwgRGVjaW1hbEZvcm1hdFN5bWJvbHM6OmtO
aW5lRGlnaXRTeW1ib2wpOworICAgIHNldERlY2ltYWxTeW1ib2woRGVjaW1hbFNlcGFyYXRvcklu
ZGV4LCBEZWNpbWFsRm9ybWF0U3ltYm9sczo6a0RlY2ltYWxTZXBhcmF0b3JTeW1ib2wpOworICAg
IHNldERlY2ltYWxTeW1ib2woR3JvdXBTZXBhcmF0b3JJbmRleCwgRGVjaW1hbEZvcm1hdFN5bWJv
bHM6OmtHcm91cGluZ1NlcGFyYXRvclN5bWJvbCk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgZm9ybWF0
TG9jYWxpemVkTnVtYmVyKGRvdWJsZSBudW1iZXIsIHVuc2lnbmVkIGZyYWN0aW9uRGlnaXRzKQor
U3RyaW5nIElDVUxvY2FsZTo6Y29udmVydFRvTG9jYWxpemVkTnVtYmVyKGNvbnN0IFN0cmluZyYg
aW5wdXQpCiB7Ci0gICAgTnVtYmVyRm9ybWF0KiBmb3JtYXR0ZXIgPSBudW1iZXJGb3JtYXR0ZXJG
b3JEaXNwbGF5KCk7Ci0gICAgaWYgKCFmb3JtYXR0ZXIpCi0gICAgICAgIHJldHVybiBTdHJpbmco
KTsKLSAgICBVbmljb2RlU3RyaW5nIHJlc3VsdDsKLSAgICBmb3JtYXR0ZXItPnNldE1heGltdW1G
cmFjdGlvbkRpZ2l0cyhjbGFtcFRvSW50ZWdlcihmcmFjdGlvbkRpZ2l0cykpOwotICAgIGZvcm1h
dHRlci0+Zm9ybWF0KG51bWJlciwgcmVzdWx0KTsKLSAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5n
ZXRCdWZmZXIoKSwgcmVzdWx0Lmxlbmd0aCgpKTsKKyAgICBpbml0aWFsaXplRGVjaW1hbEZvcm1h
dCgpOworICAgIGlmICghbV9kZWNpbWFsRm9ybWF0IHx8IGlucHV0LmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIGlucHV0OworCisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgYm9vbCBpc05lZ2F0
aXZlID0gZmFsc2U7CisgICAgVW5pY29kZVN0cmluZyB1c3RyaW5nOworCisgICAgaWYgKGlucHV0
WzBdID09ICctJykgeworICAgICAgICArK2k7CisgICAgICAgIGlzTmVnYXRpdmUgPSB0cnVlOwor
ICAgICAgICBtX2RlY2ltYWxGb3JtYXQtPmdldE5lZ2F0aXZlUHJlZml4KHVzdHJpbmcpOworICAg
IH0gZWxzZQorICAgICAgICBtX2RlY2ltYWxGb3JtYXQtPmdldFBvc2l0aXZlUHJlZml4KHVzdHJp
bmcpOworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLnJlc2VydmVDYXBh
Y2l0eShpbnB1dC5sZW5ndGgoKSk7CisgICAgYnVpbGRlci5hcHBlbmQodXN0cmluZy5nZXRCdWZm
ZXIoKSwgdXN0cmluZy5sZW5ndGgoKSk7CisKKyAgICBmb3IgKDsgaSA8IGlucHV0Lmxlbmd0aCgp
OyArK2kpIHsKKyAgICAgICAgc3dpdGNoIChpbnB1dFtpXSkgeworICAgICAgICBjYXNlICcwJzoK
KyAgICAgICAgY2FzZSAnMSc6CisgICAgICAgIGNhc2UgJzInOgorICAgICAgICBjYXNlICczJzoK
KyAgICAgICAgY2FzZSAnNCc6CisgICAgICAgIGNhc2UgJzUnOgorICAgICAgICBjYXNlICc2JzoK
KyAgICAgICAgY2FzZSAnNyc6CisgICAgICAgIGNhc2UgJzgnOgorICAgICAgICBjYXNlICc5JzoK
KyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1fZGVjaW1hbFN5bWJvbHNbaW5wdXRbaV0gLSAn
MCddKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICcuJzoKKyAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKG1fZGVjaW1hbFN5bWJvbHNbRGVjaW1hbFNlcGFyYXRvckluZGV4XSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGlzTmVnYXRpdmUp
CisgICAgICAgIG1fZGVjaW1hbEZvcm1hdC0+Z2V0TmVnYXRpdmVTdWZmaXgodXN0cmluZyk7Cisg
ICAgZWxzZQorICAgICAgICBtX2RlY2ltYWxGb3JtYXQtPmdldFBvc2l0aXZlU3VmZml4KHVzdHJp
bmcpOworICAgIGJ1aWxkZXIuYXBwZW5kKHVzdHJpbmcuZ2V0QnVmZmVyKCksIHVzdHJpbmcubGVu
Z3RoKCkpOworCisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotU3RyaW5nIGNv
bnZlcnRUb0xvY2FsaXplZE51bWJlcihjb25zdCBTdHJpbmcmIGNhbm9uaWNhbE51bWJlclN0cmlu
ZywgdW5zaWduZWQgZnJhY3Rpb25EaWdpdHMpCit0ZW1wbGF0ZSA8Y2xhc3MgU3RyaW5nVHlwZT4g
Ym9vbCBtYXRjaGVzKGNvbnN0IFN0cmluZyYgdGV4dCwgdW5zaWduZWQgcG9zaXRpb24sIGNvbnN0
IFN0cmluZ1R5cGUmIHBhcnQpCiB7Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgZG8gcGFy
c2UtdGhlbi1mb3JtYXQuIEl0IG1ha2VzIHNvbWUKLSAgICAvLyBwcm9ibGVtcyBzdWNoIGFzIHJl
bW92aW5nIGxlYWRpbmcgemVyb3MsIGNoYW5naW5nIHRyYWlsaW5nCi0gICAgLy8gZGlnaXRzIHRv
IHplcm9zLgotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IHVzZSB0aGUgZnJhY3Rpb25EaWdp
dHMgYXJndW1lbnQuCisgICAgaWYgKHBhcnQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBpZiAocG9zaXRpb24gKyBwYXJ0Lmxlbmd0aCgpID4gdGV4dC5sZW5ndGgoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4ocGFydC5sZW5ndGgoKSk7ICsraSkgeworICAgICAgICBpZiAodGV4dFtw
b3NpdGlvbiArIGldICE9IHBhcnRbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQogCi0gICAgZG91YmxlIGRvdWJsZVZhbHVlID0gY2Fub25p
Y2FsTnVtYmVyU3RyaW5nLnRvRG91YmxlKCk7Ci0gICAgLy8gVGhlIGlucHV0IHN0cmluZyBtdXN0
IGJlIHZhbGlkLgotICAgIHJldHVybiBmb3JtYXRMb2NhbGl6ZWROdW1iZXIoZG91YmxlVmFsdWUs
IGZyYWN0aW9uRGlnaXRzKTsKK1N0cmluZyBJQ1VMb2NhbGU6OmNvbnZlcnRGcm9tTG9jYWxpemVk
TnVtYmVyKGNvbnN0IFN0cmluZyYgbG9jYWxpemVkKQoreworICAgIGluaXRpYWxpemVEZWNpbWFs
Rm9ybWF0KCk7CisgICAgU3RyaW5nIGlucHV0ID0gbG9jYWxpemVkLnN0cmlwV2hpdGVTcGFjZSgp
OworICAgIGlmICghbV9kZWNpbWFsRm9ybWF0IHx8IGlucHV0LmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIGlucHV0OworCisgICAgYm9vbCBpc05lZ2F0aXZlOworICAgIHVuc2lnbmVkIHN0YXJ0
SW5kZXggPSAwOworICAgIHVuc2lnbmVkIGVuZEluZGV4ID0gaW5wdXQubGVuZ3RoKCk7CisgICAg
VW5pY29kZVN0cmluZyBwcmVmaXg7CisgICAgbV9kZWNpbWFsRm9ybWF0LT5nZXROZWdhdGl2ZVBy
ZWZpeChwcmVmaXgpOworICAgIFVuaWNvZGVTdHJpbmcgc3VmZml4OworICAgIG1fZGVjaW1hbEZv
cm1hdC0+Z2V0TmVnYXRpdmVTdWZmaXgoc3VmZml4KTsKKyAgICBpZiAocHJlZml4LmlzRW1wdHko
KSAmJiBzdWZmaXguaXNFbXB0eSgpKSB7CisgICAgICAgIG1fZGVjaW1hbEZvcm1hdC0+Z2V0UG9z
aXRpdmVQcmVmaXgocHJlZml4KTsKKyAgICAgICAgbV9kZWNpbWFsRm9ybWF0LT5nZXRQb3NpdGl2
ZVN1ZmZpeChzdWZmaXgpOworICAgICAgICBBU1NFUlQoIShwcmVmaXguaXNFbXB0eSgpICYmIHN1
ZmZpeC5pc0VtcHR5KCkpKTsKKyAgICAgICAgaWYgKG1hdGNoZXMoaW5wdXQsIDAsIHByZWZpeCkg
JiYgbWF0Y2hlcyhpbnB1dCwgZW5kSW5kZXggLSBzdWZmaXgubGVuZ3RoKCksIHN1ZmZpeCkpIHsK
KyAgICAgICAgICAgIGlzTmVnYXRpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgIHN0YXJ0SW5kZXgg
PSBwcmVmaXgubGVuZ3RoKCk7CisgICAgICAgICAgICBlbmRJbmRleCAtPSBzdWZmaXgubGVuZ3Ro
KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaXNOZWdhdGl2ZSA9IHRydWU7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaWYgKG1hdGNoZXMoaW5wdXQsIDAsIHByZWZpeCkgJiYgbWF0Y2hl
cyhpbnB1dCwgZW5kSW5kZXggLSBzdWZmaXgubGVuZ3RoKCksIHN1ZmZpeCkpIHsKKyAgICAgICAg
ICAgIGlzTmVnYXRpdmUgPSB0cnVlOworICAgICAgICAgICAgc3RhcnRJbmRleCA9IHByZWZpeC5s
ZW5ndGgoKTsKKyAgICAgICAgICAgIGVuZEluZGV4IC09IHN1ZmZpeC5sZW5ndGgoKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlzTmVnYXRpdmUgPSBmYWxzZTsKKyAgICAgICAgICAg
IG1fZGVjaW1hbEZvcm1hdC0+Z2V0UG9zaXRpdmVQcmVmaXgocHJlZml4KTsKKyAgICAgICAgICAg
IG1fZGVjaW1hbEZvcm1hdC0+Z2V0UG9zaXRpdmVTdWZmaXgoc3VmZml4KTsKKyAgICAgICAgICAg
IGlmIChtYXRjaGVzKGlucHV0LCAwLCBwcmVmaXgpICYmIG1hdGNoZXMoaW5wdXQsIGVuZEluZGV4
IC0gc3VmZml4Lmxlbmd0aCgpLCBzdWZmaXgpKSB7CisgICAgICAgICAgICAgICAgc3RhcnRJbmRl
eCA9IHByZWZpeC5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBlbmRJbmRleCAtPSBzdWZmaXgu
bGVuZ3RoKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIElucHV0
IGlzIGJyb2tlbi4gUmV0dXJuaW5nIGFuIGludmFsaWQgbnVtYmVyIHN0cmluZy4KKyAgICAgICAg
ICAgICAgICByZXR1cm4gIioiOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLnJlc2VydmVDYXBhY2l0eShpbnB1
dC5sZW5ndGgoKSk7CisgICAgaWYgKGlzTmVnYXRpdmUpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCItIik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8IGVuZEluZGV4Oykg
eworICAgICAgICB1bnNpZ25lZCBzeW1ib2xJbmRleCA9IDA7CisgICAgICAgIGZvciAoOyBzeW1i
b2xJbmRleCA8IERlY2ltYWxTeW1ib2xzU2l6ZTsgKytzeW1ib2xJbmRleCkgeworICAgICAgICAg
ICAgaWYgKG1fZGVjaW1hbFN5bWJvbHNbc3ltYm9sSW5kZXhdLmxlbmd0aCgpICYmIG1hdGNoZXMo
aW5wdXQsIGksIG1fZGVjaW1hbFN5bWJvbHNbc3ltYm9sSW5kZXhdKSkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3ltYm9sSW5kZXggPj0gRGVjaW1hbFN5
bWJvbHNTaXplKQorICAgICAgICAgICAgcmV0dXJuICIqIjsKKyAgICAgICAgaWYgKHN5bWJvbElu
ZGV4ID09IERlY2ltYWxTZXBhcmF0b3JJbmRleCkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCcuJyk7CisgICAgICAgIGVsc2UgaWYgKHN5bWJvbEluZGV4ID09IEdyb3VwU2VwYXJhdG9ySW5k
ZXgpIHsKKyAgICAgICAgICAgIC8vIElnbm9yZSBncm91cCBzZXBhcmF0b3JzLgorCisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RhdGljX2Nhc3Q8VUNoYXI+KCcw
JyArIHN5bWJvbEluZGV4KSk7CisgICAgICAgIGkgKz0gbV9kZWNpbWFsU3ltYm9sc1tzeW1ib2xJ
bmRleF0ubGVuZ3RoKCk7CisgICAgfQorICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9
CisKK3N0YXRpYyBJQ1VMb2NhbGUqIGN1cnJlbnRMb2NhbGUoKQoreworICAgIHN0YXRpYyBJQ1VM
b2NhbGUqIGN1cnJlbnRJQ1VMb2NhbGUgPSBJQ1VMb2NhbGU6OmNyZWF0ZUZvckN1cnJlbnRMb2Nh
bGUoKS5sZWFrUHRyKCk7CisgICAgcmV0dXJuIGN1cnJlbnRJQ1VMb2NhbGU7Cit9CiAKK1N0cmlu
ZyBjb252ZXJ0VG9Mb2NhbGl6ZWROdW1iZXIoY29uc3QgU3RyaW5nJiBjYW5vbmljYWxOdW1iZXJT
dHJpbmcsIHVuc2lnbmVkIGZyYWN0aW9uRGlnaXRzKQoreworICAgIHJldHVybiBjdXJyZW50TG9j
YWxlKCktPmNvbnZlcnRUb0xvY2FsaXplZE51bWJlcihjYW5vbmljYWxOdW1iZXJTdHJpbmcpOwog
fQogCiBTdHJpbmcgY29udmVydEZyb21Mb2NhbGl6ZWROdW1iZXIoY29uc3QgU3RyaW5nJiBsb2Nh
bGl6ZWROdW1iZXJTdHJpbmcpCiB7Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgZG8gcGFy
c2UtdGhlbi1mb3JtYXQuIEl0IG1ha2VzIHNvbWUKLSAgICAvLyBwcm9ibGVtcyBzdWNoIGFzIHJl
bW92aW5nIGxlYWRpbmcgemVyb3MsIGNoYW5naW5nIHRyYWlsaW5nCi0gICAgLy8gZGlnaXRzIHRv
IHplcm9zLgotCi0gICAgZG91YmxlIGRvdWJsZVZhbHVlID0gcGFyc2VMb2NhbGl6ZWROdW1iZXIo
bG9jYWxpemVkTnVtYmVyU3RyaW5nKTsKLSAgICBpZiAoIWlzZmluaXRlKGRvdWJsZVZhbHVlKSkK
LSAgICAgICAgcmV0dXJuIGxvY2FsaXplZE51bWJlclN0cmluZzsKLSAgICBOdW1iZXJUb1N0cmlu
Z0J1ZmZlciBidWZmZXI7Ci0gICAgcmV0dXJuIFN0cmluZyhudW1iZXJUb1N0cmluZyhkb3VibGVW
YWx1ZSwgYnVmZmVyKSk7CisgICAgcmV0dXJuIGN1cnJlbnRMb2NhbGUoKS0+Y29udmVydEZyb21M
b2NhbGl6ZWROdW1iZXIobG9jYWxpemVkTnVtYmVyU3RyaW5nKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2Nh
bGl6ZWROdW1iZXJJQ1UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxpemVk
TnVtYmVySUNVLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTllYTgyMDZlNTk4NjcyOGU2NGM3Y2RlZTg0ZmE4MGY2
ODRjYjFjOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
TG9jYWxpemVkTnVtYmVySUNVLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTG9jYWxpemVkTnVt
YmVySUNVX2gKKyNkZWZpbmUgTG9jYWxpemVkTnVtYmVySUNVX2gKKworI2luY2x1ZGUgPHVuaWNv
ZGUvZGVjaW1mbXQuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisvLyBXZSBzaG91bGQgdXNlIHRoaXMgY2xhc3Mgb25seSBmb3IgTG9jYWxpemVk
TnVtYmVySUNVLmNwcCBhbmQgTG9jYWxpemVkTnVtYmVySUNVVGVzdC5jcHAuCitjbGFzcyBJQ1VM
b2NhbGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElDVUxvY2FsZT4gY3JlYXRl
KGNvbnN0IGNoYXIqIGxvY2FsZVN0cmluZyk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8SUNVTG9j
YWxlPiBjcmVhdGVGb3JDdXJyZW50TG9jYWxlKCk7CisgICAgU3RyaW5nIGNvbnZlcnRUb0xvY2Fs
aXplZE51bWJlcihjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgY29udmVydEZyb21Mb2NhbGl6
ZWROdW1iZXIoY29uc3QgU3RyaW5nJik7CisKK3ByaXZhdGU6CisgICAgSUNVTG9jYWxlKGNvbnN0
IGljdTo6TG9jYWxlJik7CisgICAgdm9pZCBzZXREZWNpbWFsU3ltYm9sKHVuc2lnbmVkIGluZGV4
LCBpY3U6OkRlY2ltYWxGb3JtYXRTeW1ib2xzOjpFTnVtYmVyRm9ybWF0U3ltYm9sKTsKKyAgICB2
b2lkIGluaXRpYWxpemVEZWNpbWFsRm9ybWF0KCk7CisKKyAgICBpY3U6OkxvY2FsZSBtX2xvY2Fs
ZTsKKyAgICBPd25QdHI8aWN1OjpEZWNpbWFsRm9ybWF0PiBtX2RlY2ltYWxGb3JtYXQ7CisgICAg
ZW51bSB7CisgICAgICAgIC8vIDAtOSBmb3IgZGlnaXRzLgorICAgICAgICBEZWNpbWFsU2VwYXJh
dG9ySW5kZXggPSAxMCwKKyAgICAgICAgR3JvdXBTZXBhcmF0b3JJbmRleCA9IDExLAorICAgICAg
ICBEZWNpbWFsU3ltYm9sc1NpemUKKyAgICB9OworICAgIFN0cmluZyBtX2RlY2ltYWxTeW1ib2xz
WzEyXTsKKyAgICBib29sIG1fZGlkQ3JlYXRlRGVjaW1hbEZvcm1hdDsKK307CisKK30KKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggMzVmMmIxOTkwNzc5ZDY2OWVmODA0
MDJmYjAwZjJhNTU2MTQ3YzMyNi4uZDI4NzhjZmFlOTEzZTVhMWJhZDYyM2JkNWI0NGFiN2FmZGU3
ZDU3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC0xMDAsNiArMTAwLDcgQEAK
ICAgICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0xh
eWVyQ2hyb21pdW1UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGF5ZXJUZXh0dXJlVXBk
YXRlclRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9Mb2NhbGl6ZWROdW1iZXJJQ1VUZXN0
LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvUGFpbnRBZ2dyZWdhdG9yVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL1BPREFyZW5hVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1BP
REludGVydmFsVHJlZVRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvTG9jYWxpemVkTnVtYmVySUNVVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0xvY2FsaXplZE51bWJlcklDVVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyMDNkMzVk
NzljYjUyM2NhYzkwOWRjZDY5ZjJhZTE0YjI5Y2U0NTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xvY2FsaXplZE51bWJlcklDVVRlc3QuY3BwCkBAIC0w
LDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTG9jYWxpemVkTnVtYmVy
SUNVLmgiCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCit2b2lkIHRlc3ROdW1iZXJJc1Jl
dmVyc2libGUoY29uc3QgY2hhciogbG9jYWxlU3RyaW5nLCBjb25zdCBjaGFyKiBvcmlnaW5hbCwg
Y29uc3QgY2hhciogc2hvdWxkSGF2ZSA9IDApCit7CisgICAgT3duUHRyPElDVUxvY2FsZT4gbG9j
YWxlID0gSUNVTG9jYWxlOjpjcmVhdGUobG9jYWxlU3RyaW5nKTsKKyAgICBTdHJpbmcgbG9jYWxp
emVkID0gbG9jYWxlLT5jb252ZXJ0VG9Mb2NhbGl6ZWROdW1iZXIob3JpZ2luYWwpOworICAgIGlm
IChzaG91bGRIYXZlKQorICAgICAgICBFWFBFQ1RfVFJVRShsb2NhbGl6ZWQuY29udGFpbnMoc2hv
dWxkSGF2ZSkpOworICAgIFN0cmluZyBjb252ZXJ0ZWQgPSBsb2NhbGUtPmNvbnZlcnRGcm9tTG9j
YWxpemVkTnVtYmVyKGxvY2FsaXplZCk7CisgICAgRVhQRUNUX0VRKG9yaWdpbmFsLCBjb252ZXJ0
ZWQpOworfQorCit2b2lkIHRlc3ROdW1iZXJzKGNvbnN0IGNoYXIqIGxvY2FsZVN0cmluZykKK3sK
KyAgICB0ZXN0TnVtYmVySXNSZXZlcnNpYmxlKGxvY2FsZVN0cmluZywgIjEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2Nzg5MCIpOworICAgIHRlc3ROdW1iZXJJc1JldmVyc2libGUobG9jYWxlU3Ry
aW5nLCAiLTEyMy40NTYiKTsKKyAgICB0ZXN0TnVtYmVySXNSZXZlcnNpYmxlKGxvY2FsZVN0cmlu
ZywgIi40NTYiKTsKKyAgICB0ZXN0TnVtYmVySXNSZXZlcnNpYmxlKGxvY2FsZVN0cmluZywgIi0w
LjQ1NiIpOworfQorCitURVNUKExvY2FsaXplZE51bWJlcklDVVRlc3QsIFJldmVyc2libGUpCit7
CisgICAgdGVzdE51bWJlcklzUmV2ZXJzaWJsZSgiZW5fVVMiLCAiMTIzNDU2Nzg5MDEyMzQ1Njc4
OTAxMjM0NTY3ODkwIik7CisgICAgdGVzdE51bWJlcklzUmV2ZXJzaWJsZSgiZW5fVVMiLCAiLTEy
My40NTYiLCAiLiIpOworICAgIHRlc3ROdW1iZXJJc1JldmVyc2libGUoImVuX1VTIiwgIi40NTYi
LCAiLiIpOworICAgIHRlc3ROdW1iZXJJc1JldmVyc2libGUoImVuX1VTIiwgIi0wLjQ1NiIsICIu
Iik7CisKKyAgICB0ZXN0TnVtYmVySXNSZXZlcnNpYmxlKCJmciIsICIxMjM0NTY3ODkwMTIzNDU2
Nzg5MDEyMzQ1Njc4OTAiKTsKKyAgICB0ZXN0TnVtYmVySXNSZXZlcnNpYmxlKCJmciIsICItMTIz
LjQ1NiIsICIsIik7CisgICAgdGVzdE51bWJlcklzUmV2ZXJzaWJsZSgiZnIiLCAiLjQ1NiIsICIs
Iik7CisgICAgdGVzdE51bWJlcklzUmV2ZXJzaWJsZSgiZnIiLCAiLTAuNDU2IiwgIiwiKTsKKwor
ICAgIC8vIFBlcnNpYW4gbG9jYWxlIGhhcyBhIG5lZ2F0aXZlIHByZWZpeCBhbmQgYSBuZWdhdGl2
ZSBzdWZmaXguCisgICAgdGVzdE51bWJlcnMoImZhIik7CisKKyAgICAvLyBUZXN0IHNvbWUgb2Yg
bWFqb3IgbG9jYWxlcy4KKyAgICB0ZXN0TnVtYmVycygiYXIiKTsKKyAgICB0ZXN0TnVtYmVycygi
ZGVfREUiKTsKKyAgICB0ZXN0TnVtYmVycygiZXNfRVMiKTsKKyAgICB0ZXN0TnVtYmVycygiamFf
SlAiKTsKKyAgICB0ZXN0TnVtYmVycygia29fS1IiKTsKKyAgICB0ZXN0TnVtYmVycygiemhfQ04i
KTsKKyAgICB0ZXN0TnVtYmVycygiemhfSEsiKTsKKyAgICB0ZXN0TnVtYmVycygiemhfVFciKTsK
K30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwppbmRleCBlMzFlY2JkYTYwZDg5MTc1ODM2NzcyYTFlNGQ5M2JhZWY5YjI4ODFiLi42NTE3
YTMzNzRjMDNlNmY5MTg3ZDY2M2VkM2UwOTg2M2JhODMxZGE1IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTItMDItMTYgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIERvIG5vdCByZWZvcm1hdCBzdHJpbmdzIGluIDxpbnB1dCB0eXBlPW51bWJlcj4gb24gcGxh
dGZvcm1zIHVzaW5nIExvY2FsaXplZE51bWJlcklDVS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4MzI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0
aW9ucy50eHQ6CisgICAgICAgIE5lZWQgdG8gZG8gcmViYXNlbGluZSBmb3IKKyAgICAgICAgZmFz
dC9zcGVlY2gvaW5wdXQtYXBwZWFyYW5jZS1udW1iZXJhbmRzcGVlY2guaHRtbCBiZWNhdXNlIHRo
ZQorICAgICAgICBudW1iZXIgcm91bmRpbmcgaXNzdWUgaXMgZml4ZWQuCisKIDIwMTItMDItMTYg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ3Jhc2ggaW4gdmlz
aWJsZVBvc2l0aW9uRm9ySW5kZXgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAppbmRleCAzMzM1ZTI1N2IwOWJmMmFjZGQzNTRmMzcz
MTJjMTc5NjI0MjhkZDI3Li40MzQyZGNkYjQ3ODMwNjAwOGJlYzk1NDE1M2JmN2Q2NjNhM2YwZTRh
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0
aW9ucy50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3Rh
dGlvbnMudHh0CkBAIC0zNzQzLDYgKzM3NDMsOSBAQCBCVUdfQ0FSWUNMQVJLIE1BQyA6IGVkaXRp
bmcvc3R5bGUvY3JlYXRlLWJsb2NrLWZvci1zdHlsZS0wMTIuaHRtbCA9IElNQUdFCiBCVUdfQ0FS
WUNMQVJLIE1BQyA6IGVkaXRpbmcvc3R5bGUvY3JlYXRlLWJsb2NrLWZvci1zdHlsZS0wMTMuaHRt
bCA9IElNQUdFCiBCVUdfQ0FSWUNMQVJLIE1BQyA6IGZhc3QvZG9tL2JsdXItY29udGVudGVkaXRh
YmxlLmh0bWwgPSBJTUFHRQogCisvLyBOZWVkIHJlYmFzZWxpbmUKK0JVR1dLNzgzMjYgOiBmYXN0
L3NwZWVjaC9pbnB1dC1hcHBlYXJhbmNlLW51bWJlcmFuZHNwZWVjaC5odG1sID0gRkFJTAorCiAv
LyBOZWVkIHRvIGltcGxlbWVudCBmaWxlIG5hbWUgbG9nZ2luZy4KIEJVR1dLNzY1NzIgOiBodHRw
L3Rlc3RzL2Rvd25sb2FkID0gRkFJTAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130287</attachid>
            <date>2012-03-05 22:13:55 -0800</date>
            <delta_ts>2012-03-06 00:50:36 -0800</delta_ts>
            <desc>Patch 4</desc>
            <filename>bug-78326-20120306151353.patch</filename>
            <type>text/plain</type>
            <size>24101</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5ODUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWNhZWU4NzE5ZTNhZmQy
YzBlYWFiNmIwZGJiNTIyNDNhMzI4ZjI4ZC4uYzRiODJhODRkNjZjNjNmMWZlNTQyM2FlNzdlOTI1
NmEzNTQ1MjQxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTAzLTA1ICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBEbyBub3QgcmVmb3JtYXQg
c3RyaW5ncyBpbiA8aW5wdXQgdHlwZT1udW1iZXI+IG9uIHBsYXRmb3JtcyB1c2luZyBMb2NhbGl6
ZWROdW1iZXJJQ1UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03ODMyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFdlIGhhZCBidWdzIHN1Y2ggYXMgc3RyaXBwaW5nIGxlYWRpbmcgemVyb3MsIGRyb3BwaW5n
IGxvd2VyIGRpZ2l0cworICAgICAgICBvZiBsYXJnZSBudW1iZXJzIGJlY2F1c2Ugd2UgcGFyc2Ug
YSB1c2VyLWlucHV0IHN0cmluZyB0byBhIGRvdWJsZQorICAgICAgICB2YWx1ZSwgYW5kIGdlbmVy
YXRlIGEgc3RyaW5nIGZyb20gdGhlIGRvdWJsZSB2YWx1ZS4KKworICAgICAgICBJbiBvcmRlciB0
byBhdm9pZCBzdWNoIHJlZm9ybWF0dGluZywgd2UgY29udmVydHMgbnVtYmVyIHN0cmluZ3MgYnkK
KyAgICAgICAgcmVwbGFjaW5nIHN0YW5kYXJkIGRpZ2l0cyB0byBjb3JyZXNwb25kaW5nIGxvY2Fs
aXplZCBkaWdpdHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZGVkIExvY2FsaXplZE51
bWJlcklDVS5oCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWROdW1iZXJJQ1UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SUNVTG9jYWxlOjpJQ1VMb2NhbGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OklDVUxvY2FsZTo6Y3JlYXRlKTogQSB0ZXN0aW5nIGZhY3RvcnkgZnVuY3Rp
b24uCisgICAgICAgIChXZWJDb3JlOjpJQ1VMb2NhbGU6OmNyZWF0ZUZvckN1cnJlbnRMb2NhbGUp
OiBBIHByYWN0aWNhbCBmYWN0b3J5IGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6SUNVTG9j
YWxlOjpzZXREZWNpbWFsU3ltYm9sKTogSW5pdGlhbGl6ZSBhIHN5bWJvbCB0YWJsZS4KKyAgICAg
ICAgKFdlYkNvcmU6OklDVUxvY2FsZTo6aW5pdGlhbGl6ZURlY2ltYWxGb3JtYXQpOiBJbml0aWFs
aXplIElDVSBEZWNpbWFsRm9ybWF0LgorICAgICAgICAoV2ViQ29yZTo6SUNVTG9jYWxlOjpjb252
ZXJ0VG9Mb2NhbGl6ZWROdW1iZXIpOgorICAgICAgICAgUmVwbGFjZSBjaGFyYWN0ZXJzIHRvIGNv
cnJlc3BvbmRpbmcgbG9jYWxpemVkIGNoYXJhY3RlcnMuCisgICAgICAgIChXZWJDb3JlOjptYXRj
aGVzKTogQSBoZWxwZXIgZnVuY3Rpb24gZm9yIGNvbnZlcnRGcm9tTG9jYWxpemVkTnVtYmVyLgor
ICAgICAgICAoV2ViQ29yZTo6ZW5kc1dpdGgpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OklD
VUxvY2FsZTo6ZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbik6IGRpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6SUNVTG9jYWxlOjptYXRjaGVkRGVjaW1hbFN5bWJvbEluZGV4KTogZGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpJQ1VMb2NhbGU6OmNvbnZlcnRGcm9tTG9jYWxpemVkTnVtYmVyKToKKyAgICAg
ICAgIFJlcGxhY2UgY2hhcmFjdGVycyB0byBjb3JyZXNwb25kaW5nIHN0YW5kYXJkIGNoYXJhY3Rl
cnMuCisgICAgICAgIChXZWJDb3JlOjpjdXJyZW50TG9jYWxlKTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpjb252ZXJ0VG9Mb2NhbGl6ZWROdW1iZXIpOiBVc2VzIElDVUxvY2FsZTo6Y29udmVy
dFRvTG9jYWxpemVkTnVtYmVyLgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEZyb21Mb2NhbGl6
ZWROdW1iZXIpOiBVc2VzIElDVUxvY2FsZTo6Y29udmVydEZyb21Mb2NhbGl6ZWROdW1iZXIuCisg
ICAgICAgICogcGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWROdW1iZXJJQ1UuaDogQWRkZWQuCisgICAg
ICAgIChJQ1VMb2NhbGUpOiBBZGRlZC4gVGhpcyBpcyBleHBvc2VkIHRvIFdlYktpdC9jaHJvbWl1
bS90ZXN0cy9Mb2NhbGl6ZWROdW1iZXJJQ1VUZXN0LmNwcC4KKwogMjAxMi0wMy0wNSAgQWRyaWVu
bmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgogCiAgICAgICAgIENvbXBvc2l0aW5nIG92ZXJs
YXAgdGVzdGluZyBjYW4gdGhyb3cgbGF5ZXJzIGludG8gY29tcG9zaXRpbmcgd2hlbiB0aGV5IHNo
b3VsZCBub3QgYmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGNmNGIzZDMyMTNmZmZl
NmNkODM0YWQ1NDgxOWUyMmYzMTZhN2MzMTkuLmM2YTY0NDQzNDk3MjM4NTEzMTc0ZjQ3ZThkMTk3
MTRmOGU5YjAzNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTItMDMtMDUgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IERvIG5vdCByZWZvcm1hdCBzdHJpbmdzIGluIDxpbnB1dCB0eXBlPW51bWJlcj4gb24gcGxhdGZv
cm1zIHVzaW5nIExvY2FsaXplZE51bWJlcklDVS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc4MzI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgdGVzdCBmb3IgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L0xvY2FsaXplZE51bWJlcklDVS4KKworICAgICAgICAqIFdlYktpdC5neXBpOiBBZGRlZCBMb2Nh
bGl6ZWROdW1iZXJJQ1VUZXN0LmNwcAorICAgICAgICAqIHRlc3RzL0xvY2FsaXplZE51bWJlcklD
VVRlc3QuY3BwOiBBZGRlZC4KKwogMjAxMi0wMy0wNSAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdv
b2dsZS5jb20+CiAKICAgICAgICAgW2Nocm9taXVtXSBOb3RpZnkgQ0NMYXllckltcGwgdHJlZSBv
ZiBjb250ZXh0IGxvc3MgYW5kIHJlc3RvcmF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNjUwYTk4
MzlkOGZlMTdlY2E5YmUxODM2YTEzZDEwZmNjMTY4YWVkMS4uYmUzZDdhOTc0ZWFmMDlhNGE4ZjRh
NTJjZTc4ZTY0YWRjMWY3NzU3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDIxMyw2ICs0MjEzLDcg
QEAKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L0xvY2FsaXplZERhdGVOb25lLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWROdW1iZXIuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWROdW1iZXJJQ1UuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS90ZXh0L0xvY2FsaXplZE51bWJlcklDVS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS90ZXh0L0xvY2FsaXplZE51bWJlck5vbmUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90
ZXh0L1BhcnNlclV0aWxpdGllcy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L1F1b3Rl
ZFByaW50YWJsZS5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
TG9jYWxpemVkTnVtYmVySUNVLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9j
YWxpemVkTnVtYmVySUNVLmNwcAppbmRleCAwM2RiNGQ1NDYyODlmMTQ3ZDhmOTU3OGMxNWZlOWQz
YWE3OWMwOTc1Li43ZDlkNzg2OTQxMWU2MDY0ZjdlNGVkOWUxODU1YmJjODVjMTQxNDE2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsaXplZE51bWJlcklDVS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWROdW1iZXJJQ1Uu
Y3BwCkBAIC0yOSwxMDcgKzI5LDI0MCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJMb2NhbGl6ZWROdW1iZXIuaCIKKyNpbmNsdWRlICJMb2NhbGl6ZWROdW1iZXJJQ1Uu
aCIKIAotI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlICJMb2NhbGl6ZWROdW1iZXIuaCIKKyNp
bmNsdWRlIDx1bmljb2RlL2RlY2ltZm10Lmg+CiAjaW5jbHVkZSA8dW5pY29kZS9udW1mbXQuaD4K
LSNpbmNsdWRlIDx1bmljb2RlL3BhcnNlcG9zLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL2R0b2EuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBpY3U7Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBQYXNzT3duUHRyPE51bWJlckZvcm1hdD4gY3Jl
YXRlRm9ybWF0dGVyRm9yQ3VycmVudExvY2FsZSgpCitJQ1VMb2NhbGU6OklDVUxvY2FsZShjb25z
dCBMb2NhbGUmIGxvY2FsZSkKKyAgICA6IG1fbG9jYWxlKGxvY2FsZSkKKyAgICAsIG1fZGlkQ3Jl
YXRlRGVjaW1hbEZvcm1hdChmYWxzZSkKK3sKK30KKworUGFzc093blB0cjxJQ1VMb2NhbGU+IElD
VUxvY2FsZTo6Y3JlYXRlKGNvbnN0IGNoYXIqIGxvY2FsZVN0cmluZykKK3sKKyAgICByZXR1cm4g
YWRvcHRQdHIobmV3IElDVUxvY2FsZShMb2NhbGU6OmNyZWF0ZUNhbm9uaWNhbChsb2NhbGVTdHJp
bmcpKSk7Cit9CisKK1Bhc3NPd25QdHI8SUNVTG9jYWxlPiBJQ1VMb2NhbGU6OmNyZWF0ZUZvckN1
cnJlbnRMb2NhbGUoKQogeworICAgIHJldHVybiBhZG9wdFB0cihuZXcgSUNVTG9jYWxlKExvY2Fs
ZTo6Z2V0RGVmYXVsdCgpKSk7Cit9CisKK3ZvaWQgSUNVTG9jYWxlOjpzZXREZWNpbWFsU3ltYm9s
KHVuc2lnbmVkIGluZGV4LCBEZWNpbWFsRm9ybWF0U3ltYm9sczo6RU51bWJlckZvcm1hdFN5bWJv
bCBzeW1ib2wpCit7CisgICAgVW5pY29kZVN0cmluZyB1c3RyaW5nID0gbV9kZWNpbWFsRm9ybWF0
LT5nZXREZWNpbWFsRm9ybWF0U3ltYm9scygpLT5nZXRTeW1ib2woc3ltYm9sKTsKKyAgICBtX2Rl
Y2ltYWxTeW1ib2xzW2luZGV4XSA9IFN0cmluZyh1c3RyaW5nLmdldEJ1ZmZlcigpLCB1c3RyaW5n
Lmxlbmd0aCgpKTsKK30KKwordm9pZCBJQ1VMb2NhbGU6OmluaXRpYWxpemVEZWNpbWFsRm9ybWF0
KCkKK3sKKyAgICBpZiAobV9kaWRDcmVhdGVEZWNpbWFsRm9ybWF0KQorICAgICAgICByZXR1cm47
CisgICAgbV9kaWRDcmVhdGVEZWNpbWFsRm9ybWF0ID0gdHJ1ZTsKICAgICBVRXJyb3JDb2RlIHN0
YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICBPd25QdHI8TnVtYmVyRm9ybWF0PiBmb3JtYXR0ZXIg
PSBhZG9wdFB0cihOdW1iZXJGb3JtYXQ6OmNyZWF0ZUluc3RhbmNlKHN0YXR1cykpOwotICAgIHJl
dHVybiBVX1NVQ0NFU1Moc3RhdHVzKSA/IGZvcm1hdHRlci5yZWxlYXNlKCkgOiBudWxscHRyOwor
ICAgIE51bWJlckZvcm1hdCogZm9ybWF0ID0gTnVtYmVyRm9ybWF0OjpjcmVhdGVJbnN0YW5jZSht
X2xvY2FsZSwgTnVtYmVyRm9ybWF0OjprTnVtYmVyU3R5bGUsIHN0YXR1cyk7CisgICAgaWYgKCFV
X1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZGVjaW1hbEZvcm1hdCA9
IGFkb3B0UHRyKHN0YXRpY19jYXN0PERlY2ltYWxGb3JtYXQqPihmb3JtYXQpKTsKKworICAgIHNl
dERlY2ltYWxTeW1ib2woMCwgRGVjaW1hbEZvcm1hdFN5bWJvbHM6OmtaZXJvRGlnaXRTeW1ib2wp
OworICAgIHNldERlY2ltYWxTeW1ib2woMSwgRGVjaW1hbEZvcm1hdFN5bWJvbHM6OmtPbmVEaWdp
dFN5bWJvbCk7CisgICAgc2V0RGVjaW1hbFN5bWJvbCgyLCBEZWNpbWFsRm9ybWF0U3ltYm9sczo6
a1R3b0RpZ2l0U3ltYm9sKTsKKyAgICBzZXREZWNpbWFsU3ltYm9sKDMsIERlY2ltYWxGb3JtYXRT
eW1ib2xzOjprVGhyZWVEaWdpdFN5bWJvbCk7CisgICAgc2V0RGVjaW1hbFN5bWJvbCg0LCBEZWNp
bWFsRm9ybWF0U3ltYm9sczo6a0ZvdXJEaWdpdFN5bWJvbCk7CisgICAgc2V0RGVjaW1hbFN5bWJv
bCg1LCBEZWNpbWFsRm9ybWF0U3ltYm9sczo6a0ZpdmVEaWdpdFN5bWJvbCk7CisgICAgc2V0RGVj
aW1hbFN5bWJvbCg2LCBEZWNpbWFsRm9ybWF0U3ltYm9sczo6a1NpeERpZ2l0U3ltYm9sKTsKKyAg
ICBzZXREZWNpbWFsU3ltYm9sKDcsIERlY2ltYWxGb3JtYXRTeW1ib2xzOjprU2V2ZW5EaWdpdFN5
bWJvbCk7CisgICAgc2V0RGVjaW1hbFN5bWJvbCg4LCBEZWNpbWFsRm9ybWF0U3ltYm9sczo6a0Vp
Z2h0RGlnaXRTeW1ib2wpOworICAgIHNldERlY2ltYWxTeW1ib2woOSwgRGVjaW1hbEZvcm1hdFN5
bWJvbHM6OmtOaW5lRGlnaXRTeW1ib2wpOworICAgIHNldERlY2ltYWxTeW1ib2woRGVjaW1hbFNl
cGFyYXRvckluZGV4LCBEZWNpbWFsRm9ybWF0U3ltYm9sczo6a0RlY2ltYWxTZXBhcmF0b3JTeW1i
b2wpOworICAgIHNldERlY2ltYWxTeW1ib2woR3JvdXBTZXBhcmF0b3JJbmRleCwgRGVjaW1hbEZv
cm1hdFN5bWJvbHM6OmtHcm91cGluZ1NlcGFyYXRvclN5bWJvbCk7CiB9CiAKLXN0YXRpYyBQYXNz
T3duUHRyPE51bWJlckZvcm1hdD4gY3JlYXRlRm9ybWF0dGVyRm9yQ3VycmVudExvY2FsZVRvRGlz
cGxheSgpCitTdHJpbmcgSUNVTG9jYWxlOjpjb252ZXJ0VG9Mb2NhbGl6ZWROdW1iZXIoY29uc3Qg
U3RyaW5nJiBpbnB1dCkKIHsKLSAgICBPd25QdHI8TnVtYmVyRm9ybWF0PiBmb3JtYXR0ZXIoY3Jl
YXRlRm9ybWF0dGVyRm9yQ3VycmVudExvY2FsZSgpKTsKLSAgICBpZiAoIWZvcm1hdHRlcikKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaW5pdGlhbGl6ZURlY2ltYWxGb3JtYXQoKTsKKyAg
ICBpZiAoIW1fZGVjaW1hbEZvcm1hdCB8fCBpbnB1dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBpbnB1dDsKIAotICAgIGZvcm1hdHRlci0+c2V0R3JvdXBpbmdVc2VkKEZBTFNFKTsKLSAgICBy
ZXR1cm4gZm9ybWF0dGVyLnJlbGVhc2UoKTsKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICBib29s
IGlzTmVnYXRpdmUgPSBmYWxzZTsKKyAgICBVbmljb2RlU3RyaW5nIHVzdHJpbmc7CisKKyAgICBp
ZiAoaW5wdXRbMF0gPT0gJy0nKSB7CisgICAgICAgICsraTsKKyAgICAgICAgaXNOZWdhdGl2ZSA9
IHRydWU7CisgICAgICAgIG1fZGVjaW1hbEZvcm1hdC0+Z2V0TmVnYXRpdmVQcmVmaXgodXN0cmlu
Zyk7CisgICAgfSBlbHNlCisgICAgICAgIG1fZGVjaW1hbEZvcm1hdC0+Z2V0UG9zaXRpdmVQcmVm
aXgodXN0cmluZyk7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIucmVz
ZXJ2ZUNhcGFjaXR5KGlucHV0Lmxlbmd0aCgpKTsKKyAgICBidWlsZGVyLmFwcGVuZCh1c3RyaW5n
LmdldEJ1ZmZlcigpLCB1c3RyaW5nLmxlbmd0aCgpKTsKKworICAgIGZvciAoOyBpIDwgaW5wdXQu
bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBzd2l0Y2ggKGlucHV0W2ldKSB7CisgICAgICAgIGNh
c2UgJzAnOgorICAgICAgICBjYXNlICcxJzoKKyAgICAgICAgY2FzZSAnMic6CisgICAgICAgIGNh
c2UgJzMnOgorICAgICAgICBjYXNlICc0JzoKKyAgICAgICAgY2FzZSAnNSc6CisgICAgICAgIGNh
c2UgJzYnOgorICAgICAgICBjYXNlICc3JzoKKyAgICAgICAgY2FzZSAnOCc6CisgICAgICAgIGNh
c2UgJzknOgorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobV9kZWNpbWFsU3ltYm9sc1tpbnB1
dFtpXSAtICcwJ10pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJy4nOgorICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQobV9kZWNpbWFsU3ltYm9sc1tEZWNpbWFsU2VwYXJhdG9y
SW5kZXhdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaXNO
ZWdhdGl2ZSkKKyAgICAgICAgbV9kZWNpbWFsRm9ybWF0LT5nZXROZWdhdGl2ZVN1ZmZpeCh1c3Ry
aW5nKTsKKyAgICBlbHNlCisgICAgICAgIG1fZGVjaW1hbEZvcm1hdC0+Z2V0UG9zaXRpdmVTdWZm
aXgodXN0cmluZyk7CisgICAgYnVpbGRlci5hcHBlbmQodXN0cmluZy5nZXRCdWZmZXIoKSwgdXN0
cmluZy5sZW5ndGgoKSk7CisKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCi0v
LyBUaGlzIG1pZ2h0IHJldHVybiAwLgotc3RhdGljIE51bWJlckZvcm1hdCogbnVtYmVyRm9ybWF0
dGVyRm9yUGFyc2luZygpCit0ZW1wbGF0ZSA8Y2xhc3MgU3RyaW5nVHlwZT4gYm9vbCBtYXRjaGVz
KGNvbnN0IFN0cmluZyYgdGV4dCwgdW5zaWduZWQgcG9zaXRpb24sIGNvbnN0IFN0cmluZ1R5cGUm
IHBhcnQpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBzdGF0aWMgTnVtYmVy
Rm9ybWF0KiBmb3JtYXR0ZXIgPSBjcmVhdGVGb3JtYXR0ZXJGb3JDdXJyZW50TG9jYWxlKCkubGVh
a1B0cigpOwotICAgIHJldHVybiBmb3JtYXR0ZXI7CisgICAgaWYgKHBhcnQuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAocG9zaXRpb24gKyBwYXJ0Lmxlbmd0aCgpID4g
dGV4dC5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocGFydC5sZW5ndGgoKSk7ICsraSkgewor
ICAgICAgICBpZiAodGV4dFtwb3NpdGlvbiArIGldICE9IHBhcnRbaV0pCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBUaGlzIG1pZ2h0
IHJldHVybiAwLgotc3RhdGljIE51bWJlckZvcm1hdCogbnVtYmVyRm9ybWF0dGVyRm9yRGlzcGxh
eSgpCitzdGF0aWMgYm9vbCBlbmRzV2l0aChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFVuaWNv
ZGVTdHJpbmcmIHN1ZmZpeCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHN0
YXRpYyBOdW1iZXJGb3JtYXQqIGZvcm1hdHRlciA9IGNyZWF0ZUZvcm1hdHRlckZvckN1cnJlbnRM
b2NhbGVUb0Rpc3BsYXkoKS5sZWFrUHRyKCk7Ci0gICAgcmV0dXJuIGZvcm1hdHRlcjsKKyAgICBp
ZiAoc3VmZml4Lmxlbmd0aCgpIDw9IDApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHVuc2ln
bmVkIHN1ZmZpeExlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWZmaXgubGVuZ3RoKCkp
OworICAgIGlmIChzdWZmaXhMZW5ndGggPiB0ZXh0Lmxlbmd0aCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgdW5zaWduZWQgc3RhcnQgPSB0ZXh0Lmxlbmd0aCgpIC0gc3VmZml4TGVuZ3Ro
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdWZmaXhMZW5ndGg7ICsraSkgeworICAg
ICAgICBpZiAodGV4dFtzdGFydCArIGldICE9IHN1ZmZpeFtpXSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBkb3VibGUgcGFy
c2VMb2NhbGl6ZWROdW1iZXIoY29uc3QgU3RyaW5nJiBudW1iZXJTdHJpbmcpCitib29sIElDVUxv
Y2FsZTo6ZGV0ZWN0U2lnbkFuZEdldERpZ2l0UmFuZ2UoY29uc3QgU3RyaW5nJiBpbnB1dCwgYm9v
bCYgaXNOZWdhdGl2ZSwgdW5zaWduZWQmIHN0YXJ0SW5kZXgsIHVuc2lnbmVkJiBlbmRJbmRleCkK
IHsKLSAgICBpZiAobnVtYmVyU3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bWVy
aWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgIE51bWJlckZvcm1hdCogZm9ybWF0
dGVyID0gbnVtYmVyRm9ybWF0dGVyRm9yUGFyc2luZygpOwotICAgIGlmICghZm9ybWF0dGVyKQot
ICAgICAgICByZXR1cm4gbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAg
VW5pY29kZVN0cmluZyBudW1iZXJVbmljb2RlU3RyaW5nKG51bWJlclN0cmluZy5jaGFyYWN0ZXJz
KCksIG51bWJlclN0cmluZy5sZW5ndGgoKSk7Ci0gICAgRm9ybWF0dGFibGUgcmVzdWx0OwotICAg
IFBhcnNlUG9zaXRpb24gcG9zaXRpb24oMCk7Ci0gICAgZm9ybWF0dGVyLT5wYXJzZShudW1iZXJV
bmljb2RlU3RyaW5nLCByZXN1bHQsIHBvc2l0aW9uKTsKLSAgICBpZiAocG9zaXRpb24uZ2V0SW5k
ZXgoKSAhPSBudW1iZXJVbmljb2RlU3RyaW5nLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gbnVt
ZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgVUVycm9yQ29kZSBzdGF0dXMg
PSBVX1pFUk9fRVJST1I7Ci0gICAgZG91YmxlIG51bWVyaWNSZXN1bHQgPSByZXN1bHQuZ2V0RG91
YmxlKHN0YXR1cyk7Ci0gICAgcmV0dXJuIFVfU1VDQ0VTUyhzdGF0dXMpID8gbnVtZXJpY1Jlc3Vs
dCA6IG51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgIHN0YXJ0SW5kZXgg
PSAwOworICAgIGVuZEluZGV4ID0gaW5wdXQubGVuZ3RoKCk7CisgICAgVW5pY29kZVN0cmluZyBw
cmVmaXg7CisgICAgbV9kZWNpbWFsRm9ybWF0LT5nZXROZWdhdGl2ZVByZWZpeChwcmVmaXgpOwor
ICAgIFVuaWNvZGVTdHJpbmcgc3VmZml4OworICAgIG1fZGVjaW1hbEZvcm1hdC0+Z2V0TmVnYXRp
dmVTdWZmaXgoc3VmZml4KTsKKyAgICBpZiAocHJlZml4LmlzRW1wdHkoKSAmJiBzdWZmaXguaXNF
bXB0eSgpKSB7CisgICAgICAgIG1fZGVjaW1hbEZvcm1hdC0+Z2V0UG9zaXRpdmVQcmVmaXgocHJl
Zml4KTsKKyAgICAgICAgbV9kZWNpbWFsRm9ybWF0LT5nZXRQb3NpdGl2ZVN1ZmZpeChzdWZmaXgp
OworICAgICAgICBBU1NFUlQoIShwcmVmaXguaXNFbXB0eSgpICYmIHN1ZmZpeC5pc0VtcHR5KCkp
KTsKKyAgICAgICAgaWYgKG1hdGNoZXMoaW5wdXQsIDAsIHByZWZpeCkgJiYgZW5kc1dpdGgoaW5w
dXQsIHN1ZmZpeCkpIHsKKyAgICAgICAgICAgIGlzTmVnYXRpdmUgPSBmYWxzZTsKKyAgICAgICAg
ICAgIHN0YXJ0SW5kZXggPSBwcmVmaXgubGVuZ3RoKCk7CisgICAgICAgICAgICBlbmRJbmRleCAt
PSBzdWZmaXgubGVuZ3RoKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaXNOZWdhdGl2
ZSA9IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1hdGNoZXMoaW5wdXQsIDAsIHBy
ZWZpeCkgJiYgZW5kc1dpdGgoaW5wdXQsIHN1ZmZpeCkpIHsKKyAgICAgICAgICAgIGlzTmVnYXRp
dmUgPSB0cnVlOworICAgICAgICAgICAgc3RhcnRJbmRleCA9IHByZWZpeC5sZW5ndGgoKTsKKyAg
ICAgICAgICAgIGVuZEluZGV4IC09IHN1ZmZpeC5sZW5ndGgoKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGlzTmVnYXRpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fZGVjaW1hbEZv
cm1hdC0+Z2V0UG9zaXRpdmVQcmVmaXgocHJlZml4KTsKKyAgICAgICAgICAgIG1fZGVjaW1hbEZv
cm1hdC0+Z2V0UG9zaXRpdmVTdWZmaXgoc3VmZml4KTsKKyAgICAgICAgICAgIGlmIChtYXRjaGVz
KGlucHV0LCAwLCBwcmVmaXgpICYmIGVuZHNXaXRoKGlucHV0LCBzdWZmaXgpKSB7CisgICAgICAg
ICAgICAgICAgc3RhcnRJbmRleCA9IHByZWZpeC5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBl
bmRJbmRleCAtPSBzdWZmaXgubGVuZ3RoKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXN0YXRpYyBTdHJpbmcgZm9ybWF0TG9jYWxpemVkTnVtYmVyKGRvdWJsZSBudW1iZXIs
IHVuc2lnbmVkIGZyYWN0aW9uRGlnaXRzKQordW5zaWduZWQgSUNVTG9jYWxlOjptYXRjaGVkRGVj
aW1hbFN5bWJvbEluZGV4KGNvbnN0IFN0cmluZyYgaW5wdXQsIHVuc2lnbmVkJiBwb3NpdGlvbikK
IHsKLSAgICBOdW1iZXJGb3JtYXQqIGZvcm1hdHRlciA9IG51bWJlckZvcm1hdHRlckZvckRpc3Bs
YXkoKTsKLSAgICBpZiAoIWZvcm1hdHRlcikKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAg
IFVuaWNvZGVTdHJpbmcgcmVzdWx0OwotICAgIGZvcm1hdHRlci0+c2V0TWF4aW11bUZyYWN0aW9u
RGlnaXRzKGNsYW1wVG9JbnRlZ2VyKGZyYWN0aW9uRGlnaXRzKSk7Ci0gICAgZm9ybWF0dGVyLT5m
b3JtYXQobnVtYmVyLCByZXN1bHQpOwotICAgIHJldHVybiBTdHJpbmcocmVzdWx0LmdldEJ1ZmZl
cigpLCByZXN1bHQubGVuZ3RoKCkpOworICAgIGZvciAodW5zaWduZWQgc3ltYm9sSW5kZXggPSAw
OyBzeW1ib2xJbmRleCA8IERlY2ltYWxTeW1ib2xzU2l6ZTsgKytzeW1ib2xJbmRleCkgeworICAg
ICAgICBpZiAobV9kZWNpbWFsU3ltYm9sc1tzeW1ib2xJbmRleF0ubGVuZ3RoKCkgJiYgbWF0Y2hl
cyhpbnB1dCwgcG9zaXRpb24sIG1fZGVjaW1hbFN5bWJvbHNbc3ltYm9sSW5kZXhdKSkgeworICAg
ICAgICAgICAgcG9zaXRpb24gKz0gbV9kZWNpbWFsU3ltYm9sc1tzeW1ib2xJbmRleF0ubGVuZ3Ro
KCk7CisgICAgICAgICAgICByZXR1cm4gc3ltYm9sSW5kZXg7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIERlY2ltYWxTeW1ib2xzU2l6ZTsKIH0KIAotU3RyaW5nIGNvbnZlcnRUb0xvY2Fs
aXplZE51bWJlcihjb25zdCBTdHJpbmcmIGNhbm9uaWNhbE51bWJlclN0cmluZywgdW5zaWduZWQg
ZnJhY3Rpb25EaWdpdHMpCitTdHJpbmcgSUNVTG9jYWxlOjpjb252ZXJ0RnJvbUxvY2FsaXplZE51
bWJlcihjb25zdCBTdHJpbmcmIGxvY2FsaXplZCkKIHsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IG5vdCBkbyBwYXJzZS10aGVuLWZvcm1hdC4gSXQgbWFrZXMgc29tZQotICAgIC8vIHByb2JsZW1z
IHN1Y2ggYXMgcmVtb3ZpbmcgbGVhZGluZyB6ZXJvcywgY2hhbmdpbmcgdHJhaWxpbmcKLSAgICAv
LyBkaWdpdHMgdG8gemVyb3MuCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgdXNlIHRoZSBm
cmFjdGlvbkRpZ2l0cyBhcmd1bWVudC4KKyAgICBpbml0aWFsaXplRGVjaW1hbEZvcm1hdCgpOwor
ICAgIFN0cmluZyBpbnB1dCA9IGxvY2FsaXplZC5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICBpZiAo
IW1fZGVjaW1hbEZvcm1hdCB8fCBpbnB1dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBpbnB1
dDsKKworICAgIGJvb2wgaXNOZWdhdGl2ZTsKKyAgICB1bnNpZ25lZCBzdGFydEluZGV4OworICAg
IHVuc2lnbmVkIGVuZEluZGV4OworICAgIGlmICghZGV0ZWN0U2lnbkFuZEdldERpZ2l0UmFuZ2Uo
aW5wdXQsIGlzTmVnYXRpdmUsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KSkgeworICAgICAgICAvLyBJ
bnB1dCBpcyBicm9rZW4uIFJldHVybmluZyBhbiBpbnZhbGlkIG51bWJlciBzdHJpbmcuCisgICAg
ICAgIHJldHVybiAiKiI7CisgICAgfQogCi0gICAgZG91YmxlIGRvdWJsZVZhbHVlID0gY2Fub25p
Y2FsTnVtYmVyU3RyaW5nLnRvRG91YmxlKCk7Ci0gICAgLy8gVGhlIGlucHV0IHN0cmluZyBtdXN0
IGJlIHZhbGlkLgotICAgIHJldHVybiBmb3JtYXRMb2NhbGl6ZWROdW1iZXIoZG91YmxlVmFsdWUs
IGZyYWN0aW9uRGlnaXRzKTsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRl
ci5yZXNlcnZlQ2FwYWNpdHkoaW5wdXQubGVuZ3RoKCkpOworICAgIGlmIChpc05lZ2F0aXZlKQor
ICAgICAgICBidWlsZGVyLmFwcGVuZCgiLSIpOworICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0
SW5kZXg7IGkgPCBlbmRJbmRleDspIHsKKyAgICAgICAgdW5zaWduZWQgc3ltYm9sSW5kZXggPSBt
YXRjaGVkRGVjaW1hbFN5bWJvbEluZGV4KGlucHV0LCBpKTsKKyAgICAgICAgaWYgKHN5bWJvbElu
ZGV4ID49IERlY2ltYWxTeW1ib2xzU2l6ZSkKKyAgICAgICAgICAgIHJldHVybiAiKiI7CisgICAg
ICAgIGlmIChzeW1ib2xJbmRleCA9PSBEZWNpbWFsU2VwYXJhdG9ySW5kZXgpCisgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZCgnLicpOworICAgICAgICBlbHNlIGlmIChzeW1ib2xJbmRleCA9PSBH
cm91cFNlcGFyYXRvckluZGV4KSB7CisgICAgICAgICAgICAvLyBJZ25vcmUgZ3JvdXAgc2VwYXJh
dG9ycy4KIAorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0YXRp
Y19jYXN0PFVDaGFyPignMCcgKyBzeW1ib2xJbmRleCkpOworICAgIH0KKyAgICByZXR1cm4gYnVp
bGRlci50b1N0cmluZygpOworfQorCitzdGF0aWMgSUNVTG9jYWxlKiBjdXJyZW50TG9jYWxlKCkK
K3sKKyAgICBzdGF0aWMgSUNVTG9jYWxlKiBjdXJyZW50SUNVTG9jYWxlID0gSUNVTG9jYWxlOjpj
cmVhdGVGb3JDdXJyZW50TG9jYWxlKCkubGVha1B0cigpOworICAgIHJldHVybiBjdXJyZW50SUNV
TG9jYWxlOworfQorCitTdHJpbmcgY29udmVydFRvTG9jYWxpemVkTnVtYmVyKGNvbnN0IFN0cmlu
ZyYgY2Fub25pY2FsTnVtYmVyU3RyaW5nLCB1bnNpZ25lZCBmcmFjdGlvbkRpZ2l0cykKK3sKKyAg
ICByZXR1cm4gY3VycmVudExvY2FsZSgpLT5jb252ZXJ0VG9Mb2NhbGl6ZWROdW1iZXIoY2Fub25p
Y2FsTnVtYmVyU3RyaW5nKTsKIH0KIAogU3RyaW5nIGNvbnZlcnRGcm9tTG9jYWxpemVkTnVtYmVy
KGNvbnN0IFN0cmluZyYgbG9jYWxpemVkTnVtYmVyU3RyaW5nKQogewotICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgbm90IGRvIHBhcnNlLXRoZW4tZm9ybWF0LiBJdCBtYWtlcyBzb21lCi0gICAgLy8g
cHJvYmxlbXMgc3VjaCBhcyByZW1vdmluZyBsZWFkaW5nIHplcm9zLCBjaGFuZ2luZyB0cmFpbGlu
ZwotICAgIC8vIGRpZ2l0cyB0byB6ZXJvcy4KLQotICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IHBh
cnNlTG9jYWxpemVkTnVtYmVyKGxvY2FsaXplZE51bWJlclN0cmluZyk7Ci0gICAgaWYgKCFpc2Zp
bml0ZShkb3VibGVWYWx1ZSkpCi0gICAgICAgIHJldHVybiBsb2NhbGl6ZWROdW1iZXJTdHJpbmc7
Ci0gICAgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyOwotICAgIHJldHVybiBTdHJpbmcobnVt
YmVyVG9TdHJpbmcoZG91YmxlVmFsdWUsIGJ1ZmZlcikpOworICAgIHJldHVybiBjdXJyZW50TG9j
YWxlKCktPmNvbnZlcnRGcm9tTG9jYWxpemVkTnVtYmVyKGxvY2FsaXplZE51bWJlclN0cmluZyk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvTG9jYWxpemVkTnVtYmVySUNVLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L0xvY2FsaXplZE51bWJlcklDVS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM3NjMxZjRjNWM1MzFm
OWE0YzMwYTQxZDdmN2ZmZjlkYmQzOTQ0NGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsaXplZE51bWJlcklDVS5oCkBAIC0wLDAgKzEsNzAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIExvY2FsaXplZE51bWJlcklDVV9oCisjZGVmaW5lIExvY2FsaXplZE51bWJlcklDVV9o
CisKKyNpbmNsdWRlIDx1bmljb2RlL2RlY2ltZm10Lmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gV2Ugc2hvdWxkIHVzZSB0aGlzIGNsYXNz
IG9ubHkgZm9yIExvY2FsaXplZE51bWJlcklDVS5jcHAgYW5kIExvY2FsaXplZE51bWJlcklDVVRl
c3QuY3BwLgorY2xhc3MgSUNVTG9jYWxlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0
cjxJQ1VMb2NhbGU+IGNyZWF0ZShjb25zdCBjaGFyKiBsb2NhbGVTdHJpbmcpOworICAgIHN0YXRp
YyBQYXNzT3duUHRyPElDVUxvY2FsZT4gY3JlYXRlRm9yQ3VycmVudExvY2FsZSgpOworICAgIFN0
cmluZyBjb252ZXJ0VG9Mb2NhbGl6ZWROdW1iZXIoY29uc3QgU3RyaW5nJik7CisgICAgU3RyaW5n
IGNvbnZlcnRGcm9tTG9jYWxpemVkTnVtYmVyKGNvbnN0IFN0cmluZyYpOworCitwcml2YXRlOgor
ICAgIElDVUxvY2FsZShjb25zdCBpY3U6OkxvY2FsZSYpOworICAgIHZvaWQgc2V0RGVjaW1hbFN5
bWJvbCh1bnNpZ25lZCBpbmRleCwgaWN1OjpEZWNpbWFsRm9ybWF0U3ltYm9sczo6RU51bWJlckZv
cm1hdFN5bWJvbCk7CisgICAgdm9pZCBpbml0aWFsaXplRGVjaW1hbEZvcm1hdCgpOworCisgICAg
Ym9vbCBkZXRlY3RTaWduQW5kR2V0RGlnaXRSYW5nZShjb25zdCBTdHJpbmcmIGlucHV0LCBib29s
JiBpc05lZ2F0aXZlLCB1bnNpZ25lZCYgc3RhcnRJbmRleCwgdW5zaWduZWQmIGVuZEluZGV4KTsK
KyAgICB1bnNpZ25lZCBtYXRjaGVkRGVjaW1hbFN5bWJvbEluZGV4KGNvbnN0IFN0cmluZyYgaW5w
dXQsIHVuc2lnbmVkJiBwb3NpdGlvbik7CisKKyAgICBpY3U6OkxvY2FsZSBtX2xvY2FsZTsKKyAg
ICBPd25QdHI8aWN1OjpEZWNpbWFsRm9ybWF0PiBtX2RlY2ltYWxGb3JtYXQ7CisgICAgZW51bSB7
CisgICAgICAgIC8vIDAtOSBmb3IgZGlnaXRzLgorICAgICAgICBEZWNpbWFsU2VwYXJhdG9ySW5k
ZXggPSAxMCwKKyAgICAgICAgR3JvdXBTZXBhcmF0b3JJbmRleCA9IDExLAorICAgICAgICBEZWNp
bWFsU3ltYm9sc1NpemUKKyAgICB9OworICAgIFN0cmluZyBtX2RlY2ltYWxTeW1ib2xzW0RlY2lt
YWxTeW1ib2xzU2l6ZV07CisgICAgYm9vbCBtX2RpZENyZWF0ZURlY2ltYWxGb3JtYXQ7Cit9Owor
Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDIzYWUzODU3ZWU0
NWVjZGMzMTMyNWU1NDM5ZmUzYWFjYjdjZDI4YzkuLjc0YTdhMmJjNjYwMjMyOGI1ODliNzk4MWVj
YzM3YTg0MDc5YmEyODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtMTA2LDYg
KzEwNiw3IEBACiAgICAgICAgICAgICAndGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9MYXllclRleHR1cmVVcGRhdGVyVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0xldmVsREJUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvTG9jYWxpemVk
TnVtYmVySUNVVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1BhaW50QWdncmVnYXRvclRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9QT0RBcmVuYVRlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9QT0RJbnRlcnZhbFRyZWVUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xvY2FsaXplZE51bWJlcklDVVRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Mb2NhbGl6ZWROdW1iZXJJQ1VUZXN0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42MjAzZDM1ZDc5Y2I1MjNjYWM5MDlkY2Q2OWYyYWUxNGIyOWNlNDU0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Mb2NhbGl6ZWROdW1iZXJJQ1VU
ZXN0LmNwcApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxv
Y2FsaXplZE51bWJlcklDVS5oIgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwordm9pZCB0
ZXN0TnVtYmVySXNSZXZlcnNpYmxlKGNvbnN0IGNoYXIqIGxvY2FsZVN0cmluZywgY29uc3QgY2hh
ciogb3JpZ2luYWwsIGNvbnN0IGNoYXIqIHNob3VsZEhhdmUgPSAwKQoreworICAgIE93blB0cjxJ
Q1VMb2NhbGU+IGxvY2FsZSA9IElDVUxvY2FsZTo6Y3JlYXRlKGxvY2FsZVN0cmluZyk7CisgICAg
U3RyaW5nIGxvY2FsaXplZCA9IGxvY2FsZS0+Y29udmVydFRvTG9jYWxpemVkTnVtYmVyKG9yaWdp
bmFsKTsKKyAgICBpZiAoc2hvdWxkSGF2ZSkKKyAgICAgICAgRVhQRUNUX1RSVUUobG9jYWxpemVk
LmNvbnRhaW5zKHNob3VsZEhhdmUpKTsKKyAgICBTdHJpbmcgY29udmVydGVkID0gbG9jYWxlLT5j
b252ZXJ0RnJvbUxvY2FsaXplZE51bWJlcihsb2NhbGl6ZWQpOworICAgIEVYUEVDVF9FUShvcmln
aW5hbCwgY29udmVydGVkKTsKK30KKwordm9pZCB0ZXN0TnVtYmVycyhjb25zdCBjaGFyKiBsb2Nh
bGVTdHJpbmcpCit7CisgICAgdGVzdE51bWJlcklzUmV2ZXJzaWJsZShsb2NhbGVTdHJpbmcsICIx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKTsKKyAgICB0ZXN0TnVtYmVySXNSZXZlcnNp
YmxlKGxvY2FsZVN0cmluZywgIi0xMjMuNDU2Iik7CisgICAgdGVzdE51bWJlcklzUmV2ZXJzaWJs
ZShsb2NhbGVTdHJpbmcsICIuNDU2Iik7CisgICAgdGVzdE51bWJlcklzUmV2ZXJzaWJsZShsb2Nh
bGVTdHJpbmcsICItMC40NTYiKTsKK30KKworVEVTVChMb2NhbGl6ZWROdW1iZXJJQ1VUZXN0LCBS
ZXZlcnNpYmxlKQoreworICAgIHRlc3ROdW1iZXJJc1JldmVyc2libGUoImVuX1VTIiwgIjEyMzQ1
Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIpOworICAgIHRlc3ROdW1iZXJJc1JldmVyc2libGUo
ImVuX1VTIiwgIi0xMjMuNDU2IiwgIi4iKTsKKyAgICB0ZXN0TnVtYmVySXNSZXZlcnNpYmxlKCJl
bl9VUyIsICIuNDU2IiwgIi4iKTsKKyAgICB0ZXN0TnVtYmVySXNSZXZlcnNpYmxlKCJlbl9VUyIs
ICItMC40NTYiLCAiLiIpOworCisgICAgdGVzdE51bWJlcklzUmV2ZXJzaWJsZSgiZnIiLCAiMTIz
NDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIik7CisgICAgdGVzdE51bWJlcklzUmV2ZXJzaWJs
ZSgiZnIiLCAiLTEyMy40NTYiLCAiLCIpOworICAgIHRlc3ROdW1iZXJJc1JldmVyc2libGUoImZy
IiwgIi40NTYiLCAiLCIpOworICAgIHRlc3ROdW1iZXJJc1JldmVyc2libGUoImZyIiwgIi0wLjQ1
NiIsICIsIik7CisKKyAgICAvLyBQZXJzaWFuIGxvY2FsZSBoYXMgYSBuZWdhdGl2ZSBwcmVmaXgg
YW5kIGEgbmVnYXRpdmUgc3VmZml4LgorICAgIHRlc3ROdW1iZXJzKCJmYSIpOworCisgICAgLy8g
VGVzdCBzb21lIG9mIG1ham9yIGxvY2FsZXMuCisgICAgdGVzdE51bWJlcnMoImFyIik7CisgICAg
dGVzdE51bWJlcnMoImRlX0RFIik7CisgICAgdGVzdE51bWJlcnMoImVzX0VTIik7CisgICAgdGVz
dE51bWJlcnMoImphX0pQIik7CisgICAgdGVzdE51bWJlcnMoImtvX0tSIik7CisgICAgdGVzdE51
bWJlcnMoInpoX0NOIik7CisgICAgdGVzdE51bWJlcnMoInpoX0hLIik7CisgICAgdGVzdE51bWJl
cnMoInpoX1RXIik7Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggM2M3NTk3ZGIzNjQ0YmU5NTgzYjY0ZjFkZWFkODM1NjI0
NjMyZGQ0Zi4uOTkxMDQ0ZDViMTM2NjRiMDFhZGZhYmUyZGIzMWMzZDg5YTgwYzZkMyAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE1IEBACisyMDEyLTAzLTA1ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBEbyBub3QgcmVmb3JtYXQgc3RyaW5ncyBpbiA8aW5wdXQgdHlwZT1u
dW1iZXI+IG9uIHBsYXRmb3JtcyB1c2luZyBMb2NhbGl6ZWROdW1iZXJJQ1UuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODMyNgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
dGVzdF9leHBlY3RhdGlvbnMudHh0OgorICAgICAgICBOZWVkIHRvIGRvIHJlYmFzZWxpbmUgZm9y
CisgICAgICAgIGZhc3Qvc3BlZWNoL2lucHV0LWFwcGVhcmFuY2UtbnVtYmVyYW5kc3BlZWNoLmh0
bWwgYmVjYXVzZSB0aGUKKyAgICAgICAgbnVtYmVyIHJvdW5kaW5nIGlzc3VlIGlzIGZpeGVkLgor
CiAyMDEyLTAzLTA1ICBBZHJpZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CiAKICAgICAg
ICAgQ29tcG9zaXRpbmcgb3ZlcmxhcCB0ZXN0aW5nIGNhbiB0aHJvdyBsYXllcnMgaW50byBjb21w
b3NpdGluZyB3aGVuIHRoZXkgc2hvdWxkIG5vdCBiZS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAppbmRleCAwYjE3MTg0ZThlNDJh
MTIzNmI3Njc0ZDFhNjgyOWY5ODQ0NTM2NWQzLi4zYTM4NjYzOTNjMzUwMDBmOWQ4MWYxZGM5N2E4
YzU4ZWY4ZmUwYmQ3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90
ZXN0X2V4cGVjdGF0aW9ucy50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
dGVzdF9leHBlY3RhdGlvbnMudHh0CkBAIC0zNDk2LDYgKzM0OTYsOSBAQCBCVUdXSzc2NjQ3IFdJ
TiBMSU5VWCA6IHRhYmxlcy9tb3ppbGxhX2V4cGVjdGVkX2ZhaWx1cmVzL2J1Z3MvOTc2MTkuaHRt
bCA9IElNQUdFKwogQlVHV0s2OTcxNCBXSU4gTElOVVggOiBzdmcvY2xpcC1wYXRoL2NsaXAtcGF0
aC10c3Bhbi1hbmQtc3Ryb2tlLnN2ZyA9IElNQUdFK1RFWFQKIEJVR1dLNzcxMDMgTUFDIDogc3Zn
L3JlcGFpbnQvaW1hZ2UtaHJlZi1jaGFuZ2Uuc3ZnID0gSU1BR0UKIAorLy8gTmVlZCByZWJhc2Vs
aW5lCitCVUdXSzc4MzI2IDogZmFzdC9zcGVlY2gvaW5wdXQtYXBwZWFyYW5jZS1udW1iZXJhbmRz
cGVlY2guaHRtbCA9IEZBSUwKKwogLy8gTmVlZCB0byBpbXBsZW1lbnQgZmlsZSBuYW1lIGxvZ2dp
bmcuCiBCVUdXSzc2NTcyIDogaHR0cC90ZXN0cy9kb3dubG9hZCA9IEZBSUwKIAo=
</data>
<flag name="review"
          id="133248"
          type_id="1"
          status="+"
          setter="morrita"
    />
          </attachment>
      

    </bug>

</bugzilla>