<?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>125794</bug_id>
          
          <creation_ts>2013-12-16 11:56:48 -0800</creation_ts>
          <short_desc>DatabaseProcess: Implement openTransaction()</short_desc>
          <delta_ts>2013-12-16 15:20:33 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</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>
          <dependson>125798</dependson>
          <blocked>124521</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>960164</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-16 11:56:48 -0800</bug_when>
    <thetext>DatabaseProcess: Implement openTransaction()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960203</commentid>
    <comment_count>1</comment_count>
      <attachid>219347</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-16 13:27:22 -0800</bug_when>
    <thetext>Created attachment 219347
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960205</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-16 13:29:11 -0800</bug_when>
    <thetext>Attachment 219347 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.messages.in&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/IDBTransactionIdentifier.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabaseBackingStore.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/SQLiteIDBTransaction.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/SQLiteIDBTransaction.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.h&apos;, u&apos;Source/WebKit2/Shared/WebCrossThreadCopier.cpp&apos;, u&apos;Source/WebKit2/Shared/WebCrossThreadCopier.h&apos;, u&apos;Source/WebKit2/WebKit2.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp&apos;, u&apos;Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.h&apos;, u&apos;Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.messages.in&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:212:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 18 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>960207</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-16 13:33:19 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 219347 [details] did not pass style-queue:
&gt; 
&gt; ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:212:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
&gt; Total errors found: 1 in 18 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

Yup, https://bugs.webkit.org/show_bug.cgi?id=125616 still exists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960232</commentid>
    <comment_count>4</comment_count>
      <attachid>219347</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-12-16 14:40:28 -0800</bug_when>
    <thetext>Comment on attachment 219347
Patch v1

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

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/IDBTransactionIdentifier.h:41
&gt; +        : m_connection(0)

nullptr

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/IDBTransactionIdentifier.h:54
&gt; +        return IDBTransactionIdentifier(*this);

Why doesn’t this just say:

     return *this;

I don’t understand the reason for repeating the class name.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/IDBTransactionIdentifier.h:68
&gt; +    static IDBTransactionIdentifier constructDeletedValue()

Not sure I understand the meaning of the word “construct” here. This function should just be named deletedValue.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/IDBTransactionIdentifier.h:72
&gt; +        return std::move(value);

