<?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>47864</bug_id>
          
          <creation_ts>2010-10-18 17:36:31 -0700</creation_ts>
          <short_desc>Convert WebNSUserDefaultsExtras.m to .mm</short_desc>
          <delta_ts>2010-10-19 11:00:11 -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>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>ddkilzer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>295859</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-18 17:36:31 -0700</bug_when>
    <thetext>Patch forthcoming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295869</commentid>
    <comment_count>1</comment_count>
      <attachid>71107</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-18 17:45:16 -0700</bug_when>
    <thetext>Created attachment 71107
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296264</commentid>
    <comment_count>2</comment_count>
      <attachid>71107</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-10-19 10:36:32 -0700</bug_when>
    <thetext>Comment on attachment 71107
proposed patch

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

r=me, but consider the suggestions below.

&gt; WebKit/ChangeLog:5
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Need a short description and bug URL (OOPS!)

Need bug link, bug title and description here.

&gt; WebKit/mac/ChangeLog:10
&gt; +        - Fixed notification center observer to actually work (previsouly, it only picked up changes

Typo: &quot;previsouly&quot; should be &quot;previously&quot;.

&gt; WebKit/mac/Misc/WebNSUserDefaultsExtras.mm:55
&gt; +    NSMutableString *result = [[lowercaseLanguageCode mutableCopy] autorelease];
&gt;      [result replaceCharactersInRange:NSMakeRange(2, 1) withString:@&quot;-&quot;];
&gt; -    return [result autorelease];
&gt; +    return [result copy];

Returning a non-mutable copy of an autoreleased, mutable copy seems to create unnecessary churn.  Why can&apos;t you just return the autoreleased, mutable object?   I&apos;ve never heard of any issue returning an NSMutableString* when the method signature expects NSString*.

&gt; WebKit/mac/Misc/WebNSUserDefaultsExtras.mm:61
&gt; +static BOOL languageChangeObserverAdded = NO;

I&apos;m pretty sure we try to use a &apos;bool&apos; C++ type when possible, so there&apos;s no need to use &apos;BOOL&apos; here.

I think this variable could also be moved inside the static method instead of leaving it out here.  More suggestions below.

&gt; WebKit/mac/Misc/WebNSUserDefaultsExtras.mm:85
&gt; +        if ([languages count] == 0)

Optional (I seem to recall a discussion on webkit-dev about this, but I had no strong opinions either way):

    if (![language count])

&gt; WebKit/mac/Misc/WebNSUserDefaultsExtras.mm:94
&gt; +        addLanguageChangeObserver();

Why not just inline addLanguageChangeObserver()?  It only contains a single method call.

Or better yet, move the static languageChangeObserverAdded variable here an initialize it by calling addLanguageChangeObserver(), and change that method to return a bool:

    static bool languageChangeObserverAdded = addLanguageChangeObserver();

Then you get the one-time initialization for &quot;free&quot; thanks to C++.  The only thing to worry about is the compiler eliminating this as &quot;dead code&quot;, which I don&apos;t think it should do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296268</commentid>
    <comment_count>3</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-10-19 10:38:16 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Or better yet, move the static languageChangeObserverAdded variable here an initialize it by calling addLanguageChangeObserver(), and change that method to return a bool:
&gt; 
&gt;     static bool languageChangeObserverAdded = addLanguageChangeObserver();
&gt; 
&gt; Then you get the one-time initialization for &quot;free&quot; thanks to C++.  The only thing to worry about is the compiler eliminating this as &quot;dead code&quot;, which I don&apos;t think it should do.

And add an assert for debug builds:

    ASSERT(languageChangeObserverAdded);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296282</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-19 11:00:11 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/70069&gt;. Made most suggested changes, but not the deeper refactoring of how the observer is registered. This is going to be redone soon for WebKit2 anyway.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71107</attachid>
            <date>2010-10-18 17:45:16 -0700</date>
            <delta_ts>2010-10-19 10:36:32 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>WebNSUserDefaultsExtras.txt</filename>
            <type>text/plain</type>
            <size>21933</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L0NoYW5nZUxvZwko
cmV2aXNpb24gNzAwMTEpCisrKyBXZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTEgQEAKKzIwMTAtMTAtMTggIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVl
ZCBhIHNob3J0IGRlc2NyaXB0aW9uIGFuZCBidWcgVVJMIChPT1BTISkKKworICAgICAgICAqIFdl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDEwLTEwLTEyICBFcmljIFNlaWRl
bCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4K
SW5kZXg6IFdlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDY5
OTY0KQorKysgV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzAsNyArMTMwLDcgQEAKIAkJNjVFMEY4ODQwODUwMDkxNzAwN0U1Q0I5IC8q
IFdlYk5TVVJMUmVxdWVzdEV4dHJhcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjVFMEY4ODIwODUwMDkxNzAwN0U1Q0I5IC8qIFdlYk5TVVJMUmVxdWVz
dEV4dHJhcy5oICovOyB9OwogCQk2NUUwRjg4NTA4NTAwOTE3MDA3RTVDQjkgLyogV2ViTlNVUkxS
ZXF1ZXN0RXh0cmFzLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2NUUwRjg4MzA4NTAwOTE3MDA3RTVDQjkgLyogV2ViTlNVUkxSZXF1ZXN0RXh0cmFzLm0g
Ki87IH07CiAJCTY1RTBGOUU2MDg1MDBGMjMwMDdFNUNCOSAvKiBXZWJOU1VzZXJEZWZhdWx0c0V4
dHJhcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVF
MEY5RTQwODUwMEYyMzAwN0U1Q0I5IC8qIFdlYk5TVXNlckRlZmF1bHRzRXh0cmFzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNjVFMEY5RTcwODUw
MEYyMzAwN0U1Q0I5IC8qIFdlYk5TVXNlckRlZmF1bHRzRXh0cmFzLm0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUUwRjlFNTA4NTAwRjIzMDA3RTVDQjkg
LyogV2ViTlNVc2VyRGVmYXVsdHNFeHRyYXMubSAqLzsgfTsKKwkJNjVFMEY5RTcwODUwMEYyMzAw
N0U1Q0I5IC8qIFdlYk5TVXNlckRlZmF1bHRzRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVFMEY5RTUwODUwMEYyMzAwN0U1Q0I5IC8qIFdl
Yk5TVXNlckRlZmF1bHRzRXh0cmFzLm1tICovOyB9OwogCQk2NUVFREU1NzA4NEZGQzlFMDAwMkRC
MjUgLyogV2ViTlNGaWxlTWFuYWdlckV4dHJhcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjVFRURFNTUwODRGRkM5RTAwMDJEQjI1IC8qIFdlYk5TRmls
ZU1hbmFnZXJFeHRyYXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk2NUVFREU1ODA4NEZGQzlFMDAwMkRCMjUgLyogV2ViTlNGaWxlTWFuYWdlckV4
dHJhcy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVF
RURFNTYwODRGRkM5RTAwMDJEQjI1IC8qIFdlYk5TRmlsZU1hbmFnZXJFeHRyYXMubSAqLzsgfTsK
IAkJNjVGRkI3RkMwQUQwQjdEMzAwNDhDRDA1IC8qIFdlYkRvY3VtZW50TG9hZGVyTWFjLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUZGQjdGQTBBRDBC
N0QzMDA0OENEMDUgLyogV2ViRG9jdW1lbnRMb2FkZXJNYWMuaCAqLzsgfTsKQEAgLTU1Nyw3ICs1
NTcsNyBAQAogCQk2NUUwRjg4MjA4NTAwOTE3MDA3RTVDQjkgLyogV2ViTlNVUkxSZXF1ZXN0RXh0
cmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGlu
ZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYk5TVVJMUmVxdWVzdEV4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNjVFMEY4ODMwODUwMDkxNzAwN0U1Q0I5IC8qIFdl
Yk5TVVJMUmVxdWVzdEV4dHJhcy5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLm9iamM7IHBhdGggPSBXZWJOU1VSTFJlcXVlc3RFeHRyYXMubTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTY1RTBGOUU0MDg1
MDBGMjMwMDdFNUNCOSAvKiBXZWJOU1VzZXJEZWZhdWx0c0V4dHJhcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJOU1VzZXJEZWZhdWx0c0V4
dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKLQkJNjVFMEY5RTUwODUwMEYyMzAwN0U1Q0I5IC8qIFdlYk5TVXNlckRlZmF1bHRzRXh0
cmFzLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGlu
ZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0
aCA9IFdlYk5TVXNlckRlZmF1bHRzRXh0cmFzLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRh
YldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OworCQk2NUUwRjlFNTA4NTAwRjIzMDA3RTVDQjkg
LyogV2ViTlNVc2VyRGVmYXVsdHNFeHRyYXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJOU1VzZXJEZWZhdWx0c0V4dHJhcy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
CiAJCTY1RTExNTAzMDdFRkZFQkYwMDlCOEJGNyAvKiBXZWJQbHVnaW5Db250YWluZXJDaGVjay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQ
bHVnaW5Db250YWluZXJDaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNjVFMTE1MDQwN0VGRkVCRjAwOUI4QkY3IC8qIFdlYlBs
dWdpbkNvbnRhaW5lckNoZWNrLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUGx1Z2luQ29udGFpbmVyQ2hlY2subW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk2NUVF
REU1NTA4NEZGQzlFMDAwMkRCMjUgLyogV2ViTlNGaWxlTWFuYWdlckV4dHJhcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJOU0ZpbGVNYW5h
Z2VyRXh0cmFzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1Rh
YnMgPSAwOyB9OwpAQCAtOTk2LDcgKzk5Niw3IEBACiAJCQkJNjVFMEY4ODIwODUwMDkxNzAwN0U1
Q0I5IC8qIFdlYk5TVVJMUmVxdWVzdEV4dHJhcy5oICovLAogCQkJCTY1RTBGODgzMDg1MDA5MTcw
MDdFNUNCOSAvKiBXZWJOU1VSTFJlcXVlc3RFeHRyYXMubSAqLywKIAkJCQk2NUUwRjlFNDA4NTAw
RjIzMDA3RTVDQjkgLyogV2ViTlNVc2VyRGVmYXVsdHNFeHRyYXMuaCAqLywKLQkJCQk2NUUwRjlF
NTA4NTAwRjIzMDA3RTVDQjkgLyogV2ViTlNVc2VyRGVmYXVsdHNFeHRyYXMubSAqLywKKwkJCQk2
NUUwRjlFNTA4NTAwRjIzMDA3RTVDQjkgLyogV2ViTlNVc2VyRGVmYXVsdHNFeHRyYXMubW0gKi8s
CiAJCQkJRjUwODk0NjkwMkI3MUQ1OTAxOEE5Q0Q0IC8qIFdlYk5TVmlld0V4dHJhcy5oICovLAog
CQkJCUY1MDg5NDZBMDJCNzFENTkwMThBOUNENCAvKiBXZWJOU1ZpZXdFeHRyYXMubSAqLywKIAkJ
CQk5MzQ1RERBRTAzNjVGQjI3MDA4NjM1Q0UgLyogV2ViTlNXaW5kb3dFeHRyYXMuaCAqLywKQEAg
LTE5NDgsNyArMTk0OCw3IEBACiAJCQkJOTM5ODExMTkwODI0QkYwMTAwOERGMDM4IC8qIFdlYk5T
UHJpbnRPcGVyYXRpb25FeHRyYXMubSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMTEyMDgyNEJG
MDEwMDhERjAzOCAvKiBXZWJOU1VSTEV4dHJhcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTY1RTBG
ODg1MDg1MDA5MTcwMDdFNUNCOSAvKiBXZWJOU1VSTFJlcXVlc3RFeHRyYXMubSBpbiBTb3VyY2Vz
ICovLAotCQkJCTY1RTBGOUU3MDg1MDBGMjMwMDdFNUNCOSAvKiBXZWJOU1VzZXJEZWZhdWx0c0V4
dHJhcy5tIGluIFNvdXJjZXMgKi8sCisJCQkJNjVFMEY5RTcwODUwMEYyMzAwN0U1Q0I5IC8qIFdl
Yk5TVXNlckRlZmF1bHRzRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwQzkwODI0
QkYwMTAwOERGMDM4IC8qIFdlYk5TVmlld0V4dHJhcy5tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5
ODEwQ0EwODI0QkYwMTAwOERGMDM4IC8qIFdlYk5TV2luZG93RXh0cmFzLm0gaW4gU291cmNlcyAq
LywKIAkJCQk5Mzk4MTBEMDA4MjRCRjAxMDA4REYwMzggLyogV2ViUGFuZWxBdXRoZW50aWNhdGlv
bkhhbmRsZXIubSBpbiBTb3VyY2VzICovLApJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDcwMDExKQorKysgV2Vi
S2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxMC0x
MC0xOCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDc4NjQKKyAgICAgICAgQ29udmVydCBXZWJOU1VzZXJEZWZhdWx0
cy5tIHRvIC5tbQorCisgICAgICAgIEFsc28sIGZpeGVkIHNvbWUgaXNzdWVzIGluIHRoZSBwcm9j
ZXNzOgorICAgICAgICAtIFJlbW92ZWQgbG9ja2luZywgd2hpY2ggd2FzIG9ubHkgbmVjZXNzYXJ5
IHdoZW4gdGhpcyBjb2RlIHdhcyBpbiBGb3VuZGF0aW9uOworICAgICAgICAtIEZpeGVkIG5vdGlm
aWNhdGlvbiBjZW50ZXIgb2JzZXJ2ZXIgdG8gYWN0dWFsbHkgd29yayAocHJldmlzb3VseSwgaXQg
b25seSBwaWNrZWQgdXAgY2hhbmdlcworICAgICAgICB3aGVuIGFwcGxpY2F0aW9uIHByZWZlcmVu
Y2VzIGNoYW5nZWQsIG5vdCB3aGVuIHN5c3RlbSBsYW5ndWFnZSBkaWQpOworICAgICAgICAtIFJl
bW92ZWQgdW51c2VkIE5TU3RyaW5nIGNhdGVnb3J5LgorCisgICAgICAgICogTWlzYy9XZWJOU1Vz
ZXJEZWZhdWx0c0V4dHJhcy5tOiBSZW1vdmVkLgorICAgICAgICAqIE1pc2MvV2ViTlNVc2VyRGVm
YXVsdHNFeHRyYXMubW06IENvcGllZCBmcm9tIFdlYktpdC9tYWMvTWlzYy9XZWJOU1VzZXJEZWZh
dWx0c0V4dHJhcy5tLgorICAgICAgICAoY3JlYXRlSFRUUFN0eWxlTGFuZ3VhZ2VDb2RlKToKKyAg
ICAgICAgKCtbTlNVc2VyRGVmYXVsdHMgX3dlYmtpdF9kZWZhdWx0c0RpZENoYW5nZV0pOgorICAg
ICAgICAoYWRkTGFuZ3VhZ2VDaGFuZ2VPYnNlcnZlcik6CisgICAgICAgICgrW05TVXNlckRlZmF1
bHRzIF93ZWJraXRfcHJlZmVycmVkTGFuZ3VhZ2VDb2RlXSk6CisKIDIwMTAtMTAtMTggIFN0dWFy
dCBNb3JnYW4gIDxzdHVhcnRtb3JnYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViS2l0L21hYy9NaXNjL1dlYk5TVXNlckRlZmF1bHRz
RXh0cmFzLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9NaXNjL1dlYk5TVXNlckRlZmF1bHRz
RXh0cmFzLm0JKHJldmlzaW9uIDY5OTY0KQorKysgV2ViS2l0L21hYy9NaXNjL1dlYk5TVXNlckRl
ZmF1bHRzRXh0cmFzLm0JKHdvcmtpbmcgY29weSkKQEAgLTEsMTMxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2ltcG9ydCAiV2ViTlNVc2VyRGVmYXVsdHNFeHRyYXMuaCIKLQotI2ltcG9ydCAiV2Vi
TlNPYmplY3RFeHRyYXMuaCIKLSNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgotI2lt
cG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLQotQGltcGxlbWVudGF0aW9uIE5TU3RyaW5nIChXZWJO
U1VzZXJEZWZhdWx0c1ByaXZhdGUpCi0KLS0gKE5TU3RyaW5nICopX3dlYmtpdF9IVFRQU3R5bGVM
YW5ndWFnZUNvZGUKLXsKLSAgICAvLyBMb29rIHVwIHRoZSBsYW5ndWFnZSBjb2RlIHVzaW5nIENG
QnVuZGxlLgotICAgIE5TU3RyaW5nICpsYW5ndWFnZUNvZGUgPSBzZWxmOwotICAgIE5TU3RyaW5n
ICpwcmVmZXJyZWRMYW5ndWFnZUNvZGUgPSBXZWJDRkF1dG9yZWxlYXNlKFdLQ29weUNGTG9jYWxp
emF0aW9uUHJlZmVycmVkTmFtZSgoQ0ZTdHJpbmdSZWYpc2VsZikpOwotCi0gICAgaWYgKHByZWZl
cnJlZExhbmd1YWdlQ29kZSkKLSAgICAgICAgbGFuZ3VhZ2VDb2RlID0gcHJlZmVycmVkTGFuZ3Vh
Z2VDb2RlOwotICAgIAotICAgIC8vIE1ha2UgdGhlIHN0cmluZyBsb3dlcmNhc2UuCi0gICAgTlNT
dHJpbmcgKmxvd2VyY2FzZUxhbmd1YWdlQ29kZSA9IFtsYW5ndWFnZUNvZGUgbG93ZXJjYXNlU3Ry
aW5nXTsKLSAgICAKLSAgICAvLyBUdXJuIGEgJ18nIGludG8gYSAnLScgaWYgaXQgYXBwZWFycyBh
ZnRlciBhIDItbGV0dGVyIGxhbmd1YWdlIGNvZGUuCi0gICAgaWYgKFtsb3dlcmNhc2VMYW5ndWFn
ZUNvZGUgbGVuZ3RoXSA8IDMgfHwgW2xvd2VyY2FzZUxhbmd1YWdlQ29kZSBjaGFyYWN0ZXJBdElu
ZGV4OjJdICE9ICdfJykgewotICAgICAgICByZXR1cm4gbG93ZXJjYXNlTGFuZ3VhZ2VDb2RlOwot
ICAgIH0KLSAgICBOU011dGFibGVTdHJpbmcgKnJlc3VsdCA9IFtsb3dlcmNhc2VMYW5ndWFnZUNv
ZGUgbXV0YWJsZUNvcHldOwotICAgIFtyZXN1bHQgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOk5T
TWFrZVJhbmdlKDIsIDEpIHdpdGhTdHJpbmc6QCItIl07Ci0gICAgcmV0dXJuIFtyZXN1bHQgYXV0
b3JlbGVhc2VdOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBOU1VzZXJEZWZhdWx0cyAo
V2ViTlNVc2VyRGVmYXVsdHNFeHRyYXMpCi0KLXN0YXRpYyBOU1N0cmluZyAqcHJlZmVycmVkTGFu
Z3VhZ2VDb2RlID0gbmlsOwotc3RhdGljIE5TTG9jayAqcHJlZmVycmVkTGFuZ3VhZ2VMb2NrID0g
bmlsOwotc3RhdGljIHB0aHJlYWRfb25jZV90IHByZWZlcnJlZExhbmd1YWdlTG9ja09uY2UgPSBQ
VEhSRUFEX09OQ0VfSU5JVDsKLXN0YXRpYyBwdGhyZWFkX29uY2VfdCBhZGREZWZhdWx0c0NoYW5n
ZU9ic2VydmVyT25jZSA9IFBUSFJFQURfT05DRV9JTklUOwotCi1zdGF0aWMgdm9pZCBtYWtlTG9j
ayh2b2lkKQotewotICAgIHByZWZlcnJlZExhbmd1YWdlTG9jayA9IFtbTlNMb2NrIGFsbG9jXSBp
bml0XTsgCi19Ci0KLSsgKHZvaWQpX3dlYmtpdF9lbnN1cmVBbmRMb2NrUHJlZmVycmVkTGFuZ3Vh
Z2VMb2NrCi17Ci0gICAgcHRocmVhZF9vbmNlKCZwcmVmZXJyZWRMYW5ndWFnZUxvY2tPbmNlLCBt
YWtlTG9jayk7Ci0gICAgW3ByZWZlcnJlZExhbmd1YWdlTG9jayBsb2NrXTsKLX0KLQotKyAodm9p
ZClfd2Via2l0X2RlZmF1bHRzRGlkQ2hhbmdlCi17Ci0gICAgW3NlbGYgX3dlYmtpdF9lbnN1cmVB
bmRMb2NrUHJlZmVycmVkTGFuZ3VhZ2VMb2NrXTsKLQotICAgIFtwcmVmZXJyZWRMYW5ndWFnZUNv
ZGUgcmVsZWFzZV07Ci0gICAgcHJlZmVycmVkTGFuZ3VhZ2VDb2RlID0gbmlsOwotCi0gICAgW3By
ZWZlcnJlZExhbmd1YWdlTG9jayB1bmxvY2tdOwotfQotCi1zdGF0aWMgdm9pZCBhZGREZWZhdWx0
c0NoYW5nZU9ic2VydmVyKHZvaWQpCi17Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZh
dWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpbTlNVc2VyRGVmYXVsdHMgY2xhc3NdCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcjpAc2VsZWN0b3IoX3dl
YmtpdF9kZWZhdWx0c0RpZENoYW5nZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuYW1lOk5TVXNlckRlZmF1bHRzRGlkQ2hhbmdlTm90aWZpY2F0aW9u
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdDpb
TlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdXTsKLX0KLQotKyAodm9pZClfd2Vi
a2l0X2FkZERlZmF1bHRzQ2hhbmdlT2JzZXJ2ZXIKLXsKLSAgICBwdGhyZWFkX29uY2UoJmFkZERl
ZmF1bHRzQ2hhbmdlT2JzZXJ2ZXJPbmNlLCBhZGREZWZhdWx0c0NoYW5nZU9ic2VydmVyKTsKLX0K
LQotKyAoTlNTdHJpbmcgKilfd2Via2l0X3ByZWZlcnJlZExhbmd1YWdlQ29kZQotewotICAgIC8v
IEdldCB0aGlzIG91dHNpZGUgdGhlIGxvY2sgc2luY2UgaXQgbWlnaHQgYmxvY2sgb24gdGhlIGRl
ZmF1bHRzIGxvY2ssIHdoaWxlIHdlIGFyZSBpbnNpZGUgcmVnaXN0ZXJEZWZhdWx0czouCi0gICAg
TlNVc2VyRGVmYXVsdHMgKnN0YW5kYXJkRGVmYXVsdHMgPSBbc2VsZiBzdGFuZGFyZFVzZXJEZWZh
dWx0c107Ci0KLSAgICBCT09MIGFkZE9ic2VydmVyID0gTk87Ci0KLSAgICBbc2VsZiBfd2Via2l0
X2Vuc3VyZUFuZExvY2tQcmVmZXJyZWRMYW5ndWFnZUxvY2tdOwotCi0gICAgaWYgKCFwcmVmZXJy
ZWRMYW5ndWFnZUNvZGUpIHsKLSAgICAgICAgTlNBcnJheSAqbGFuZ3VhZ2VzID0gW3N0YW5kYXJk
RGVmYXVsdHMgc3RyaW5nQXJyYXlGb3JLZXk6QCJBcHBsZUxhbmd1YWdlcyJdOwotICAgICAgICBp
ZiAoW2xhbmd1YWdlcyBjb3VudF0gPT0gMCkgewotICAgICAgICAgICAgcHJlZmVycmVkTGFuZ3Vh
Z2VDb2RlID0gW0AiZW4iIHJldGFpbl07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBw
cmVmZXJyZWRMYW5ndWFnZUNvZGUgPSBbW1tsYW5ndWFnZXMgb2JqZWN0QXRJbmRleDowXSBfd2Vi
a2l0X0hUVFBTdHlsZUxhbmd1YWdlQ29kZV0gY29weV07Ci0gICAgICAgIH0KLSAgICAgICAgYWRk
T2JzZXJ2ZXIgPSBZRVM7Ci0gICAgfQotCi0gICAgTlNTdHJpbmcgKmNvZGUgPSBbW3ByZWZlcnJl
ZExhbmd1YWdlQ29kZSByZXRhaW5dIGF1dG9yZWxlYXNlXTsKLSAgICAKLSAgICBbcHJlZmVycmVk
TGFuZ3VhZ2VMb2NrIHVubG9ja107Ci0KLSAgICBpZiAoYWRkT2JzZXJ2ZXIpIHsKLSAgICAgICAg
W3NlbGYgX3dlYmtpdF9hZGREZWZhdWx0c0NoYW5nZU9ic2VydmVyXTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gY29kZTsKLX0KLQotQGVuZApJbmRleDogV2ViS2l0L21hYy9NaXNjL1dlYk5TVXNlckRl
ZmF1bHRzRXh0cmFzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvTWlzYy9XZWJOU1VzZXJE
ZWZhdWx0c0V4dHJhcy5tbQkocmV2aXNpb24gNjk5NjQpCShmcm9tIFdlYktpdC9tYWMvTWlzYy9X
ZWJOU1VzZXJEZWZhdWx0c0V4dHJhcy5tOjY5OTY0KQorKysgV2ViS2l0L21hYy9NaXNjL1dlYk5T
VXNlckRlZmF1bHRzRXh0cmFzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgIldlYk5TVXNlckRlZmF1bHRzRXh0cmFzLmgiCisKKyNpbXBv
cnQgIldlYk5TT2JqZWN0RXh0cmFzLmgiCisjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2Uu
aD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK0BpbXBsZW1lbnRhdGlvbiBOU1N0cmlu
ZyAoV2ViTlNVc2VyRGVmYXVsdHNQcml2YXRlKQorCistIChOU1N0cmluZyAqKV93ZWJraXRfSFRU
UFN0eWxlTGFuZ3VhZ2VDb2RlCit7CisgICAgLy8gTG9vayB1cCB0aGUgbGFuZ3VhZ2UgY29kZSB1
c2luZyBDRkJ1bmRsZS4KKyAgICBOU1N0cmluZyAqbGFuZ3VhZ2VDb2RlID0gc2VsZjsKKyAgICBO
U1N0cmluZyAqcHJlZmVycmVkTGFuZ3VhZ2VDb2RlID0gV2ViQ0ZBdXRvcmVsZWFzZShXS0NvcHlD
RkxvY2FsaXphdGlvblByZWZlcnJlZE5hbWUoKENGU3RyaW5nUmVmKXNlbGYpKTsKKworICAgIGlm
IChwcmVmZXJyZWRMYW5ndWFnZUNvZGUpCisgICAgICAgIGxhbmd1YWdlQ29kZSA9IHByZWZlcnJl
ZExhbmd1YWdlQ29kZTsKKyAgICAKKyAgICAvLyBNYWtlIHRoZSBzdHJpbmcgbG93ZXJjYXNlLgor
ICAgIE5TU3RyaW5nICpsb3dlcmNhc2VMYW5ndWFnZUNvZGUgPSBbbGFuZ3VhZ2VDb2RlIGxvd2Vy
Y2FzZVN0cmluZ107CisgICAgCisgICAgLy8gVHVybiBhICdfJyBpbnRvIGEgJy0nIGlmIGl0IGFw
cGVhcnMgYWZ0ZXIgYSAyLWxldHRlciBsYW5ndWFnZSBjb2RlLgorICAgIGlmIChbbG93ZXJjYXNl
TGFuZ3VhZ2VDb2RlIGxlbmd0aF0gPCAzIHx8IFtsb3dlcmNhc2VMYW5ndWFnZUNvZGUgY2hhcmFj
dGVyQXRJbmRleDoyXSAhPSAnXycpIHsKKyAgICAgICAgcmV0dXJuIGxvd2VyY2FzZUxhbmd1YWdl
Q29kZTsKKyAgICB9CisgICAgTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQgPSBbbG93ZXJjYXNlTGFu
Z3VhZ2VDb2RlIG11dGFibGVDb3B5XTsKKyAgICBbcmVzdWx0IHJlcGxhY2VDaGFyYWN0ZXJzSW5S
YW5nZTpOU01ha2VSYW5nZSgyLCAxKSB3aXRoU3RyaW5nOkAiLSJdOworICAgIHJldHVybiBbcmVz
dWx0IGF1dG9yZWxlYXNlXTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gTlNVc2VyRGVm
YXVsdHMgKFdlYk5TVXNlckRlZmF1bHRzRXh0cmFzKQorCitzdGF0aWMgTlNTdHJpbmcgKnByZWZl
cnJlZExhbmd1YWdlQ29kZSA9IG5pbDsKK3N0YXRpYyBOU0xvY2sgKnByZWZlcnJlZExhbmd1YWdl
TG9jayA9IG5pbDsKK3N0YXRpYyBwdGhyZWFkX29uY2VfdCBwcmVmZXJyZWRMYW5ndWFnZUxvY2tP
bmNlID0gUFRIUkVBRF9PTkNFX0lOSVQ7CitzdGF0aWMgcHRocmVhZF9vbmNlX3QgYWRkRGVmYXVs
dHNDaGFuZ2VPYnNlcnZlck9uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsKKworc3RhdGljIHZvaWQg
bWFrZUxvY2sodm9pZCkKK3sKKyAgICBwcmVmZXJyZWRMYW5ndWFnZUxvY2sgPSBbW05TTG9jayBh
bGxvY10gaW5pdF07IAorfQorCisrICh2b2lkKV93ZWJraXRfZW5zdXJlQW5kTG9ja1ByZWZlcnJl
ZExhbmd1YWdlTG9jaworeworICAgIHB0aHJlYWRfb25jZSgmcHJlZmVycmVkTGFuZ3VhZ2VMb2Nr
T25jZSwgbWFrZUxvY2spOworICAgIFtwcmVmZXJyZWRMYW5ndWFnZUxvY2sgbG9ja107Cit9CisK
KysgKHZvaWQpX3dlYmtpdF9kZWZhdWx0c0RpZENoYW5nZQoreworICAgIFtzZWxmIF93ZWJraXRf
ZW5zdXJlQW5kTG9ja1ByZWZlcnJlZExhbmd1YWdlTG9ja107CisKKyAgICBbcHJlZmVycmVkTGFu
Z3VhZ2VDb2RlIHJlbGVhc2VdOworICAgIHByZWZlcnJlZExhbmd1YWdlQ29kZSA9IG5pbDsKKwor
ICAgIFtwcmVmZXJyZWRMYW5ndWFnZUxvY2sgdW5sb2NrXTsKK30KKworc3RhdGljIHZvaWQgYWRk
RGVmYXVsdHNDaGFuZ2VPYnNlcnZlcih2b2lkKQoreworICAgIFtbTlNOb3RpZmljYXRpb25DZW50
ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6W05TVXNlckRlZmF1bHRzIGNsYXNzXQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3I6QHNlbGVj
dG9yKF93ZWJraXRfZGVmYXVsdHNEaWRDaGFuZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTpOU1VzZXJEZWZhdWx0c0RpZENoYW5nZU5vdGlm
aWNhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
YmplY3Q6W05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXV07Cit9CisKKysgKHZv
aWQpX3dlYmtpdF9hZGREZWZhdWx0c0NoYW5nZU9ic2VydmVyCit7CisgICAgcHRocmVhZF9vbmNl
KCZhZGREZWZhdWx0c0NoYW5nZU9ic2VydmVyT25jZSwgYWRkRGVmYXVsdHNDaGFuZ2VPYnNlcnZl
cik7Cit9CisKKysgKE5TU3RyaW5nICopX3dlYmtpdF9wcmVmZXJyZWRMYW5ndWFnZUNvZGUKK3sK
KyAgICAvLyBHZXQgdGhpcyBvdXRzaWRlIHRoZSBsb2NrIHNpbmNlIGl0IG1pZ2h0IGJsb2NrIG9u
IHRoZSBkZWZhdWx0cyBsb2NrLCB3aGlsZSB3ZSBhcmUgaW5zaWRlIHJlZ2lzdGVyRGVmYXVsdHM6
LgorICAgIE5TVXNlckRlZmF1bHRzICpzdGFuZGFyZERlZmF1bHRzID0gW3NlbGYgc3RhbmRhcmRV
c2VyRGVmYXVsdHNdOworCisgICAgQk9PTCBhZGRPYnNlcnZlciA9IE5POworCisgICAgW3NlbGYg
X3dlYmtpdF9lbnN1cmVBbmRMb2NrUHJlZmVycmVkTGFuZ3VhZ2VMb2NrXTsKKworICAgIGlmICgh
cHJlZmVycmVkTGFuZ3VhZ2VDb2RlKSB7CisgICAgICAgIE5TQXJyYXkgKmxhbmd1YWdlcyA9IFtz
dGFuZGFyZERlZmF1bHRzIHN0cmluZ0FycmF5Rm9yS2V5OkAiQXBwbGVMYW5ndWFnZXMiXTsKKyAg
ICAgICAgaWYgKFtsYW5ndWFnZXMgY291bnRdID09IDApIHsKKyAgICAgICAgICAgIHByZWZlcnJl
ZExhbmd1YWdlQ29kZSA9IFtAImVuIiByZXRhaW5dOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgcHJlZmVycmVkTGFuZ3VhZ2VDb2RlID0gW1tbbGFuZ3VhZ2VzIG9iamVjdEF0SW5kZXg6
MF0gX3dlYmtpdF9IVFRQU3R5bGVMYW5ndWFnZUNvZGVdIGNvcHldOworICAgICAgICB9CisgICAg
ICAgIGFkZE9ic2VydmVyID0gWUVTOworICAgIH0KKworICAgIE5TU3RyaW5nICpjb2RlID0gW1tw
cmVmZXJyZWRMYW5ndWFnZUNvZGUgcmV0YWluXSBhdXRvcmVsZWFzZV07CisgICAgCisgICAgW3By
ZWZlcnJlZExhbmd1YWdlTG9jayB1bmxvY2tdOworCisgICAgaWYgKGFkZE9ic2VydmVyKSB7Cisg
ICAgICAgIFtzZWxmIF93ZWJraXRfYWRkRGVmYXVsdHNDaGFuZ2VPYnNlcnZlcl07CisgICAgfQor
CisgICAgcmV0dXJuIGNvZGU7Cit9CisKK0BlbmQKSW5kZXg6IFdlYktpdC9tYWMvTWlzYy9XZWJO
U1VzZXJEZWZhdWx0c0V4dHJhcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL01pc2MvV2Vi
TlNVc2VyRGVmYXVsdHNFeHRyYXMubW0JKHJldmlzaW9uIDY5OTY0KQorKysgV2ViS2l0L21hYy9N
aXNjL1dlYk5TVXNlckRlZmF1bHRzRXh0cmFzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAxMCBBcHBsZSwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzEsMTQgKzMxLDE0IEBACiAjaW1wb3J0ICJXZWJOU09iamVjdEV4dHJhcy5oIgogI2ltcG9y
dCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgor
I2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KIAotQGltcGxlbWVudGF0aW9uIE5TU3RyaW5nIChX
ZWJOU1VzZXJEZWZhdWx0c1ByaXZhdGUpCi0KLS0gKE5TU3RyaW5nICopX3dlYmtpdF9IVFRQU3R5
bGVMYW5ndWFnZUNvZGUKK3N0YXRpYyBOU1N0cmluZyAqY3JlYXRlSFRUUFN0eWxlTGFuZ3VhZ2VD
b2RlKE5TU3RyaW5nICpsYW5ndWFnZUNvZGUpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKwogICAgIC8vIExvb2sgdXAgdGhlIGxhbmd1YWdlIGNvZGUgdXNpbmcgQ0ZCdW5kbGUuCi0g
ICAgTlNTdHJpbmcgKmxhbmd1YWdlQ29kZSA9IHNlbGY7Ci0gICAgTlNTdHJpbmcgKnByZWZlcnJl
ZExhbmd1YWdlQ29kZSA9IFdlYkNGQXV0b3JlbGVhc2UoV0tDb3B5Q0ZMb2NhbGl6YXRpb25QcmVm
ZXJyZWROYW1lKChDRlN0cmluZ1JlZilzZWxmKSk7CisgICAgTlNTdHJpbmcgKnByZWZlcnJlZExh
bmd1YWdlQ29kZSA9IFdlYkNGQXV0b3JlbGVhc2UoV0tDb3B5Q0ZMb2NhbGl6YXRpb25QcmVmZXJy
ZWROYW1lKChDRlN0cmluZ1JlZilsYW5ndWFnZUNvZGUpKTsKIAogICAgIGlmIChwcmVmZXJyZWRM
YW5ndWFnZUNvZGUpCiAgICAgICAgIGxhbmd1YWdlQ29kZSA9IHByZWZlcnJlZExhbmd1YWdlQ29k
ZTsKQEAgLTQ3LDgyICs0Nyw1MiBAQCAtIChOU1N0cmluZyAqKV93ZWJraXRfSFRUUFN0eWxlTGFu
Z3VhZ2VDCiAgICAgTlNTdHJpbmcgKmxvd2VyY2FzZUxhbmd1YWdlQ29kZSA9IFtsYW5ndWFnZUNv
ZGUgbG93ZXJjYXNlU3RyaW5nXTsKICAgICAKICAgICAvLyBUdXJuIGEgJ18nIGludG8gYSAnLScg
aWYgaXQgYXBwZWFycyBhZnRlciBhIDItbGV0dGVyIGxhbmd1YWdlIGNvZGUuCi0gICAgaWYgKFts
b3dlcmNhc2VMYW5ndWFnZUNvZGUgbGVuZ3RoXSA8IDMgfHwgW2xvd2VyY2FzZUxhbmd1YWdlQ29k
ZSBjaGFyYWN0ZXJBdEluZGV4OjJdICE9ICdfJykgeworICAgIGlmIChbbG93ZXJjYXNlTGFuZ3Vh
Z2VDb2RlIGxlbmd0aF0gPCAzIHx8IFtsb3dlcmNhc2VMYW5ndWFnZUNvZGUgY2hhcmFjdGVyQXRJ
bmRleDoyXSAhPSAnXycpCiAgICAgICAgIHJldHVybiBsb3dlcmNhc2VMYW5ndWFnZUNvZGU7Ci0g
ICAgfQotICAgIE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0ID0gW2xvd2VyY2FzZUxhbmd1YWdlQ29k
ZSBtdXRhYmxlQ29weV07CisKKyAgICBOU011dGFibGVTdHJpbmcgKnJlc3VsdCA9IFtbbG93ZXJj
YXNlTGFuZ3VhZ2VDb2RlIG11dGFibGVDb3B5XSBhdXRvcmVsZWFzZV07CiAgICAgW3Jlc3VsdCBy
ZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMiwgMSkgd2l0aFN0cmluZzpAIi0i
XTsKLSAgICByZXR1cm4gW3Jlc3VsdCBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIFtyZXN1bHQg
Y29weV07CiB9CiAKLUBlbmQKLQogQGltcGxlbWVudGF0aW9uIE5TVXNlckRlZmF1bHRzIChXZWJO
U1VzZXJEZWZhdWx0c0V4dHJhcykKIAogc3RhdGljIE5TU3RyaW5nICpwcmVmZXJyZWRMYW5ndWFn
ZUNvZGUgPSBuaWw7Ci1zdGF0aWMgTlNMb2NrICpwcmVmZXJyZWRMYW5ndWFnZUxvY2sgPSBuaWw7
Ci1zdGF0aWMgcHRocmVhZF9vbmNlX3QgcHJlZmVycmVkTGFuZ3VhZ2VMb2NrT25jZSA9IFBUSFJF
QURfT05DRV9JTklUOwotc3RhdGljIHB0aHJlYWRfb25jZV90IGFkZERlZmF1bHRzQ2hhbmdlT2Jz
ZXJ2ZXJPbmNlID0gUFRIUkVBRF9PTkNFX0lOSVQ7CitzdGF0aWMgQk9PTCBsYW5ndWFnZUNoYW5n
ZU9ic2VydmVyQWRkZWQgPSBOTzsKIAotc3RhdGljIHZvaWQgbWFrZUxvY2sodm9pZCkKKysgKHZv
aWQpX3dlYmtpdF9sYW5ndWFnZVByZWZlcmVuY2VzRGlkQ2hhbmdlCiB7Ci0gICAgcHJlZmVycmVk
TGFuZ3VhZ2VMb2NrID0gW1tOU0xvY2sgYWxsb2NdIGluaXRdOyAKLX0KLQotKyAodm9pZClfd2Vi
a2l0X2Vuc3VyZUFuZExvY2tQcmVmZXJyZWRMYW5ndWFnZUxvY2sKLXsKLSAgICBwdGhyZWFkX29u
Y2UoJnByZWZlcnJlZExhbmd1YWdlTG9ja09uY2UsIG1ha2VMb2NrKTsKLSAgICBbcHJlZmVycmVk
TGFuZ3VhZ2VMb2NrIGxvY2tdOwotfQotCi0rICh2b2lkKV93ZWJraXRfZGVmYXVsdHNEaWRDaGFu
Z2UKLXsKLSAgICBbc2VsZiBfd2Via2l0X2Vuc3VyZUFuZExvY2tQcmVmZXJyZWRMYW5ndWFnZUxv
Y2tdOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKICAgICBbcHJlZmVycmVkTGFuZ3Vh
Z2VDb2RlIHJlbGVhc2VdOwogICAgIHByZWZlcnJlZExhbmd1YWdlQ29kZSA9IG5pbDsKLQotICAg
IFtwcmVmZXJyZWRMYW5ndWFnZUxvY2sgdW5sb2NrXTsKIH0KIAotc3RhdGljIHZvaWQgYWRkRGVm
YXVsdHNDaGFuZ2VPYnNlcnZlcih2b2lkKQorc3RhdGljIHZvaWQgYWRkTGFuZ3VhZ2VDaGFuZ2VP
YnNlcnZlcih2b2lkKQogewotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRl
cl0gYWRkT2JzZXJ2ZXI6W05TVXNlckRlZmF1bHRzIGNsYXNzXQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJraXRfZGVm
YXVsdHNEaWRDaGFuZ2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZTpOU1VzZXJEZWZhdWx0c0RpZENoYW5nZU5vdGlmaWNhdGlvbgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Q6W05TVXNlckRl
ZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXV07Ci19Ci0KLSsgKHZvaWQpX3dlYmtpdF9hZGRE
ZWZhdWx0c0NoYW5nZU9ic2VydmVyCi17Ci0gICAgcHRocmVhZF9vbmNlKCZhZGREZWZhdWx0c0No
YW5nZU9ic2VydmVyT25jZSwgYWRkRGVmYXVsdHNDaGFuZ2VPYnNlcnZlcik7CisgICAgW1tOU0Rp
c3RyaWJ1dGVkTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOltO
U1VzZXJEZWZhdWx0cyBzZWxmXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcjpAc2VsZWN0b3IoX3dlYmtpdF9sYW5ndWFnZVBy
ZWZlcmVuY2VzRGlkQ2hhbmdlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTpAIkFwcGxlTGFuZ3VhZ2VQcmVmZXJlbmNlc0No
YW5nZWROb3RpZmljYXRpb24iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Om5pbF07CiB9CiAKICsgKE5TU3RyaW5nICopX3dl
YmtpdF9wcmVmZXJyZWRMYW5ndWFnZUNvZGUKIHsKLSAgICAvLyBHZXQgdGhpcyBvdXRzaWRlIHRo
ZSBsb2NrIHNpbmNlIGl0IG1pZ2h0IGJsb2NrIG9uIHRoZSBkZWZhdWx0cyBsb2NrLCB3aGlsZSB3
ZSBhcmUgaW5zaWRlIHJlZ2lzdGVyRGVmYXVsdHM6LgotICAgIE5TVXNlckRlZmF1bHRzICpzdGFu
ZGFyZERlZmF1bHRzID0gW3NlbGYgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOwotCi0gICAgQk9PTCBh
ZGRPYnNlcnZlciA9IE5POwotCi0gICAgW3NlbGYgX3dlYmtpdF9lbnN1cmVBbmRMb2NrUHJlZmVy
cmVkTGFuZ3VhZ2VMb2NrXTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgaWYg
KCFwcmVmZXJyZWRMYW5ndWFnZUNvZGUpIHsKLSAgICAgICAgTlNBcnJheSAqbGFuZ3VhZ2VzID0g
W3N0YW5kYXJkRGVmYXVsdHMgc3RyaW5nQXJyYXlGb3JLZXk6QCJBcHBsZUxhbmd1YWdlcyJdOwot
ICAgICAgICBpZiAoW2xhbmd1YWdlcyBjb3VudF0gPT0gMCkgeworICAgICAgICBOU0FycmF5ICps
YW5ndWFnZXMgPSBbW3NlbGYgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHN0cmluZ0FycmF5Rm9yS2V5
OkAiQXBwbGVMYW5ndWFnZXMiXTsKKyAgICAgICAgaWYgKFtsYW5ndWFnZXMgY291bnRdID09IDAp
CiAgICAgICAgICAgICBwcmVmZXJyZWRMYW5ndWFnZUNvZGUgPSBbQCJlbiIgcmV0YWluXTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHByZWZlcnJlZExhbmd1YWdlQ29kZSA9IFtbW2xh
bmd1YWdlcyBvYmplY3RBdEluZGV4OjBdIF93ZWJraXRfSFRUUFN0eWxlTGFuZ3VhZ2VDb2RlXSBj
b3B5XTsKLSAgICAgICAgfQotICAgICAgICBhZGRPYnNlcnZlciA9IFlFUzsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgcHJlZmVycmVkTGFuZ3VhZ2VDb2RlID0gY3JlYXRlSFRUUFN0eWxlTGFu
Z3VhZ2VDb2RlKFtsYW5ndWFnZXMgb2JqZWN0QXRJbmRleDowXSk7CiAgICAgfQogCiAgICAgTlNT
dHJpbmcgKmNvZGUgPSBbW3ByZWZlcnJlZExhbmd1YWdlQ29kZSByZXRhaW5dIGF1dG9yZWxlYXNl
XTsKICAgICAKLSAgICBbcHJlZmVycmVkTGFuZ3VhZ2VMb2NrIHVubG9ja107Ci0KLSAgICBpZiAo
YWRkT2JzZXJ2ZXIpIHsKLSAgICAgICAgW3NlbGYgX3dlYmtpdF9hZGREZWZhdWx0c0NoYW5nZU9i
c2VydmVyXTsKKyAgICBpZiAoIWxhbmd1YWdlQ2hhbmdlT2JzZXJ2ZXJBZGRlZCkgeworICAgICAg
ICBhZGRMYW5ndWFnZUNoYW5nZU9ic2VydmVyKCk7CisgICAgICAgIGxhbmd1YWdlQ2hhbmdlT2Jz
ZXJ2ZXJBZGRlZCA9IFlFUzsKICAgICB9CiAKICAgICByZXR1cm4gY29kZTsK
</data>
<flag name="review"
          id="61072"
          type_id="1"
          status="+"
          setter="ddkilzer"
    />
    <flag name="commit-queue"
          id="61181"
          type_id="3"
          status="-"
          setter="ddkilzer"
    />
          </attachment>
      

    </bug>

</bugzilla>