Not sure there is any benefit to using std::move here. Just return value should work.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/IDBTransactionIdentifier.h:101
&gt; +template&lt;&gt; struct HashTraits&lt;WebKit::IDBTransactionIdentifier&gt; : GenericHashTraits&lt;WebKit::IDBTransactionIdentifier&gt; {

This should derive from SimpleClassHashTraits and use the idiom where we construct with HashTableDeletedValue and provide a constructor that takes a HashTableDeletedValue argument. Then we would not need any members defined here at all.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/IDBTransactionIdentifier.h:102
&gt; +    static const bool emptyValueIsZero = 0;

0 seems wrong here since it’s a boolean. Also, why is this false? It seems to me that the empty value is zero! I think this should be true, and perhaps just inherited from the other.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:216
&gt; +    m_pendingOpenTransactionRequests.set(identifier, request.release());

Why is this a set rather than an add? Should this have an assertion that there is no already a request for this identifier?

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:234
&gt; +    RefPtr&lt;AsyncRequest&gt; request = m_pendingOpenTransactionRequests.take(identifier);
&gt; +    ASSERT(request);

Is this a solid guarantee? Is there any way the request might have been canceled, for example?

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:201
&gt; +    m_transactions.set(identifier, SQLiteIDBTransaction::create(identifier));

Why set rather than add?

&gt; Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp:121
&gt; +    m_serverRequests.set(requestID, serverRequest.release());

Why set rather than add? Should we assert there is no request already with this ID?

&gt; Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp:129
&gt; +    RefPtr&lt;AsyncRequest&gt; serverRequest = m_serverRequests.take(requestID);
&gt; +    ASSERT(serverRequest);

Is this assertion guaranteed? Should there be an early return? Generally I don’t know why we are trusting IDs that have traveled across the process boundary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960246</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-16 15:04:50 -0800</bug_when>
    <thetext>Took Darin&apos;s review feedback across the board.  Testing new patch, then will land locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960249</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-16 15:20:33 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/160667</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219347</attachid>
            <date>2013-12-16 13:27:22 -0800</date>
            <delta_ts>2013-12-16 14:40:28 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>36843</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAwODFmMzM0Li4xMjAxMGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNzEg
QEAKIDIwMTMtMTItMTYgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCisgICAg
ICAgIERhdGFiYXNlUHJvY2VzczogSW1wbGVtZW50IG9wZW5UcmFuc2FjdGlvbigpCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjU3OTQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGhvb2tz
IHVwIGFsbCBvZiB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIHRvIG9wZW4gYSB1bmlxdWVs
eQorICAgICAgICBpZGVudGlmaWVkIHRyYW5zYWN0aW9uIGluIHRoZSBEYXRhYmFzZVByb2Nlc3Mg
YmFja2luZyBzdG9yZS4KKworICAgICAgICBUaGUgdHJhbnNhY3Rpb24gaXRzZWxmIGlzIG5vdCB5
ZXQgZnVuY3Rpb25hbC4KKworICAgICAgICBBZGQgb3BlblRyYW5zYWN0aW9uIG1lc3NhZ2luZyB0
byB0aGUgV2ViUHJvY2VzcyBzaWRlOgorICAgICAgICAqIFdlYlByb2Nlc3MvRGF0YWJhc2VzL0lu
ZGV4ZWREQi9XZWJJREJTZXJ2ZXJDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
SURCU2VydmVyQ29ubmVjdGlvbjo6aXNDbG9zZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJT
ZXJ2ZXJDb25uZWN0aW9uOjpvcGVuVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
REJTZXJ2ZXJDb25uZWN0aW9uOjpkaWRPcGVuVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViS2l0
OjpXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpkZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uaDoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29u
bmVjdGlvbi5tZXNzYWdlcy5pbjoKKworICAgICAgICBBZGQgb3BlblRyYW5zYWN0aW9uIG1lc3Nh
Z2luZyB0byB0aGUgRGF0YWJhc2VQcm9jZXNzIHNpZGU6CisgICAgICAgICogRGF0YWJhc2VQcm9j
ZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6b3BlblRyYW5zYWN0aW9uKToK
KyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNv
bm5lY3Rpb24uaDoKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNl
UHJvY2Vzc0lEQkNvbm5lY3Rpb24ubWVzc2FnZXMuaW46CisKKyAgICAgICAgQWRkIGEgaGFzaGFi
bGUgaWRlbnRpZmllciB0aGF0IHJlcHJlc2VudHMgYSBjb25uZWN0aW9uL3RyYW5zYWN0aW9uSUQg
cGFpcjoKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0lEQlRyYW5zYWN0aW9u
SWRlbnRpZmllci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SURCVHJhbnNhY3Rpb25JZGVu
dGlmaWVyOjpJREJUcmFuc2FjdGlvbklkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpJREJU
cmFuc2FjdGlvbklkZW50aWZpZXI6Omlzb2xhdGVkQ29weSk6CisgICAgICAgIChXZWJLaXQ6OklE
QlRyYW5zYWN0aW9uSWRlbnRpZmllcjo6aGFzaCk6CisgICAgICAgIChXZWJLaXQ6OklEQlRyYW5z
YWN0aW9uSWRlbnRpZmllcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJLaXQ6OklEQlRyYW5z
YWN0aW9uSWRlbnRpZmllcjo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdlYktp
dDo6SURCVHJhbnNhY3Rpb25JZGVudGlmaWVyOjppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChX
ZWJLaXQ6OklEQlRyYW5zYWN0aW9uSWRlbnRpZmllcjo6SGFzaDo6aGFzaCk6CisgICAgICAgIChX
ZWJLaXQ6OklEQlRyYW5zYWN0aW9uSWRlbnRpZmllcjo6SGFzaDo6ZXF1YWwpOgorCisgICAgICAg
IEFsbG93IHRoYXQgaWRlbnRpZmllciB0byBiZSBjcm9zcy10aHJlYWQgY29waWVkOgorICAgICAg
ICAqIFNoYXJlZC9XZWJDcm9zc1RocmVhZENvcGllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjo6
OmNvcHkpOgorICAgICAgICAqIFNoYXJlZC9XZWJDcm9zc1RocmVhZENvcGllci5oOgorCisgICAg
ICAgIEFzayB0aGUgYmFja2luZyBzdG9yZSB0byBvcGVuIHRoaXMgdW5pcXVlbHkgaWRlbnRpZmll
ZCB0cmFuc2FjdGlvbjoKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1
ZUlEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2U6Om9w
ZW5UcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVu
QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBEYXRhYmFz
ZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmg6CisKKyAgICAgICAgQWRkIHRo
ZSBiYWNraW5nIHN0b3JlIGltcGxlbWVudGF0aW9uIGZvciBvcGVuaW5nIGEgdHJhbnNhY3Rpb246
CisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUJh
Y2tpbmdTdG9yZS5oOgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRl
L1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6On5VbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZVNRTGl0ZSk6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNl
QmFja2luZ1N0b3JlU1FMaXRlOjplc3RhYmxpc2hUcmFuc2FjdGlvbik6CisgICAgICAgICogRGF0
YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3Rv
cmVTUUxpdGUuaDoKKworICAgICAgICBPYmplY3QgdG8gcmVwcmVzZW50IHRoZSBiYWNraW5nIHN0
b3JlIHRyYW5zYWN0aW9uIGl0c2VsZiwgdG8gYmUgdXNlZCBpbiBmdXR1cmUgcGF0Y2hlczoKKyAg
ICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9TUUxpdGVJREJUcmFuc2Fj
dGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZUlEQlRyYW5zYWN0aW9uOjpTUUxpdGVJ
REJUcmFuc2FjdGlvbik6CisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxp
dGUvU1FMaXRlSURCVHJhbnNhY3Rpb24uaDoKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlSURCVHJh
bnNhY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZUlEQlRyYW5zYWN0aW9u
OjppZGVudGlmaWVyKToKKworICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKworMjAxMy0xMi0xNiAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisK
ICAgICAgICAgRGF0YWJhc2VQcm9jZXNzOiBGaXggYSBmZXcgYnVncyB3aXRoIG9wZW5pbmcgYW4g
SURCIGNvbm5lY3Rpb24KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyNTc5OAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dl
YktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0
aW9uLmNwcAppbmRleCA3MmUxNThhLi45NDdkZjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJh
c2VQcm9jZXNzSURCQ29ubmVjdGlvbi5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUg
IkRhdGFiYXNlUHJvY2Vzcy5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVj
dGlvbi5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uSWRlbnRpZmllci5oIgogI2luY2x1ZGUg
IlVuaXF1ZUlEQkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgi
CiAjaW5jbHVkZSAiV2ViSURCU2VydmVyQ29ubmVjdGlvbk1lc3NhZ2VzLmgiCkBAIC03Miw2ICs3
MywxNiBAQCB2b2lkIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OmdldE9yRXN0YWJsaXNo
SURCRGF0YWJhc2VNZXRhZGF0YSh1aW50NjRfdCByZQogICAgIH0pOwogfQogCit2b2lkIERhdGFi
YXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246Om9wZW5UcmFuc2FjdGlvbih1aW50NjRfdCByZXF1ZXN0
SUQsIGludDY0X3QgdHJhbnNhY3Rpb25JRCwgaW50NjRfdCkKK3sKKyAgICBBU1NFUlQobV91bmlx
dWVJREJEYXRhYmFzZSk7CisKKyAgICBSZWZQdHI8RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlv
bj4gY29ubmVjdGlvbih0aGlzKTsKKyAgICBtX3VuaXF1ZUlEQkRhdGFiYXNlLT5vcGVuVHJhbnNh
Y3Rpb24oSURCVHJhbnNhY3Rpb25JZGVudGlmaWVyKCp0aGlzLCB0cmFuc2FjdGlvbklEKSwgW2Nv
bm5lY3Rpb24sIHJlcXVlc3RJRF0oYm9vbCBzdWNjZXNzKSB7CisgICAgICAgIGNvbm5lY3Rpb24t
PnNlbmQoTWVzc2FnZXM6OldlYklEQlNlcnZlckNvbm5lY3Rpb246OkRpZE9wZW5UcmFuc2FjdGlv
bihyZXF1ZXN0SUQsIHN1Y2Nlc3MpKTsKKyAgICB9KTsKK30KKwogQ29yZUlQQzo6Q29ubmVjdGlv
biogRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24o
KQogewogICAgIHJldHVybiBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNz
SURCQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWRE
Qi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmgKaW5kZXggN2NhNzRlYi4uMTc3ODEwZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRh
YmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQ
cm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmgKQEAgLTYzLDYg
KzYzLDcgQEAgcHJpdmF0ZToKICAgICAvLyBNZXNzYWdlIGhhbmRsZXJzLgogICAgIHZvaWQgZXN0
YWJsaXNoQ29ubmVjdGlvbihjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU2VjdXJp
dHlPcmlnaW5EYXRhJiBvcGVuaW5nT3JpZ2luLCBjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG1h
aW5GcmFtZU9yaWdpbik7CiAgICAgdm9pZCBnZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRh
dGEodWludDY0X3QgcmVxdWVzdElEKTsKKyAgICB2b2lkIG9wZW5UcmFuc2FjdGlvbih1aW50NjRf
dCByZXF1ZXN0SUQsIGludDY0X3QgdHJhbnNhY3Rpb25JRCwgaW50NjRfdCB0cmFuc2FjdGlvbk1v
ZGUpOwogCiAgICAgUmVmPERhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbj4gbV9jb25uZWN0
aW9uOwogICAgIHVpbnQ2NF90IG1fc2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJv
Y2Vzc0lEQkNvbm5lY3Rpb24ubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVBy
b2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24ubWVzc2FnZXMuaW4K
aW5kZXggOTFkYmI0NC4uOGNiYWE3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJh
c2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLm1lc3NhZ2Vz
LmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJh
c2VQcm9jZXNzSURCQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgpAQCAtMjUsNiArMjUsNyBAQAogbWVz
c2FnZXMgLT4gRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbiBMZWdhY3lSZWNlaXZlciB7CiAg
ICAgRXN0YWJsaXNoQ29ubmVjdGlvbihTdHJpbmcgZGF0YWJhc2VOYW1lLCBXZWJLaXQ6OlNlY3Vy
aXR5T3JpZ2luRGF0YSBvcGVuaW5nT3JpZ2luLCBXZWJLaXQ6OlNlY3VyaXR5T3JpZ2luRGF0YSBt
YWluRnJhbWVPcmlnaW4pCiAgICAgR2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhKHVp
bnQ2NF90IHJlcXVlc3RJRCkKKyAgICBPcGVuVHJhbnNhY3Rpb24odWludDY0X3QgcmVxdWVzdElE
LCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGludDY0X3QgdHJhbnNhY3Rpb25Nb2RlKQogfQogCiAj
ZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShEQVRBQkFTRV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWRE
Qi9JREJUcmFuc2FjdGlvbklkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJv
Y2Vzcy9JbmRleGVkREIvSURCVHJhbnNhY3Rpb25JZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZjYxZjcxYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvSURCVHJhbnNhY3Rpb25JZGVudGlmaWVy
LmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQlRyYW5zYWN0aW9u
SWRlbnRpZmllcl9oCisjZGVmaW5lIElEQlRyYW5zYWN0aW9uSWRlbnRpZmllcl9oCisKKyNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCisKKyNp
bmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdIYXNoZXIuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rp
b247CisKK2NsYXNzIElEQlRyYW5zYWN0aW9uSWRlbnRpZmllciB7CitwdWJsaWM6CisgICAgSURC
VHJhbnNhY3Rpb25JZGVudGlmaWVyKCkKKyAgICAgICAgOiBtX2Nvbm5lY3Rpb24oMCkKKyAgICAg
ICAgLCBtX3RyYW5zYWN0aW9uSUQoMCkKKyAgICB7CisgICAgfQorCisgICAgSURCVHJhbnNhY3Rp
b25JZGVudGlmaWVyKERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGlu
dDY0X3QgdHJhbnNhY3Rpb25JRCkKKyAgICAgICAgOiBtX2Nvbm5lY3Rpb24oJmNvbm5lY3Rpb24p
CisgICAgICAgICwgbV90cmFuc2FjdGlvbklEKHRyYW5zYWN0aW9uSUQpCisgICAgeworICAgIH0K
KworICAgIElEQlRyYW5zYWN0aW9uSWRlbnRpZmllciBpc29sYXRlZENvcHkoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIElEQlRyYW5zYWN0aW9uSWRlbnRpZmllcigqdGhpcyk7CisgICAg
fQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1aW50NjRfdCBo
YXNoQ29kZXNbMl0gPSB7IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KG1fY29ubmVjdGlvbiks
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3RyYW5zYWN0aW9uSUQpIH07CisgICAgICAgIHJldHVy
biBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KGhhc2hDb2Rlcyk7
CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IElEQlRyYW5zYWN0aW9uSWRlbnRp
ZmllciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb25uZWN0aW9uID09
IG90aGVyLm1fY29ubmVjdGlvbiAmJiBtX3RyYW5zYWN0aW9uSUQgPT0gb3RoZXIubV90cmFuc2Fj
dGlvbklEOworICAgIH0KKworICAgIHN0YXRpYyBJREJUcmFuc2FjdGlvbklkZW50aWZpZXIgY29u
c3RydWN0RGVsZXRlZFZhbHVlKCkKKyAgICB7CisgICAgICAgIElEQlRyYW5zYWN0aW9uSWRlbnRp
ZmllciB2YWx1ZTsKKyAgICAgICAgdmFsdWUubV90cmFuc2FjdGlvbklEID0gLTE7CisgICAgICAg
IHJldHVybiBzdGQ6Om1vdmUodmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNEZWxldGVkVmFs
dWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2Nvbm5lY3Rpb24gJiYgbV90cmFu
c2FjdGlvbklEID09IC0xOworICAgIH0KKworICAgIHN0cnVjdCBIYXNoIHsKKyAgICAgICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goY29uc3QgSURCVHJhbnNhY3Rpb25JZGVudGlmaWVyJiBhKSB7IHJl
dHVybiBhLmhhc2goKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBJREJUcmFu
c2FjdGlvbklkZW50aWZpZXImIGEsIGNvbnN0IElEQlRyYW5zYWN0aW9uSWRlbnRpZmllciYgYikg
eyByZXR1cm4gYSA9PSBiOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBh
cmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgfTsKKworcHJpdmF0ZToKKyAgICAvLyBJ
ZiBhbnkgbWVtYmVycyBhcmUgYWRkZWQgdGhhdCBjYW5ub3QgYmUgc2FmZWx5IGNvcGllZCBhY3Jv
c3MgdGhyZWFkcywgaXNvbGF0ZWRDb3B5KCkgbXVzdCBiZSB1cGRhdGVkLgorICAgIERhdGFiYXNl
UHJvY2Vzc0lEQkNvbm5lY3Rpb24qIG1fY29ubmVjdGlvbjsKKyAgICBpbnQ2NF90IG1fdHJhbnNh
Y3Rpb25JRDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCituYW1lc3BhY2UgV1RGIHsK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgRGVmYXVsdEhhc2g8V2ViS2l0OjpJREJUcmFuc2FjdGlvbklkZW50aWZpZXI+IHsKKyAg
ICB0eXBlZGVmIFdlYktpdDo6SURCVHJhbnNhY3Rpb25JZGVudGlmaWVyOjpIYXNoIEhhc2g7Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPFdlYktpdDo6SURCVHJhbnNhY3Rpb25J
ZGVudGlmaWVyPiA6IEdlbmVyaWNIYXNoVHJhaXRzPFdlYktpdDo6SURCVHJhbnNhY3Rpb25JZGVu
dGlmaWVyPiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IDA7Cisg
ICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFdlYktpdDo6SURCVHJhbnNhY3Rp
b25JZGVudGlmaWVyJiBpZGVudGlmaWVyKSB7IGlkZW50aWZpZXIgPSBXZWJLaXQ6OklEQlRyYW5z
YWN0aW9uSWRlbnRpZmllcjo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKCk7IH0KKyAgICBzdGF0aWMg
Ym9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBXZWJLaXQ6OklEQlRyYW5zYWN0aW9uSWRlbnRpZmll
ciYgaWRlbnRpZmllcikgeyByZXR1cm4gaWRlbnRpZmllci5pc0RlbGV0ZWRWYWx1ZSgpOyB9Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKKyNlbmRpZiAvLyBJREJUcmFuc2FjdGlv
bklkZW50aWZpZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNz
L0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFz
ZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAppbmRleCBlN2NkODQ3Li40
Y2FlZTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhl
ZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVBy
b2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApAQCAtMTk2LDYgKzE5Niw0NiBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlQW5kUmVhZE1ldGFk
YXRhKGNvbnN0IElEQkRhdGFiYXNlTWV0YQogICAgIH0KIH0KIAordm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6b3BlblRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSWRlbnRpZmllciYgaWRl
bnRpZmllciwgc3RkOjpmdW5jdGlvbjx2b2lkKGJvb2wpPiBzdWNjZXNzQ2FsbGJhY2spCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghbV9hY2NlcHRpbmdOZXdSZXF1
ZXN0cykgeworICAgICAgICBzdWNjZXNzQ2FsbGJhY2soZmFsc2UpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVBc3luY1Rhc2soKnRoaXMsICZV
bmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCBpZGVudGlmaWVy
KSk7CisKKyAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiByZXF1ZXN0ID0gQXN5bmNSZXF1ZXN0SW1w
bDxib29sPjo6Y3JlYXRlKFtzdWNjZXNzQ2FsbGJhY2tdKGJvb2wgc3VjY2VzcykgeworICAgICAg
ICBzdWNjZXNzQ2FsbGJhY2soc3VjY2Vzcyk7CisgICAgfSwgW3N1Y2Nlc3NDYWxsYmFja10oKSB7
CisgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhmYWxzZSk7CisgICAgfSk7CisKKyAgICBtX3BlbmRp
bmdPcGVuVHJhbnNhY3Rpb25SZXF1ZXN0cy5zZXQoaWRlbnRpZmllciwgcmVxdWVzdC5yZWxlYXNl
KCkpOworfQorCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JZGVudGlmaWVyJiBpZGVudGlmaWVyKQoreworICAg
IEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CisK
KyAgICBib29sIHN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+ZXN0YWJsaXNoVHJhbnNhY3Rpb24o
aWRlbnRpZmllcik7CisKKyAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQXN5bmNUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwg
aWRlbnRpZmllciwgc3VjY2VzcykpOworfQorCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRP
cGVuQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JZGVudGlmaWVy
JiBpZGVudGlmaWVyLCBib29sIHN1Y2Nlc3MpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKworICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3QgPSBtX3BlbmRpbmdPcGVuVHJh
bnNhY3Rpb25SZXF1ZXN0cy50YWtlKGlkZW50aWZpZXIpOworICAgIEFTU0VSVChyZXF1ZXN0KTsK
KworICAgIHJlcXVlc3QtPmNvbXBsZXRlUmVxdWVzdChzdWNjZXNzKTsKK30KKwogU3RyaW5nIFVu
aXF1ZUlEQkRhdGFiYXNlOjphYnNvbHV0ZURhdGFiYXNlRGlyZWN0b3J5KCkgY29uc3QKIHsKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0
YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYktp
dDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5oCmluZGV4IGYy
MWQ0ZjUuLmVjYWM1MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vz
cy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRh
YmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmgKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJP
Q0VTUykKIAorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uSWRlbnRpZmllci5oIgogI2luY2x1ZGUg
IlVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5oIgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAj
aW5jbHVkZSA8d3RmL0RlcXVlLmg+CkBAIC02NCw2ICs2NSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHVucmVnaXN0ZXJDb25uZWN0aW9uKERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24mKTsKIAog
ICAgIHZvaWQgZ2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhKHN0ZDo6ZnVuY3Rpb248
dm9pZChib29sLCBjb25zdCBXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhJik+IGNvbXBsZXRp
b25DYWxsYmFjayk7CisgICAgdm9pZCBvcGVuVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rp
b25JZGVudGlmaWVyJiwgc3RkOjpmdW5jdGlvbjx2b2lkKGJvb2wpPiBzdWNjZXNzQ2FsbGJhY2sp
OwogCiBwcml2YXRlOgogICAgIFVuaXF1ZUlEQkRhdGFiYXNlKGNvbnN0IFVuaXF1ZUlEQkRhdGFi
YXNlSWRlbnRpZmllciYpOwpAQCAtOTQsMTQgKzk2LDE4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBw
ZXJmb3JtTmV4dERhdGFiYXNlVGFzaygpOwogICAgIHZvaWQgcG9zdE1haW5UaHJlYWRUYXNrKHN0
ZDo6dW5pcXVlX3B0cjxBc3luY1Rhc2s+KTsKICAgICB2b2lkIG9wZW5CYWNraW5nU3RvcmVBbmRS
ZWFkTWV0YWRhdGEoY29uc3QgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZURpcmVjdG9yeSk7CisgICAgdm9pZCBvcGVuQmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JZGVudGlmaWVyJik7CiAKICAgICAvLyBDYWxsYmFj
a3MgZnJvbSB0aGUgZGF0YWJhc2Ugd29ya3F1ZXVlIHRocmVhZCwgdG8gYmUgcGVyZm9ybWVkIG9u
IHRoZSBtYWluIHRocmVhZCBvbmx5CiAgICAgdm9pZCBwZXJmb3JtTmV4dE1haW5UaHJlYWRUYXNr
KCk7CiAgICAgdm9pZCBkaWRPcGVuQmFja2luZ1N0b3JlQW5kUmVhZE1ldGFkYXRhKGNvbnN0IFdl
YkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGEmLCBib29sIHN1Y2Nlc3MpOworICAgIHZvaWQgZGlk
T3BlbkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSWRlbnRpZmll
ciYsIGJvb2wgc3VjY2Vzcyk7CiAKLSAgICBEZXF1ZTxSZWZQdHI8QXN5bmNSZXF1ZXN0Pj4gbV9w
ZW5kaW5nTWV0YWRhdGFSZXF1ZXN0czsKICAgICBib29sIG1fYWNjZXB0aW5nTmV3UmVxdWVzdHM7
CiAKKyAgICBEZXF1ZTxSZWZQdHI8QXN5bmNSZXF1ZXN0Pj4gbV9wZW5kaW5nTWV0YWRhdGFSZXF1
ZXN0czsKKyAgICBIYXNoTWFwPElEQlRyYW5zYWN0aW9uSWRlbnRpZmllciwgUmVmUHRyPEFzeW5j
UmVxdWVzdD4+IG1fcGVuZGluZ09wZW5UcmFuc2FjdGlvblJlcXVlc3RzOworCiAgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGE+IG1fbWV0YWRhdGE7CiAgICAg
Ym9vbCBtX2RpZEdldE1ldGFkYXRhRnJvbUJhY2tpbmdTdG9yZTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUJh
Y2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9V
bmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oCmluZGV4IDI0YjhkMDEuLjJjNzc2ZjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVl
SURCRGF0YWJhc2VCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVBy
b2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlLmgKQEAgLTM2LDEx
ICszNiwxNCBAQCBzdHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0YTsKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKK2NsYXNzIElEQlRyYW5zYWN0aW9uSWRlbnRpZmllcjsKKwogY2xhc3MgVW5pcXVlSURC
RGF0YWJhc2VCYWNraW5nU3RvcmUgOiBwdWJsaWMgUmVmQ291bnRlZDxVbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZT4gewogcHVibGljOgogICAgIHZpcnR1YWwgflVuaXF1ZUlEQkRhdGFiYXNl
QmFja2luZ1N0b3JlKCkgeyB9CiAKICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpJREJEYXRhYmFzZU1ldGFkYXRhPiBnZXRPckVzdGFibGlzaE1ldGFkYXRhKCkgPSAwOworICAg
IHZpcnR1YWwgYm9vbCBlc3RhYmxpc2hUcmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlvbklk
ZW50aWZpZXImKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1NRTGl0ZUlE
QlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVk
REIvc3FsaXRlL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4yYTZmZTBhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
RGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvU1FMaXRlSURCVHJhbnNhY3Rpb24uY3Bw
CkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlNRTGl0ZUlEQlRyYW5zYWN0aW9uLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkgJiYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitT
UUxpdGVJREJUcmFuc2FjdGlvbjo6U1FMaXRlSURCVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNh
Y3Rpb25JZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZp
ZXIpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvU1FMaXRlSURC
VHJhbnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIv
c3FsaXRlL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uOGNmMzkwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFi
YXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmgKQEAgLTAs
MCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU1FMaXRlSURCVHJhbnNhY3Rpb25faAor
I2RlZmluZSBTUUxpdGVJREJUcmFuc2FjdGlvbl9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkgJiYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCisKKyNpbmNsdWRlICJJREJUcmFuc2Fj
dGlvbklkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFNRTGl0ZUlEQlRyYW5zYWN0aW9uIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShTUUxpdGVJREJUcmFuc2FjdGlvbik7CitwdWJsaWM6CisgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVJREJUcmFuc2FjdGlvbj4gY3JlYXRlKGNvbnN0IElEQlRy
YW5zYWN0aW9uSWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIHJldHVybiBz
dGQ6OnVuaXF1ZV9wdHI8U1FMaXRlSURCVHJhbnNhY3Rpb24+KG5ldyBTUUxpdGVJREJUcmFuc2Fj
dGlvbihpZGVudGlmaWVyKSk7CisgICAgfQorCisgICAgY29uc3QgSURCVHJhbnNhY3Rpb25JZGVu
dGlmaWVyJiBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisKK3By
aXZhdGU6CisgICAgU1FMaXRlSURCVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JZGVu
dGlmaWVyJik7CisKKyAgICBJREJUcmFuc2FjdGlvbklkZW50aWZpZXIgbV9pZGVudGlmaWVyOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCisjZW5kaWYgLy8gU1FMaXRlSURC
VHJhbnNhY3Rpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNz
L0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3Bw
IGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVl
SURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwCmluZGV4IDkyZDFjNDIuLjYyNjcxNzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3Fs
aXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKIAorI2luY2x1ZGUg
IlNRTGl0ZUlEQlRyYW5zYWN0aW9uLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9JREJEYXRhYmFzZU1ldGFkYXRhLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9TUUxpdGVEYXRhYmFzZS5oPgpAQCAtNTcsNiArNTgsMTEgQEAgVW5pcXVlSURCRGF0YWJh
c2VCYWNraW5nU3RvcmVTUUxpdGU6OlVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRl
KGNvbnN0IFUKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIH0KIAorVW5pcXVlSURCRGF0
YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6On5VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNR
TGl0ZSgpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Cit9CisKIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhPiBVbmlxdWVJREJEYXRhYmFzZUJhY2tp
bmdTdG9yZVNRTGl0ZTo6Y3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsTWV0YWRhdGEoKQogewogICAg
IEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwpAQCAtMTg3LDYgKzE5MywxNiBAQCBzdGQ6OnVuaXF1
ZV9wdHI8SURCRGF0YWJhc2VNZXRhZGF0YT4gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVT
UUxpdGU6OmdldE9yRQogICAgIHJldHVybiBtZXRhZGF0YTsKIH0KIAorYm9vbCBVbmlxdWVJREJE
YXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6ZXN0YWJsaXNoVHJhbnNhY3Rpb24oY29uc3QgSURC
VHJhbnNhY3Rpb25JZGVudGlmaWVyJiBpZGVudGlmaWVyKQoreworICAgIEFTU0VSVCghaXNNYWlu
VGhyZWFkKCkpOworICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbnMuY29udGFpbnMoaWRlbnRpZmll
cikpOworCisgICAgbV90cmFuc2FjdGlvbnMuc2V0KGlkZW50aWZpZXIsIFNRTGl0ZUlEQlRyYW5z
YWN0aW9uOjpjcmVhdGUoaWRlbnRpZmllcikpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0Up
ICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
RGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5n
U3RvcmVTUUxpdGUuaCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIv
c3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmgKaW5kZXggYWJmNmM5
NS4uZDYyYWVlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0lu
ZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJ
REJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5oCkBAIC00MCw2ICs0MCw4IEBAIHN0cnVjdCBJ
REJEYXRhYmFzZU1ldGFkYXRhOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgU1FMaXRl
SURCVHJhbnNhY3Rpb247CisKIGNsYXNzIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FM
aXRlIEZJTkFMIDogcHVibGljIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZT4g
Y3JlYXRlKGNvbnN0IFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeSkKQEAgLTQ3LDcgKzQ5LDEwIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9y
ZVNRTGl0ZShpZGVudGlmaWVyLCBkYXRhYmFzZURpcmVjdG9yeSkpOwogICAgIH0KIAorICAgIHZp
cnR1YWwgflVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlKCk7CisKICAgICB2aXJ0
dWFsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhPiBnZXRPckVz
dGFibGlzaE1ldGFkYXRhKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGVzdGFibGlzaFRy
YW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSWRlbnRpZmllciYpIE9WRVJSSURFOwogCiBw
cml2YXRlOgogICAgIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlKGNvbnN0IFVu
aXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3Rv
cnkpOwpAQCAtNjAsNiArNjUsOCBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX2Fic29sdXRlRGF0
YWJhc2VEaXJlY3Rvcnk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2U+IG1fbWV0YWRhdGFEQjsKKworICAgIEhhc2hNYXA8SURCVHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlSURCVHJhbnNhY3Rpb24+PiBtX3RyYW5zYWN0aW9u
czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkNyb3NzVGhyZWFkQ29waWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJDcm9zc1RocmVhZENvcGllci5jcHAKaW5kZXggNTE1NzY3Zi4uZDZjOWM3ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNyb3NzVGhyZWFkQ29waWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIklE
QlRyYW5zYWN0aW9uSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlVuaXF1ZUlEQkRhdGFiYXNlSWRl
bnRpZmllci5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwpAQCAtMzgsNiArMzksMTEgQEAg
VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwg
ZmFsc2UsIFVuaXF1ZUlEQkRhdGFiYXMKICAgICByZXR1cm4gaWRlbnRpZmllci5pc29sYXRlZENv
cHkoKTsKIH0KIAorSURCVHJhbnNhY3Rpb25JZGVudGlmaWVyIENyb3NzVGhyZWFkQ29waWVyQmFz
ZTxmYWxzZSwgZmFsc2UsIElEQlRyYW5zYWN0aW9uSWRlbnRpZmllcj46OmNvcHkoY29uc3QgSURC
VHJhbnNhY3Rpb25JZGVudGlmaWVyJiBpZGVudGlmaWVyKQoreworICAgIHJldHVybiBpZGVudGlm
aWVyLmlzb2xhdGVkQ29weSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJDcm9zc1RocmVhZENvcGllci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkNyb3NzVGhyZWFkQ29waWVyLmgKaW5kZXggYmZlZGE0NmQuLjk4N2NkZDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDcm9zc1RocmVhZENvcGllci5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJDcm9zc1RocmVhZENvcGllci5oCkBAIC0zMSw2ICszMSw3IEBA
CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKIG5hbWVzcGFjZSBXZWJLaXQgeworY2xh
c3MgSURCVHJhbnNhY3Rpb25JZGVudGlmaWVyOwogY2xhc3MgVW5pcXVlSURCRGF0YWJhc2VJZGVu
dGlmaWVyOwogfQogCkBAIC00MCw2ICs0MSwxMCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1Ro
cmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlSQog
ICAgIHN0YXRpYyBXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciBjb3B5KGNvbnN0
IFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CiB9OwogCit0ZW1wbGF0ZTw+
IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBXZWJLaXQ6OklEQlRy
YW5zYWN0aW9uSWRlbnRpZmllcj4geworICAgIHN0YXRpYyBXZWJLaXQ6OklEQlRyYW5zYWN0aW9u
SWRlbnRpZmllciBjb3B5KGNvbnN0IFdlYktpdDo6SURCVHJhbnNhY3Rpb25JZGVudGlmaWVyJik7
Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCAwZGI2NjgwLi5hZDMwYzA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01MjUsNiArNTI1LDggQEAK
IAkJNTExQjI0QTcxMzJFMDk1NzAwMDY1QTBDIC8qIFdlYkljb25EYXRhYmFzZVByb3h5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFCMjRBNTEzMkUw
OTU3MDAwNjVBMEMgLyogV2ViSWNvbkRhdGFiYXNlUHJveHkuaCAqLzsgfTsKIAkJNTExQjI0QUEx
MzJFMDk3MjAwMDY1QTBDIC8qIFdlYkljb25EYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFCMjRBODEzMkUwOTcyMDAwNjVBMEMgLyog
V2ViSWNvbkRhdGFiYXNlLmNwcCAqLzsgfTsKIAkJNTExQjI0QUIxMzJFMDk3MjAwMDY1QTBDIC8q
IFdlYkljb25EYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTExQjI0QTkxMzJFMDk3MjAwMDY1QTBDIC8qIFdlYkljb25EYXRhYmFzZS5oICov
OyB9OworCQk1MTFEODFGRjE4NUJCREVFMDAxQUVENTYgLyogU1FMaXRlSURCVHJhbnNhY3Rpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUQ4MUZE
MTg1QkJERUUwMDFBRUQ1NiAvKiBTUUxpdGVJREJUcmFuc2FjdGlvbi5oICovOyB9OworCQk1MTFE
ODIwMTE4NUJDMjE3MDAxQUVENTYgLyogU1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRDgyMDAxODVCQzIxNzAw
MUFFRDU2IC8qIFNRTGl0ZUlEQlRyYW5zYWN0aW9uLmNwcCAqLzsgfTsKIAkJNTExRjhBN0IxMzhC
NDYwOTAwQTk1RjQ0IC8qIFNlY0l0ZW1TaGltTGlicmFyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRjhBNzcxMzhCNDYwOTAwQTk1RjQ0IC8qIFNl
Y0l0ZW1TaGltTGlicmFyeS5oICovOyB9OwogCQk1MTFGOEE4MTEzOEI0ODVEMDBBOTVGNDQgLyog
U2VjSXRlbVNoaW1MaWJyYXJ5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTExRjhBNzgxMzhCNDYwOTAwQTk1RjQ0IC8qIFNlY0l0ZW1TaGltTGlicmFy
eS5tbSAqLzsgfTsKIAkJNTEyMTc0NjAxNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJlc291
cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
MjE3NDVFMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVSZXNvdXJjZS5jcHAgKi87IH07CkBA
IC02NzgsNiArNjgwLDcgQEAKIAkJNTFEMTMwNTUxMzgyRUFDMDAwMzUxRUREIC8qIFNlY0l0ZW1S
ZXNwb25zZURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFEMTMwNTExMzgyRUFDMDAwMzUxRUREIC8qIFNlY0l0ZW1SZXNwb25zZURhdGEuY3Bw
ICovOyB9OwogCQk1MUQxMzA1NjEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlc3BvbnNlRGF0
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFEMTMw
NTIxMzgyRUFDMDAwMzUxRUREIC8qIFNlY0l0ZW1SZXNwb25zZURhdGEuaCAqLzsgfTsKIAkJNTFE
MTMwNTgxMzgyRjEwNTAwMzUxRUREIC8qIFdlYlByb2Nlc3NQcm94eU1hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDEzMDU3MTM4MkYxMDUwMDM1
MUVERCAvKiBXZWJQcm9jZXNzUHJveHlNYWMubW0gKi87IH07CisJCTUxRDU0QTczMTg1QkFDNDIw
MDBDQUVEMiAvKiBJREJUcmFuc2FjdGlvbklkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDU0QTcyMTg1QkFDNDIwMDBDQUVEMiAvKiBJ
REJUcmFuc2FjdGlvbklkZW50aWZpZXIuaCAqLzsgfTsKIAkJNTFERDlGMjgxNjM2N0RBMjAwMTU3
OEU5IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxREQ5RjI2MTYz
NjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNl
aXZlci5jcHAgKi87IH07CiAJCTUxREQ5RjI5MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUREOUYyNzE2MzY3REEyMDAxNTc4RTkgLyogTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oICovOyB9OwogCQk1MUUzNTFDQTE4MEYyQ0ND
MDBFNTNCRTkgLyogSURCVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTM1MUM4MTgwRjJDQ0MwMEU1M0JFOSAvKiBJREJVdGlsaXRp
ZXMuY3BwICovOyB9OwpAQCAtMjExMCw2ICsyMTEzLDggQEAKIAkJNTExQjI0QTUxMzJFMDk1NzAw
MDY1QTBDIC8qIFdlYkljb25EYXRhYmFzZVByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYkljb25EYXRhYmFzZVByb3h5Lmg7IHBhdGggPSBJY29uRGF0YWJhc2UvV2Vi
SWNvbkRhdGFiYXNlUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTExQjI0
QTgxMzJFMDk3MjAwMDY1QTBDIC8qIFdlYkljb25EYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJJY29uRGF0YWJhc2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MTFCMjRBOTEzMkUwOTcyMDAwNjVBMEMgLyogV2ViSWNvbkRhdGFi
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkljb25EYXRhYmFzZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTFEODFGRDE4NUJCREVFMDAxQUVENTYg
LyogU1FMaXRlSURCVHJhbnNhY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1FMaXRlSURCVHJhbnNhY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTExRDgyMDAxODVCQzIxNzAwMUFFRDU2IC8qIFNRTGl0ZUlEQlRyYW5zYWN0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNRTGl0ZUlEQlRyYW5zYWN0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTExRjhBNzcxMzhCNDYwOTAwQTk1RjQ0
IC8qIFNlY0l0ZW1TaGltTGlicmFyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBTZWNJdGVtU2hpbUxpYnJhcnkuaDsgcGF0aCA9IC4uLy4uL1dlYlByb2Nlc3MvbWFjL1NlY0l0
ZW1TaGltTGlicmFyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTFGOEE3ODEz
OEI0NjA5MDBBOTVGNDQgLyogU2VjSXRlbVNoaW1MaWJyYXJ5Lm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBuYW1lID0gU2VjSXRlbVNoaW1MaWJyYXJ5Lm1tOyBwYXRoID0gLi4v
Li4vV2ViUHJvY2Vzcy9tYWMvU2VjSXRlbVNoaW1MaWJyYXJ5Lm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MTIxNzQ1RTE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxlUmVzb3Vy
Y2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhcmVhYmxlUmVz
b3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI3Miw2ICsyMjc3LDcg
QEAKIAkJNTFEMTMwNTExMzgyRUFDMDAwMzUxRUREIC8qIFNlY0l0ZW1SZXNwb25zZURhdGEuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VjSXRlbVJlc3BvbnNlRGF0
YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDEzMDUyMTM4MkVBQzAwMDM1
MUVERCAvKiBTZWNJdGVtUmVzcG9uc2VEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNlY0l0ZW1SZXNwb25zZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTFEMTMwNTcxMzgyRjEwNTAwMzUxRUREIC8qIFdlYlByb2Nlc3NQcm94eU1hYy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlByb2Nlc3NQcm94eU1hYy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFENTRBNzIxODVCQUM0MjAwMENBRUQy
IC8qIElEQlRyYW5zYWN0aW9uSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJREJUcmFuc2FjdGlvbklkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTFERDlGMjYxNjM2N0RBMjAwMTU3OEU5IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFERDlGMjcxNjM2N0RBMjAwMTU3OEU5
IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUUzNTFDODE4MEYyQ0NDMDBFNTNC
RTkgLyogSURCVXRpbGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IElEQlV0aWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MTA4
LDYgKzQxMTQsOCBAQAogCQk1MTY1NEVGMDE4NEVGMjQxMDA3REM4MzcgLyogc3FsaXRlICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1MTFEODIwMDE4NUJD
MjE3MDAxQUVENTYgLyogU1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwICovLAorCQkJCTUxMUQ4MUZE
MTg1QkJERUUwMDFBRUQ1NiAvKiBTUUxpdGVJREJUcmFuc2FjdGlvbi5oICovLAogCQkJCTUxNjU0
RUZCMTg0RUYzM0YwMDdEQzgzNyAvKiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0
ZS5jcHAgKi8sCiAJCQkJNTE2NTRFRkMxODRFRjMzRjAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFi
YXNlQmFja2luZ1N0b3JlU1FMaXRlLmggKi8sCiAJCQkpOwpAQCAtNDI0Miw2ICs0MjUwLDcgQEAK
IAkJCQk1MUQwRDQyRTE4M0IzNDEzMDA5NzA0MUQgLyogRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVj
dGlvbi5jcHAgKi8sCiAJCQkJNTFEMEQ0MkYxODNCMzQxMzAwOTcwNDFEIC8qIERhdGFiYXNlUHJv
Y2Vzc0lEQkNvbm5lY3Rpb24uaCAqLywKIAkJCQk1MUQwRDQzMDE4M0IzNDEzMDA5NzA0MUQgLyog
RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiAqLywKKwkJCQk1MUQ1NEE3
MjE4NUJBQzQyMDAwQ0FFRDIgLyogSURCVHJhbnNhY3Rpb25JZGVudGlmaWVyLmggKi8sCiAJCQkJ
NTE1RTc3MkQxODQwMTU4MDAwMDcyMDNGIC8qIFVuaXF1ZUlEQkRhdGFiYXNlLmNwcCAqLywKIAkJ
CQk1MTVFNzcyRTE4NDAxNTgwMDAwNzIwM0YgLyogVW5pcXVlSURCRGF0YWJhc2UuaCAqLywKIAkJ
CQk1MTY1NEVGRjE4NEVGMzRBMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3Rv
cmUuaCAqLywKQEAgLTU5MzgsNiArNTk0Nyw3IEBACiAJCQkJMUFCNDc0RTYxODRENDRCNDAwNTFC
NjIyIC8qIFdLQnVuZGxlUGFnZUZ1bGxTY3JlZW5DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBQjMxQTk3MTZCQzY4ODEwMEY2REJDOSAvKiBTdG9yYWdlTWFuYWdlck1lc3NhZ2VzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyOTZCRDg1RDE1MDE5QkMzMDA3MUY0MjQgLyogU3RyaW5nVXRpbGl0
aWVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTFEODFGRjE4NUJCREVFMDAxQUVENTYgLyogU1FM
aXRlSURCVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjQ3NEU0MTg0RDQ0OTgw
MDUxQjYyMiAvKiBXS0J1bmRsZVBhZ2VDb250ZXh0TWVudUNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUFBNDE3Q0IxMkMwMENDQTAwMkJFNjdCIC8qIFRleHRDaGVja2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxUVE0MTdDQjEyQzAwQ0NBMDAyQkU2N0IgLyogVGV4dENoZWNrZXJDb21wbGV0
aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTYwOTQsNiArNjEwNCw3IEBACiAJCQkJMUFDODcwMkQx
MzBCNDlBMjAwMkMxMjU3IC8qIFdlYlBsdWdpblNpdGVEYXRhTWFuYWdlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNCOUY4QjAxMTI0RTA3NzAwQTEzN0UwIC8qIFdlYlBvbGljeUNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM1NzQ0RjAxMjYzOEZCMzAwNkYwRjEyIC8qIFdlYlBvcHVwSXRl
bS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTFENTRBNzMxODVCQUM0MjAwMENBRUQyIC8qIElEQlRy
YW5zYWN0aW9uSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDNCOTQ4NDcxMUZGNEI2
NTAwMDMyQjM5IC8qIFdlYlBvcHVwTWVudS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1NzRFNjMx
MjY3RDA4MDAwNkYwRjEyIC8qIFdlYlBvcHVwTWVudVByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzU3NTA5NzEyNjhGM0M2MDA2RjBGMTIgLyogV2ViUG9wdXBNZW51UHJveHlNYWMuaCBpbiBI
ZWFkZXJzICovLApAQCAtNzQzMiw2ICs3NDQzLDcgQEAKIAkJCQkzMUEyRUM0RDE0ODk5N0MyMDA4
MTBENzEgLyogV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkM4NTdGQjYxMkI4MzBFNjAwRURFQjJFIC8qIFdlYk9wZW5QYW5lbFBhcmFtZXRlcnMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkM4NTdGODYxMkI4MkQwQjAwRURFQjJFIC8qIFdlYk9wZW5QYW5l
bFJlc3VsdExpc3RlbmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxMUQ4MjAxMTg1QkMyMTcw
MDFBRUQ1NiAvKiBTUUxpdGVJREJUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
Qzg1N0Y3RTEyQjgyQ0VFMDBFREVCMkUgLyogV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzk2M0Q2QjExM0REMTkyMDA1NzRCRTIgLyogV2Vi
UGFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTUzNTY5QzEyOTFCMUQyMDAwNzQ5REMgLyog
V2ViUGFnZUNvbnRleHRNZW51Q2xpZW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZl
ckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5k
ZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uY3BwCmluZGV4IDFkMDdhMWEuLjI4MzY2MTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWRE
Qi9XZWJJREJTZXJ2ZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5jcHAKQEAgLTc0
LDYgKzc0LDcgQEAgV2ViSURCU2VydmVyQ29ubmVjdGlvbjo6fldlYklEQlNlcnZlckNvbm5lY3Rp
b24oKQogCiBib29sIFdlYklEQlNlcnZlckNvbm5lY3Rpb246OmlzQ2xvc2VkKCkKIHsKKyAgICAv
LyBGSVhNRTogUmV0dXJuIHJlYWwgdmFsdWUgaGVyZS4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApA
QCAtMTA4LDggKzEwOSwyNiBAQCB2b2lkIFdlYklEQlNlcnZlckNvbm5lY3Rpb246OmNsb3NlKCkK
IHsKIH0KIAotdm9pZCBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpvcGVuVHJhbnNhY3Rpb24oaW50
NjRfdCB0cmFuc2FjdGlvbklELCBjb25zdCBIYXNoU2V0PGludDY0X3Q+JiBvYmplY3RTdG9yZUlk
cywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUsIEJvb2xDYWxsYmFja0Z1bmN0aW9uIHN1Y2Nl
c3NDYWxsYmFjaykKK3ZvaWQgV2ViSURCU2VydmVyQ29ubmVjdGlvbjo6b3BlblRyYW5zYWN0aW9u
KGludDY0X3QgdHJhbnNhY3Rpb25JRCwgY29uc3QgSGFzaFNldDxpbnQ2NF90PiYsIEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUsIEJvb2xDYWxsYmFja0Z1bmN0aW9uIHN1Y2Nlc3NDYWxs
YmFjaykKIHsKKyAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiBzZXJ2ZXJSZXF1ZXN0ID0gQXN5bmNS
ZXF1ZXN0SW1wbDxib29sPjo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFjayk7CisKKyAgICBzZXJ2ZXJS
ZXF1ZXN0LT5zZXRBYm9ydEhhbmRsZXIoW3N1Y2Nlc3NDYWxsYmFja10oKSB7CisgICAgICAgIHN1
Y2Nlc3NDYWxsYmFjayhmYWxzZSk7CisgICAgfSk7CisKKyAgICB1aW50NjRfdCByZXF1ZXN0SUQg
PSBzZXJ2ZXJSZXF1ZXN0LT5yZXF1ZXN0SUQoKTsKKyAgICBtX3NlcnZlclJlcXVlc3RzLnNldChy
ZXF1ZXN0SUQsIHNlcnZlclJlcXVlc3QucmVsZWFzZSgpKTsKKworICAgIHNlbmQoTWVzc2FnZXM6
OkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246Ok9wZW5UcmFuc2FjdGlvbihyZXF1ZXN0SUQs
IHRyYW5zYWN0aW9uSUQsIG1vZGUpKTsKK30KKwordm9pZCBXZWJJREJTZXJ2ZXJDb25uZWN0aW9u
OjpkaWRPcGVuVHJhbnNhY3Rpb24odWludDY0X3QgcmVxdWVzdElELCBib29sIHN1Y2Nlc3MpCit7
CisgICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gc2VydmVyUmVxdWVzdCA9IG1fc2VydmVyUmVxdWVz
dHMudGFrZShyZXF1ZXN0SUQpOworICAgIEFTU0VSVChzZXJ2ZXJSZXF1ZXN0KTsKKworICAgIHNl
cnZlclJlcXVlc3QtPmNvbXBsZXRlUmVxdWVzdChzdWNjZXNzKTsKIH0KIAogdm9pZCBXZWJJREJT
ZXJ2ZXJDb25uZWN0aW9uOjpiZWdpblRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCwg
c3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKQEAgLTE3MCw4ICsxODks
OCBAQCB2b2lkIFdlYklEQlNlcnZlckNvbm5lY3Rpb246OmNsZWFyT2JqZWN0U3RvcmUoSURCVHJh
bnNhY3Rpb25CYWNrZW5kJiwgY29uc3QgQ2xlYQogCiB2b2lkIFdlYklEQlNlcnZlckNvbm5lY3Rp
b246OmRlbGV0ZU9iamVjdFN0b3JlKElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNvbnN0IERlbGV0
ZU9iamVjdFN0b3JlT3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spCiB7Ci0KIH0KKwogdm9pZCBXZWJJ
REJTZXJ2ZXJDb25uZWN0aW9uOjpjaGFuZ2VEYXRhYmFzZVZlcnNpb24oSURCVHJhbnNhY3Rpb25C
YWNrZW5kJiwgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9u
Jiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21w
bGV0aW9uQ2FsbGJhY2spCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5l
Y3Rpb24uaAppbmRleCA5NTc2ODM4Li45YzhkNGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJ
REJTZXJ2ZXJDb25uZWN0aW9uLmgKQEAgLTk0LDYgKzk0LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIENvcmVJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgT1ZFUlJJ
REU7CiAKICAgICB2b2lkIGRpZEdldE9yRXN0YWJsaXNoSURCRGF0YWJhc2VNZXRhZGF0YSh1aW50
NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2VzcywgY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VN
ZXRhZGF0YSYpOworICAgIHZvaWQgZGlkT3BlblRyYW5zYWN0aW9uKHVpbnQ2NF90IHJlcXVlc3RJ
RCwgYm9vbCBzdWNjZXNzKTsKIAogICAgIHVpbnQ2NF90IG1fc2VydmVyQ29ubmVjdGlvbklkZW50
aWZpZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2Vz
L0luZGV4ZWREQi9XZWJJREJTZXJ2ZXJDb25uZWN0aW9uLm1lc3NhZ2VzLmluIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rp
b24ubWVzc2FnZXMuaW4KaW5kZXggYjk0N2I3Yy4uOGYxMzI3ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5l
Y3Rpb24ubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFz
ZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24ubWVzc2FnZXMuaW4KQEAgLTI0LDYg
KzI0LDcgQEAKIAogbWVzc2FnZXMgLT4gV2ViSURCU2VydmVyQ29ubmVjdGlvbiBMZWdhY3lSZWNl
aXZlciB7CiAgICAgRGlkR2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhKHVpbnQ2NF90
IHJlcXVlc3RJRCwgYm9vbCBzdWNjZXNzLCBXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhIG1l
dGFkYXRhKQorICAgIERpZE9wZW5UcmFuc2FjdGlvbih1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wg
c3VjY2VzcykKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFC
TEUoREFUQUJBU0VfUFJPQ0VTUykK
</data>
<flag name="review"
          id="242961"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>