<?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>194344</bug_id>
          
          <creation_ts>2019-02-06 09:04:04 -0800</creation_ts>
          <short_desc>[WTF] Add getting/changing current working directory to FileSystem</short_desc>
          <delta_ts>2022-02-10 16:52:36 -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>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</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="Stephan Szabo">stephan.szabo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cdumez</cc>
    
    <cc>chris.reid</cc>
    
    <cc>darin</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>saam</cc>
    
    <cc>yoshiaki.jitsukawa</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1503093</commentid>
    <comment_count>0</comment_count>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2019-02-06 09:04:04 -0800</bug_when>
    <thetext>Add the ability to get and change the current working directory to FileSystem for use inside the jsc shell.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503445</commentid>
    <comment_count>1</comment_count>
      <attachid>361321</attachid>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2019-02-06 13:27:04 -0800</bug_when>
    <thetext>Created attachment 361321
Add get/change current working directory functions

Initial upload to check behavior on gtk/mac on ews.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503530</commentid>
    <comment_count>2</comment_count>
      <attachid>361321</attachid>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2019-02-06 16:33:28 -0800</bug_when>
    <thetext>Comment on attachment 361321
Add get/change current working directory functions

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

&gt; Source/WTF/wtf/glib/FileSystemGlib.cpp:470
&gt; +    return stringFromFileSystemRepresentation(g_get_current_dir());

I think this leaks the returned string. The glib docs for g_get_current_dir states &quot;The returned string should be freed when no longer needed&quot;

&gt; Source/WTF/wtf/posix/FileSystemPOSIX.cpp:500
&gt; +        return &quot;&quot;;

Should we return Optional&lt;String&gt; to avoid something like getCurrentWorkingDirectory() + &quot;/file.txt&quot; inadvertently attempt to create a file in the root?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503532</commentid>
    <comment_count>3</comment_count>
      <attachid>361321</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-02-06 16:42:47 -0800</bug_when>
    <thetext>Comment on attachment 361321
Add get/change current working directory functions

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

&gt; Source/WTF/wtf/FileSystem.h:191
&gt; +WTF_EXPORT_PRIVATE bool changeCurrentWorkingDirectory(const String &amp;);

String&amp;

&gt;&gt; Source/WTF/wtf/glib/FileSystemGlib.cpp:470
&gt;&gt; +    return stringFromFileSystemRepresentation(g_get_current_dir());
&gt; 
&gt; I think this leaks the returned string. The glib docs for g_get_current_dir states &quot;The returned string should be freed when no longer needed&quot;

Yeah, should be:

 GUniquePtr&lt;char&gt; currentDir(g_get_current_dir());
 return stringFromFileSystemRepresentation(currentDir.get());

&gt; Source/WTF/wtf/glib/FileSystemGlib.cpp:473
&gt; +bool changeCurrentWorkingDirectory(const String &amp;filePath)

String&amp;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503722</commentid>
    <comment_count>4</comment_count>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2019-02-07 07:52:30 -0800</bug_when>
    <thetext>(In reply to Christopher Reid from comment #2)
&gt; Comment on attachment 361321 [details]
&gt; Add get/change current working directory functions
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=361321&amp;action=review


&gt; &gt; Source/WTF/wtf/posix/FileSystemPOSIX.cpp:500
&gt; &gt; +        return &quot;&quot;;
&gt; 
&gt; Should we return Optional&lt;String&gt; to avoid something like
&gt; getCurrentWorkingDirectory() + &quot;/file.txt&quot; inadvertently attempt to create a
&gt; file in the root?

I&apos;d chosen just returning String because that&apos;s what homeDirectoryPath was doing, but making it an Optional is probably better. Will change, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503760</commentid>
    <comment_count>5</comment_count>
      <attachid>361404</attachid>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2019-02-07 09:14:37 -0800</bug_when>
    <thetext>Created attachment 361404
Add get/change current working directory functions, fix a few issues

Switching get to return Optional&lt;String&gt;, fix memory handling for GLib implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504619</commentid>
    <comment_count>6</comment_count>
      <attachid>361404</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-02-09 12:49:59 -0800</bug_when>
    <thetext>Comment on attachment 361404
Add get/change current working directory functions, fix a few issues

Why do we want to add these?

It seems dangerous to have any code in WebKit that changes the working directory as a side effect, or to have code that depends on the current working directory. Maybe we need this for non-UI processes?

It’s nice to have a good implementation of these functions if they are needed for cross-platform code that we want to write in the WebKit project, but I don’t yet understand where that code would be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504620</commentid>
    <comment_count>7</comment_count>
      <attachid>361404</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-02-09 12:50:40 -0800</bug_when>
    <thetext>Comment on attachment 361404
Add get/change current working directory functions, fix a few issues

Oh, I see &quot;for use in the jsc shell&quot;. Seems a shame to have to have this in WTF just because of that, but I guess I can live with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504622</commentid>
    <comment_count>8</comment_count>
      <attachid>361404</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-02-09 12:54:21 -0800</bug_when>
    <thetext>Comment on attachment 361404
Add get/change current working directory functions, fix a few issues

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

I’d like to see the one first use of this in JSC in the same patch as introducing it. Not a huge fan of adding something unused to WTF.

&gt; Source/WTF/wtf/glib/FileSystemGlib.cpp:470
&gt; +    GUniquePtr&lt;char&gt; currentDir(g_get_current_dir());

When does this give a different value than getcwd?

&gt; Source/WTF/wtf/glib/FileSystemGlib.cpp:476
&gt; +    CString fsRep = fileSystemRepresentation(filePath);

Seems wasteful to have a local variable here.

&gt; Source/WTF/wtf/glib/FileSystemGlib.cpp:477
&gt; +    return !chdir(fsRep.data());

This is the same as the POSIX one. Maybe we can rearrange things so we don’t have two copies. Does this even work when glib is running on Windows?

&gt; Source/WTF/wtf/posix/FileSystemPOSIX.cpp:506
&gt; +    CString fsRep = fileSystemRepresentation(filePath);

Seems wasteful to have a local variable here. Just do it all on one line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504722</commentid>
    <comment_count>9</comment_count>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2019-02-10 13:56:59 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #8)
&gt; Comment on attachment 361404 [details]
&gt; Add get/change current working directory functions, fix a few issues
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=361404&amp;action=review
&gt; 
&gt; I’d like to see the one first use of this in JSC in the same patch as
&gt; introducing it. Not a huge fan of adding something unused to WTF.

Okay, will make up a version with the JSC stuff as well.

&gt; &gt; Source/WTF/wtf/glib/FileSystemGlib.cpp:470
&gt; &gt; +    GUniquePtr&lt;char&gt; currentDir(g_get_current_dir());
&gt; 
&gt; When does this give a different value than getcwd?

It appears that it does something different on Windows and elsewhere will do some extra things with the PWD environment variable if this is correct: https://github.com/GNOME/glib/blob/master/glib/gfileutils.c#L2683
Specifically, it seems like it may handle some link cases different by comparing the device and inode of PWD and &quot;.&quot; and using the value in PWD rather than what would be given by getcwd if they&apos;re the same?
 
&gt; &gt; Source/WTF/wtf/glib/FileSystemGlib.cpp:477
&gt; &gt; +    return !chdir(fsRep.data());
&gt; 
&gt; This is the same as the POSIX one. Maybe we can rearrange things so we don’t
&gt; have two copies. Does this even work when glib is running on Windows?

It probably would, but I think they&apos;ve marked it as deprecated. While looking up the above it seems like the glib get function is doing windows specific stuff, so it probably should actually use SetCurrentDirectoryW on Windows instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504732</commentid>
    <comment_count>10</comment_count>
      <attachid>361644</attachid>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2019-02-10 14:57:43 -0800</bug_when>
    <thetext>Created attachment 361644
Add get/change current working directory functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504733</commentid>
    <comment_count>11</comment_count>
      <attachid>361645</attachid>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2019-02-10 15:02:07 -0800</bug_when>
    <thetext>Created attachment 361645
Add get/change current working directory functions, with JSC changes

This version includes an initial version with the JSC changes to use FileSystem (and these functions for getting/setting working directory). Those are more in flux, but this indicates the intended direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504746</commentid>
    <comment_count>12</comment_count>
      <attachid>361645</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-02-10 16:03:19 -0800</bug_when>
    <thetext>Comment on attachment 361645
Add get/change current working directory functions, with JSC changes

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

Still not sure that we need a working directory abstraction. If we want &quot;jsc&quot; to have a working directory concept we can simulate that with a global string inside the tool on all platforms, not just PlayStation. No reason we have to use the &quot;real&quot; working directory, except to initialize the tool on startup.

&gt; Source/JavaScriptCore/jsc.cpp:889
&gt; +    FileSystem::PlatformFileHandle handle = FileSystem::openFile(fileName, FileSystem::FileOpenMode::Read);

Here’s a place where &quot;auto&quot; can help a bit. Nice to not have to write out FileSystem::PlatformFileHandle.

&gt; Source/JavaScriptCore/jsc.cpp:902
&gt; +static bool fillBufferWithContentsOfFile(FileSystem::PlatformFileHandle &amp;handle, Vector&amp; buffer)

This function is pretty dangerous in the case where the vector is not of a type that is a single byte.

&gt; Source/JavaScriptCore/jsc.cpp:912
&gt;      buffer.resize(bufferCapacity + initialSize);

Should be grow instead of resize for better efficiency.

&gt; Source/JavaScriptCore/jsc.cpp:915
&gt; +    int readSize = FileSystem::readFromFile(handle, data, bufferCapacity);

I’d suggest auto for readSize.

&gt; Source/JavaScriptCore/jsc.cpp:2753
&gt; +        static const unsigned workingDirectoryStrLength = strlen(&quot;--working-directory=&quot;);
&gt; +        if (!strncmp(arg, &quot;--working-directory=&quot;, workingDirectoryStrLength)) {
&gt; +            m_workingDirectory = String(arg + workingDirectoryStrLength);
&gt; +            continue;
&gt; +        }

Could add a comment here explaining this option is provided primarily for the benefit of platforms that don’t have a working directory concept at the shell level (PlayStation).

&gt; Source/WTF/wtf/FileSystem.h:190
&gt; +WTF_EXPORT_PRIVATE Optional&lt;String&gt; getCurrentWorkingDirectory();

WebKit coding style means we would not use the word &quot;get&quot; in the name of this function. It should be called currentWorkingDirectory or workingDirectory.

&gt; Source/WTF/wtf/FileSystem.h:191
&gt; +WTF_EXPORT_PRIVATE bool changeCurrentWorkingDirectory(const String&amp;);

Not 100% sure we need the word &quot;current&quot; in this function name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504762</commentid>
    <comment_count>13</comment_count>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2019-02-10 18:02:22 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #12)
&gt; Comment on attachment 361645 [details]
&gt; Add get/change current working directory functions, with JSC changes
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=361645&amp;action=review
&gt; 
&gt; Still not sure that we need a working directory abstraction. If we want
&gt; &quot;jsc&quot; to have a working directory concept we can simulate that with a global
&gt; string inside the tool on all platforms, not just PlayStation. No reason we
&gt; have to use the &quot;real&quot; working directory, except to initialize the tool on
&gt; startup.

True, but I think we&apos;d need to convert relative paths given to things like the command line or functionLoad to absolute paths as well to make that work, since that&apos;s the directory we want to the file to load relative to. Here we were just doing that for PlayStation locally in the FileSystem implementation.

I&apos;m making a parallel version where I try to do this instead.

&gt; [snip other items]

I&apos;m also updating for each of these depending on what happens with the above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504769</commentid>
    <comment_count>14</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-10 19:35:50 -0800</bug_when>
    <thetext>(In reply to Stephan Szabo from comment #0)
&gt; Add the ability to get and change the current working directory to
&gt; FileSystem for use inside the jsc shell.

What&apos;s the plan on how to use this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504864</commentid>
    <comment_count>15</comment_count>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2019-02-11 07:42:13 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #14)
&gt; (In reply to Stephan Szabo from comment #0)
&gt; &gt; Add the ability to get and change the current working directory to
&gt; &gt; FileSystem for use inside the jsc shell.
&gt; 
&gt; What&apos;s the plan on how to use this?

Although I&apos;m now also looking at different ways based on the earlier responses, the plan was basically:
* Replace the use of direct system calls for the working directory in currentWorkingDirectory() to use the retrieval function in FileSystem.
* Add an option to jsc to set the working directory for systems without a shell that has the notion using the change function in FileSystem.
* Move from direct fopen/fseek/etc to FileSystem calls for reading files in the jsc shell.
* For PlayStation, because it needs absolute paths, use the given working directory if one exists to prefix relative paths in FileSystem before calling down to libc or posix functions.

The &quot;with JSC changes&quot; attachment isn&apos;t fully right, but it should give a general idea of what it would look like.

From the earlier responses, I&apos;m now looking to try a version for the shell that:
* Keeps a working directory in jsc
* Sets it from the system on start
* Add option to set it for systems that don&apos;t have one
* Convert paths to absolute paths for loading files.

If that works more reasonably, then this will go away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1505296</commentid>
    <comment_count>16</comment_count>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2019-02-12 11:20:27 -0800</bug_when>
    <thetext>I&apos;ve added https://bugs.webkit.org/show_bug.cgi?id=194542 for a keeping the --working-directory argument and switching to absolute paths when it&apos;s present.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361321</attachid>
            <date>2019-02-06 13:27:04 -0800</date>
            <delta_ts>2019-02-07 09:14:37 -0800</delta_ts>
            <desc>Add get/change current working directory functions</desc>
            <filename>194344.1.diff</filename>
            <type>text/plain</type>
            <size>10582</size>
            <attacher name="Stephan Szabo">stephan.szabo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggMTNjYTkyMjFmZDkuLmVmZTZjMjMyNDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE5
LTAyLTA2ICBTdGVwaGFuIFN6YWJvICA8c3RlcGhhbi5zemFib0Bzb255LmNvbT4KKworICAgICAg
ICBbV1RGXSBBZGQgZ2V0dGluZy9jaGFuZ2luZyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHRv
IEZpbGVTeXN0ZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5NDM0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogd3RmL0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgQWRkIG5ldyBnZXRDdXJyZW50V29ya2lu
Z0RpcmVjdG9yeSBhbmQKKyAgICAgICAgY2hhbmdlQ3VycmVudFdvcmtpbmdEaXJlY3RvcnkgbWV0
aG9kcy4KKyAgICAgICAgKiB3dGYvUGxhdGZvcm1QbGF5U3RhdGlvbi5jbWFrZToKKyAgICAgICAg
QWRkIG5ldyBGaWxlU3lzdGVtUGxheVN0YXRpb24uY3BwIHRvIGJ1aWxkCisgICAgICAgICogd3Rm
L2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6
Z2V0Q3VycmVudFdvcmtpbmdEaXJlY3RvcnkpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1w
bDo6Y2hhbmdlQ3VycmVudFdvcmtpbmdEaXJlY3RvcnkpOgorICAgICAgICAqIHd0Zi9wbGF5c3Rh
dGlvbi9GaWxlU3lzdGVtUGxheVN0YXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgU2ltdWxhdGUg
aGF2aW5nIGEgd29ya2luZyBkaXJlY3RvcnkgZm9yIHRoaXMgcGxhdGZvcm0uCisgICAgICAgIChX
VEY6OkZpbGVTeXN0ZW1JbXBsOjpnZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSk6CisgICAgICAg
IChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpjaGFuZ2VDdXJyZW50V29ya2luZ0RpcmVjdG9yeSk6Cisg
ICAgICAgICogd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHA6CisgICAgICAgIChXVEY6OkZp
bGVTeXN0ZW1JbXBsOjpnZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSk6CisgICAgICAgIChXVEY6
OkZpbGVTeXN0ZW1JbXBsOjpjaGFuZ2VDdXJyZW50V29ya2luZ0RpcmVjdG9yeSk6CisgICAgICAg
ICogd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6OmdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6OmNoYW5nZUN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KToKKwogMjAxOS0wMi0wMyAgQ29t
bWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjI0MDg5Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVT
eXN0ZW0uaCBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAppbmRleCA5MDM5NjJhZDQ2ZC4u
ODFlYTkwYjgwNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKQEAgLTE4Nyw2ICsxODcsOSBAQCBXVEZfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBkZWxldGVOb25FbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmKTsK
IAogV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyByZWFsUGF0aChjb25zdCBTdHJpbmcmKTsKIAor
V1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBnZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpOwor
V1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgY2hhbmdlQ3VycmVudFdvcmtpbmdEaXJlY3RvcnkoY29u
c3QgU3RyaW5nICYpOworCiBjbGFzcyBNYXBwZWRGaWxlRGF0YSB7CiBwdWJsaWM6CiAgICAgTWFw
cGVkRmlsZURhdGEoKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtUGxh
eVN0YXRpb24uY21ha2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtl
CmluZGV4IDRiNjkxOTA3NmYzLi45Mzc4MTJhMmUzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvUGxhdGZvcm1QbGF5U3RhdGlvbi5jbWFrZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bVBsYXlTdGF0aW9uLmNtYWtlCkBAIC01LDYgKzUsOCBAQCBsaXN0KEFQUEVORCBXVEZfU09VUkNF
UwogICAgIGdlbmVyaWMvUnVuTG9vcEdlbmVyaWMuY3BwCiAgICAgZ2VuZXJpYy9Xb3JrUXVldWVH
ZW5lcmljLmNwcAogCisgICAgcGxheXN0YXRpb24vRmlsZVN5c3RlbVBsYXlTdGF0aW9uLmNwcAor
CiAgICAgcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAogICAgIHBvc2l4L09TQWxsb2NhdG9yUE9T
SVguY3BwCiAgICAgcG9zaXgvVGhyZWFkaW5nUE9TSVguY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmls
ZVN5c3RlbUdsaWIuY3BwCmluZGV4IGMzZWM5OWEzZDFiLi4zNjFiNWNkM2QzYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKKysrIGIvU291cmNlL1dU
Ri93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKQEAgLTQ2NSw1ICs0NjUsMTYgQEAgYm9vbCB1
bmxvY2tGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUpCiB9CiAjZW5kaWYgLy8gVVNFKEZJ
TEVfTE9DSykKIAorU3RyaW5nIGdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KCkKK3sKKyAgICBy
ZXR1cm4gc3RyaW5nRnJvbUZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihnX2dldF9jdXJyZW50X2Rp
cigpKTsKK30KKworYm9vbCBjaGFuZ2VDdXJyZW50V29ya2luZ0RpcmVjdG9yeShjb25zdCBTdHJp
bmcgJmZpbGVQYXRoKQoreworICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50
YXRpb24oZmlsZVBhdGgpOworICAgIHJldHVybiAhY2hkaXIoZnNSZXAuZGF0YSgpKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgRmlsZVN5c3RlbUltcGwKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvcGxheXN0YXRpb24vRmlsZVN5c3RlbVBsYXlTdGF0aW9uLmNw
cCBiL1NvdXJjZS9XVEYvd3RmL3BsYXlzdGF0aW9uL0ZpbGVTeXN0ZW1QbGF5U3RhdGlvbi5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQzNjZlOTgzNzAxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvcGxheXN0YXRpb24vRmlsZVN5c3RlbVBsYXlT
dGF0aW9uLmNwcApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IFNv
bnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9G
aWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1l
c3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIEZpbGVTeXN0ZW1JbXBsIHsKKworY2hhciBjdXJyZW50
V29ya2luZ0RpcmVjdG9yeVtQQVRIX01BWF0gPSB7MH07CisKK1N0cmluZyBnZXRDdXJyZW50V29y
a2luZ0RpcmVjdG9yeSgpCit7CisgICAgcmV0dXJuIHN0cmluZ0Zyb21GaWxlU3lzdGVtUmVwcmVz
ZW50YXRpb24oY3VycmVudFdvcmtpbmdEaXJlY3RvcnkpOworfQorCitib29sIGNoYW5nZUN1cnJl
bnRXb3JraW5nRGlyZWN0b3J5KGNvbnN0IFN0cmluZyAmZmlsZVBhdGgpCit7CisgICAgQ1N0cmlu
ZyBwYXRoID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGZpbGVQYXRoKTsKKyAgICBpZiAocGF0
aC5sZW5ndGgoKSA+IHNpemVvZihjdXJyZW50V29ya2luZ0RpcmVjdG9yeSkgLSAxKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgc3RybmNweShjdXJyZW50V29ya2luZ0RpcmVjdG9yeSwgcGF0
aC5kYXRhKCksIHNpemVvZihjdXJyZW50V29ya2luZ0RpcmVjdG9yeSkpOworICAgIGN1cnJlbnRX
b3JraW5nRGlyZWN0b3J5W3NpemVvZihjdXJyZW50V29ya2luZ0RpcmVjdG9yeSktMV0gPSAwOwor
ICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbAorfSAv
LyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lz
dGVtUE9TSVguY3BwIGIvU291cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcApp
bmRleCA3MGQyZjk4ZTRkNy4uMGEzZjI4MWM2YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvcG9zaXgvRmls
ZVN5c3RlbVBPU0lYLmNwcApAQCAtNDkyLDUgKzQ5MiwyMSBAQCBTdHJpbmcgcmVhbFBhdGgoY29u
c3QgU3RyaW5nJiBmaWxlUGF0aCkKICAgICByZXR1cm4gcmVzdWx0ID8gU3RyaW5nOjpmcm9tVVRG
OChyZXN1bHQpIDogZmlsZVBhdGg7CiB9CiAKKyNpZiAhUExBVEZPUk0oUExBWVNUQVRJT04pCitT
dHJpbmcgZ2V0Q3VycmVudFdvcmtpbmdEaXJlY3RvcnkoKQoreworICAgIGNoYXIgd29ya2luZ0Rp
cmVjdG9yeVtQQVRIX01BWF07CisgICAgaWYgKCFnZXRjd2Qod29ya2luZ0RpcmVjdG9yeSwgc2l6
ZW9mKHdvcmtpbmdEaXJlY3RvcnkpKSkKKyAgICAgICAgcmV0dXJuICIiOworICAgIHJldHVybiBz
dHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHdvcmtpbmdEaXJlY3RvcnkpOworfQor
Citib29sIGNoYW5nZUN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KGNvbnN0IFN0cmluZyAmZmlsZVBh
dGgpCit7CisgICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihmaWxl
UGF0aCk7CisgICAgcmV0dXJuICFjaGRpcihmc1JlcC5kYXRhKCkpOworfQorI2VuZGlmCisKIH0g
Ly8gbmFtZXNwYWNlIEZpbGVTeXN0ZW1JbXBsCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L3dpbi9GaWxlU3lzdGVtV2luLmNwcAppbmRleCBkNjcyYWY2Mzc0Ni4uNjA3MzE1YjUwNzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAKQEAgLTU4Miw1ICs1ODIsMjQgQEAgYm9v
bCBkZWxldGVOb25FbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgpCiAg
ICAgcmV0dXJuICFTSEZpbGVPcGVyYXRpb24oJmRlbGV0ZU9wZXJhdGlvbik7CiB9CiAKK1N0cmlu
ZyBnZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpCit7CisgICAgRFdPUkQgYnVmZmVyTGVuZ3Ro
ID0gOjpHZXRDdXJyZW50RGlyZWN0b3J5VygwLCBudWxscHRyKTsKKyAgICBpZiAoIWJ1ZmZlckxl
bmd0aCkKKyAgICAgICAgcmV0dXJuICIiOworICAgIC8vIEluIFdpbmRvd3MsIHdjaGFyX3QgaXMg
dGhlIFVURi0xNkxFLgorICAgIC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xp
YnJhcnkvZGQzNzQwODEuYXNweAorICAgIC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2Vu
LXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2ZmMzgxNDA3LmFzcHgKKyAgICBWZWN0b3I8d2No
YXJfdD4gYnVmZmVyKGJ1ZmZlckxlbmd0aCk7CisgICAgRFdPUkQgbGVuZ3RoTm90SW5jbHVkaW5n
TnVsbCA9IDo6R2V0Q3VycmVudERpcmVjdG9yeVcoYnVmZmVyTGVuZ3RoLCBidWZmZXIuZGF0YSgp
KTsKKyAgICByZXR1cm4gd2NoYXJUb1N0cmluZyhidWZmZXIuZGF0YSgpLCBsZW5ndGhOb3RJbmNs
dWRpbmdOdWxsKTsKK30KKworYm9vbCBjaGFuZ2VDdXJyZW50V29ya2luZ0RpcmVjdG9yeShjb25z
dCBTdHJpbmcgJmZpbGVQYXRoKQoreworICAgIFN0cmluZyBkZXN0aW5hdGlvbiA9IGZpbGVQYXRo
OworICAgIHJldHVybiBTZXRDdXJyZW50RGlyZWN0b3J5VyhzdHJpbmdUb051bGxUZXJtaW5hdGVk
V0NoYXIoZGVzdGluYXRpb24pLmRhdGEoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEZpbGVTeXN0
ZW1JbXBsCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxYzJhNTRlOTI2YS4uYmM3N2I1ZTgzNjQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBA
QAorMjAxOS0wMi0wNiAgU3RlcGhhbiBTemFibyAgPHN0ZXBoYW4uc3phYm9Ac29ueS5jb20+CisK
KyAgICAgICAgW1dURl0gQWRkIGdldHRpbmcvY2hhbmdpbmcgY3VycmVudCB3b3JraW5nIGRpcmVj
dG9yeSB0byBGaWxlU3lzdGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTQzNDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgdGVzdCBmb3IgV1RGOjpGaWxlU3lzdGVtOjpnZXRDdXJyZW50V29ya2lu
Z0RpcmVjdG9yeSBhbmQKKyAgICAgICAgV1RGOjpGaWxlU3lzdGVtOjpjaGFuZ2VDdXJyZW50V29y
a2luZ0RpcmVjdG9yeS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVT
eXN0ZW0uY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RmlsZVN5c3RlbVRlc3Q6OnRlbXBE
aXJlY3RvcnlQYXRoKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisKIDIwMTkt
MDItMDMgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAg
ICAgW1dpbl0gV2ViS2l0VGVzdFJ1bm5lcnMgaXMgZmFpbGluZyB0byBjcmVhdGUgdGhlIEluZGV4
ZWREQiBkaXJlY3RvcnkuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9GaWxlU3lzdGVtLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0
ZW0uY3BwCmluZGV4IDgzMDU1MjU1NmRlLi5mYmI5YzdmNThmYSAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAKQEAgLTYzLDYgKzYzLDkgQEAgcHVibGlj
OgogCiAgICAgICAgIG1fcXVvdGVDb250YWluaW5nRmlsZVBhdGggPSBGaWxlU3lzdGVtOjpvcGVu
VGVtcG9yYXJ5RmlsZSgidGVtcFwiRW1wdHlcIlRlc3RGaWxlIiwgaGFuZGxlKTsKICAgICAgICAg
RmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CisKKyAgICAgICAgbV90ZW1wRGlyZWN0b3J5
UGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChGaWxlU3lzdGVtOjpk
aXJlY3RvcnlOYW1lKG1fdGVtcEVtcHR5RmlsZVBhdGgpLCAidGVtcERpcmVjdG9yeSIpOworICAg
ICAgICBGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMobV90ZW1wRGlyZWN0b3J5UGF0aCk7
CiAgICAgfQogCiAgICAgdm9pZCBUZWFyRG93bigpIG92ZXJyaWRlCkBAIC03Myw2ICs3Niw3IEBA
IHB1YmxpYzoKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShtX3NwYWNlQ29udGFpbmlu
Z0ZpbGVQYXRoKTsKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShtX2JhbmdDb250YWlu
aW5nRmlsZVBhdGgpOwogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKG1fcXVvdGVDb250
YWluaW5nRmlsZVBhdGgpOworICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURpcmVjdG9y
eShtX3RlbXBEaXJlY3RvcnlQYXRoKTsKICAgICB9CiAKICAgICBjb25zdCBTdHJpbmcmIHRlbXBG
aWxlUGF0aCgpIHsgcmV0dXJuIG1fdGVtcEZpbGVQYXRoOyB9CkBAIC04MSw2ICs4NSw3IEBAIHB1
YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIHNwYWNlQ29udGFpbmluZ0ZpbGVQYXRoKCkgeyByZXR1
cm4gbV9zcGFjZUNvbnRhaW5pbmdGaWxlUGF0aDsgfQogICAgIGNvbnN0IFN0cmluZyYgYmFuZ0Nv
bnRhaW5pbmdGaWxlUGF0aCgpIHsgcmV0dXJuIG1fYmFuZ0NvbnRhaW5pbmdGaWxlUGF0aDsgfQog
ICAgIGNvbnN0IFN0cmluZyYgcXVvdGVDb250YWluaW5nRmlsZVBhdGgoKSB7IHJldHVybiBtX3F1
b3RlQ29udGFpbmluZ0ZpbGVQYXRoOyB9CisgICAgY29uc3QgU3RyaW5nJiB0ZW1wRGlyZWN0b3J5
UGF0aCgpIHsgcmV0dXJuIG1fdGVtcERpcmVjdG9yeVBhdGg7IH0KIAogcHJpdmF0ZToKICAgICBT
dHJpbmcgbV90ZW1wRmlsZVBhdGg7CkBAIC04OSw2ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgU3Ry
aW5nIG1fc3BhY2VDb250YWluaW5nRmlsZVBhdGg7CiAgICAgU3RyaW5nIG1fYmFuZ0NvbnRhaW5p
bmdGaWxlUGF0aDsKICAgICBTdHJpbmcgbV9xdW90ZUNvbnRhaW5pbmdGaWxlUGF0aDsKKyAgICBT
dHJpbmcgbV90ZW1wRGlyZWN0b3J5UGF0aDsKIH07CiAKIFRFU1RfRihGaWxlU3lzdGVtVGVzdCwg
TWFwcGluZ01pc3NpbmdGaWxlKQpAQCAtMTQ1LDQgKzE1MSwxNSBAQCBURVNUX0YoRmlsZVN5c3Rl
bVRlc3QsIFVuaWNvZGVEaXJlY3RvcnlOYW1lKQogICAgIEVYUEVDVF9UUlVFKGV4cGVjdGVkRGly
ZWN0b3J5TmFtZSA9PSBkaXJlY3RvcnlOYW1lKTsKIH0KIAorVEVTVF9GKEZpbGVTeXN0ZW1UZXN0
LCBDdXJyZW50V29ya2luZ0RpcmVjdG9yeSkKK3sKKyAgICBhdXRvIG9yaWdpbmFsUGF0aCA9IEZp
bGVTeXN0ZW06OmdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KCk7CisgICAgYXV0byBjaGFuZ2Ug
PSBGaWxlU3lzdGVtOjpjaGFuZ2VDdXJyZW50V29ya2luZ0RpcmVjdG9yeSh0ZW1wRGlyZWN0b3J5
UGF0aCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjaGFuZ2UpOworICAgIGF1dG8gbmV3UGF0aCA9IEZp
bGVTeXN0ZW06OmdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KCk7CisgICAgRVhQRUNUX1RSVUUo
bmV3UGF0aCA9PSB0ZW1wRGlyZWN0b3J5UGF0aCgpKTsKKyAgICBhdXRvIGNoYW5nZUJhY2sgPSBG
aWxlU3lzdGVtOjpjaGFuZ2VDdXJyZW50V29ya2luZ0RpcmVjdG9yeShvcmlnaW5hbFBhdGgpOwor
ICAgIEVYUEVDVF9UUlVFKGNoYW5nZUJhY2spOworfQorCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361404</attachid>
            <date>2019-02-07 09:14:37 -0800</date>
            <delta_ts>2019-02-10 14:57:43 -0800</delta_ts>
            <desc>Add get/change current working directory functions, fix a few issues</desc>
            <filename>194344.2.diff</filename>
            <type>text/plain</type>
            <size>10910</size>
            <attacher name="Stephan Szabo">stephan.szabo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggMTNjYTkyMjFmZDkuLmVmZTZjMjMyNDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE5
LTAyLTA2ICBTdGVwaGFuIFN6YWJvICA8c3RlcGhhbi5zemFib0Bzb255LmNvbT4KKworICAgICAg
ICBbV1RGXSBBZGQgZ2V0dGluZy9jaGFuZ2luZyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHRv
IEZpbGVTeXN0ZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5NDM0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogd3RmL0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgQWRkIG5ldyBnZXRDdXJyZW50V29ya2lu
Z0RpcmVjdG9yeSBhbmQKKyAgICAgICAgY2hhbmdlQ3VycmVudFdvcmtpbmdEaXJlY3RvcnkgbWV0
aG9kcy4KKyAgICAgICAgKiB3dGYvUGxhdGZvcm1QbGF5U3RhdGlvbi5jbWFrZToKKyAgICAgICAg
QWRkIG5ldyBGaWxlU3lzdGVtUGxheVN0YXRpb24uY3BwIHRvIGJ1aWxkCisgICAgICAgICogd3Rm
L2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6
Z2V0Q3VycmVudFdvcmtpbmdEaXJlY3RvcnkpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1w
bDo6Y2hhbmdlQ3VycmVudFdvcmtpbmdEaXJlY3RvcnkpOgorICAgICAgICAqIHd0Zi9wbGF5c3Rh
dGlvbi9GaWxlU3lzdGVtUGxheVN0YXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgU2ltdWxhdGUg
aGF2aW5nIGEgd29ya2luZyBkaXJlY3RvcnkgZm9yIHRoaXMgcGxhdGZvcm0uCisgICAgICAgIChX
VEY6OkZpbGVTeXN0ZW1JbXBsOjpnZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSk6CisgICAgICAg
IChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpjaGFuZ2VDdXJyZW50V29ya2luZ0RpcmVjdG9yeSk6Cisg
ICAgICAgICogd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHA6CisgICAgICAgIChXVEY6OkZp
bGVTeXN0ZW1JbXBsOjpnZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSk6CisgICAgICAgIChXVEY6
OkZpbGVTeXN0ZW1JbXBsOjpjaGFuZ2VDdXJyZW50V29ya2luZ0RpcmVjdG9yeSk6CisgICAgICAg
ICogd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUlt
cGw6OmdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6OmNoYW5nZUN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KToKKwogMjAxOS0wMi0wMyAgQ29t
bWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjI0MDg5Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVT
eXN0ZW0uaCBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAppbmRleCA5MDM5NjJhZDQ2ZC4u
MDM5YmRlNDljNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKQEAgLTE4Nyw2ICsxODcsOSBAQCBXVEZfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBkZWxldGVOb25FbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmKTsK
IAogV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyByZWFsUGF0aChjb25zdCBTdHJpbmcmKTsKIAor
V1RGX0VYUE9SVF9QUklWQVRFIE9wdGlvbmFsPFN0cmluZz4gZ2V0Q3VycmVudFdvcmtpbmdEaXJl
Y3RvcnkoKTsKK1dURl9FWFBPUlRfUFJJVkFURSBib29sIGNoYW5nZUN1cnJlbnRXb3JraW5nRGly
ZWN0b3J5KGNvbnN0IFN0cmluZyYpOworCiBjbGFzcyBNYXBwZWRGaWxlRGF0YSB7CiBwdWJsaWM6
CiAgICAgTWFwcGVkRmlsZURhdGEoKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtUGxheVN0YXRpb24uY21ha2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVBsYXlTdGF0
aW9uLmNtYWtlCmluZGV4IDRiNjkxOTA3NmYzLi45Mzc4MTJhMmUzYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvUGxhdGZvcm1QbGF5U3RhdGlvbi5jbWFrZQorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCkBAIC01LDYgKzUsOCBAQCBsaXN0KEFQUEVORCBX
VEZfU09VUkNFUwogICAgIGdlbmVyaWMvUnVuTG9vcEdlbmVyaWMuY3BwCiAgICAgZ2VuZXJpYy9X
b3JrUXVldWVHZW5lcmljLmNwcAogCisgICAgcGxheXN0YXRpb24vRmlsZVN5c3RlbVBsYXlTdGF0
aW9uLmNwcAorCiAgICAgcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAogICAgIHBvc2l4L09TQWxs
b2NhdG9yUE9TSVguY3BwCiAgICAgcG9zaXgvVGhyZWFkaW5nUE9TSVguY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCmluZGV4IGMzZWM5OWEzZDFiLi40ZjMxZTNkMjc1YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKKysrIGIv
U291cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKQEAgLTQ2NSw1ICs0NjUsMTcg
QEAgYm9vbCB1bmxvY2tGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUpCiB9CiAjZW5kaWYg
Ly8gVVNFKEZJTEVfTE9DSykKIAorT3B0aW9uYWw8U3RyaW5nPiBnZXRDdXJyZW50V29ya2luZ0Rp
cmVjdG9yeSgpCit7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBjdXJyZW50RGlyKGdfZ2V0X2N1cnJl
bnRfZGlyKCkpOworICAgIHJldHVybiBzdHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KGN1cnJlbnREaXIuZ2V0KCkpOworfQorCitib29sIGNoYW5nZUN1cnJlbnRXb3JraW5nRGlyZWN0
b3J5KGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCit7CisgICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVT
eXN0ZW1SZXByZXNlbnRhdGlvbihmaWxlUGF0aCk7CisgICAgcmV0dXJuICFjaGRpcihmc1JlcC5k
YXRhKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbAogfSAvLyBuYW1lc3Bh
Y2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9wbGF5c3RhdGlvbi9GaWxlU3lzdGVt
UGxheVN0YXRpb24uY3BwIGIvU291cmNlL1dURi93dGYvcGxheXN0YXRpb24vRmlsZVN5c3RlbVBs
YXlTdGF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMWNi
NjdkZTIzMDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9wbGF5c3RhdGlvbi9G
aWxlU3lzdGVtUGxheVN0YXRpb24uY3BwCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgRmlsZVN5c3RlbUltcGwgewor
CitjaGFyIGN1cnJlbnRXb3JraW5nRGlyZWN0b3J5W1BBVEhfTUFYXSA9IHswfTsKKworT3B0aW9u
YWw8U3RyaW5nPiBnZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpCit7CisgICAgaWYgKCFjdXJy
ZW50V29ya2luZ0RpcmVjdG9yeVswXSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICByZXR1cm4gc3RyaW5nRnJvbUZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihjdXJyZW50V29ya2lu
Z0RpcmVjdG9yeSk7Cit9CisKK2Jvb2wgY2hhbmdlQ3VycmVudFdvcmtpbmdEaXJlY3RvcnkoY29u
c3QgU3RyaW5nICZmaWxlUGF0aCkKK3sKKyAgICBDU3RyaW5nIHBhdGggPSBmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24oZmlsZVBhdGgpOworICAgIGlmIChwYXRoLmxlbmd0aCgpID4gc2l6ZW9mKGN1
cnJlbnRXb3JraW5nRGlyZWN0b3J5KSAtIDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBz
dHJuY3B5KGN1cnJlbnRXb3JraW5nRGlyZWN0b3J5LCBwYXRoLmRhdGEoKSwgc2l6ZW9mKGN1cnJl
bnRXb3JraW5nRGlyZWN0b3J5KSk7CisgICAgY3VycmVudFdvcmtpbmdEaXJlY3Rvcnlbc2l6ZW9m
KGN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KS0xXSA9IDA7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEZpbGVTeXN0ZW1JbXBsCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCmluZGV4IDcwZDJmOThlNGQ3Li4wY2I2
NDJmZjA5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lY
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCkBAIC00
OTIsNSArNDkyLDIxIEBAIFN0cmluZyByZWFsUGF0aChjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQog
ICAgIHJldHVybiByZXN1bHQgPyBTdHJpbmc6OmZyb21VVEY4KHJlc3VsdCkgOiBmaWxlUGF0aDsK
IH0KIAorI2lmICFQTEFURk9STShQTEFZU1RBVElPTikKK09wdGlvbmFsPFN0cmluZz4gZ2V0Q3Vy
cmVudFdvcmtpbmdEaXJlY3RvcnkoKQoreworICAgIGNoYXIgd29ya2luZ0RpcmVjdG9yeVtQQVRI
X01BWF07CisgICAgaWYgKCFnZXRjd2Qod29ya2luZ0RpcmVjdG9yeSwgc2l6ZW9mKHdvcmtpbmdE
aXJlY3RvcnkpKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gc3Ry
aW5nRnJvbUZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbih3b3JraW5nRGlyZWN0b3J5KTsKK30KKwor
Ym9vbCBjaGFuZ2VDdXJyZW50V29ya2luZ0RpcmVjdG9yeShjb25zdCBTdHJpbmcmIGZpbGVQYXRo
KQoreworICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZmlsZVBh
dGgpOworICAgIHJldHVybiAhY2hkaXIoZnNSZXAuZGF0YSgpKTsKK30KKyNlbmRpZgorCiB9IC8v
IG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi93
aW4vRmlsZVN5c3RlbVdpbi5jcHAKaW5kZXggZDY3MmFmNjM3NDYuLmJlODcyODc3YTkwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCkBAIC01ODIsNSArNTgyLDI2IEBAIGJvb2wg
ZGVsZXRlTm9uRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnlQYXRoKQogICAg
IHJldHVybiAhU0hGaWxlT3BlcmF0aW9uKCZkZWxldGVPcGVyYXRpb24pOwogfQogCitPcHRpb25h
bDxTdHJpbmc+IGdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KCkKK3sKKyAgICBEV09SRCBidWZm
ZXJMZW5ndGggPSA6OkdldEN1cnJlbnREaXJlY3RvcnlXKDAsIG51bGxwdHIpOworICAgIGlmICgh
YnVmZmVyTGVuZ3RoKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIC8vIEluIFdp
bmRvd3MsIHdjaGFyX3QgaXMgdGhlIFVURi0xNkxFLgorICAgIC8vIGh0dHBzOi8vbXNkbi5taWNy
b3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvZGQzNzQwODEuYXNweAorICAgIC8vIGh0dHBzOi8vbXNk
bi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2ZmMzgxNDA3LmFz
cHgKKyAgICBWZWN0b3I8d2NoYXJfdD4gYnVmZmVyKGJ1ZmZlckxlbmd0aCk7CisgICAgRFdPUkQg
bGVuZ3RoTm90SW5jbHVkaW5nTnVsbCA9IDo6R2V0Q3VycmVudERpcmVjdG9yeVcoYnVmZmVyTGVu
Z3RoLCBidWZmZXIuZGF0YSgpKTsKKyAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ051bGwpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHdjaGFyVG9TdHJpbmcoYnVm
ZmVyLmRhdGEoKSwgbGVuZ3RoTm90SW5jbHVkaW5nTnVsbCk7Cit9CisKK2Jvb2wgY2hhbmdlQ3Vy
cmVudFdvcmtpbmdEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKK3sKKyAgICBTdHJp
bmcgZGVzdGluYXRpb24gPSBmaWxlUGF0aDsKKyAgICByZXR1cm4gU2V0Q3VycmVudERpcmVjdG9y
eVcoc3RyaW5nVG9OdWxsVGVybWluYXRlZFdDaGFyKGRlc3RpbmF0aW9uKS5kYXRhKCkpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYg
LS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMWMyYTU0ZTky
NmEuLmJjNzdiNWU4MzY0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTktMDItMDYgIFN0ZXBoYW4gU3phYm8gIDxz
dGVwaGFuLnN6YWJvQHNvbnkuY29tPgorCisgICAgICAgIFtXVEZdIEFkZCBnZXR0aW5nL2NoYW5n
aW5nIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgdG8gRmlsZVN5c3RlbQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MzQ0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRlc3QgZm9yIFdURjo6Rmls
ZVN5c3RlbTo6Z2V0Q3VycmVudFdvcmtpbmdEaXJlY3RvcnkgYW5kCisgICAgICAgIFdURjo6Rmls
ZVN5c3RlbTo6Y2hhbmdlQ3VycmVudFdvcmtpbmdEaXJlY3RvcnkuCisKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OkZpbGVTeXN0ZW1UZXN0Ojp0ZW1wRGlyZWN0b3J5UGF0aCk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpURVNUX0YpOgorCiAyMDE5LTAyLTAzICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3Jp
LkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtXaW5dIFdlYktpdFRlc3RSdW5uZXJzIGlzIGZh
aWxpbmcgdG8gY3JlYXRlIHRoZSBJbmRleGVkREIgZGlyZWN0b3J5LgpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcAppbmRleCA4MzA1NTI1NTZkZS4uNGMzN2Vj
NTEwZWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0
ZW0uY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3Bw
CkBAIC02Myw2ICs2Myw5IEBAIHB1YmxpYzoKIAogICAgICAgICBtX3F1b3RlQ29udGFpbmluZ0Zp
bGVQYXRoID0gRmlsZVN5c3RlbTo6b3BlblRlbXBvcmFyeUZpbGUoInRlbXBcIkVtcHR5XCJUZXN0
RmlsZSIsIGhhbmRsZSk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwor
CisgICAgICAgIG1fdGVtcERpcmVjdG9yeVBhdGggPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQoRmlsZVN5c3RlbTo6ZGlyZWN0b3J5TmFtZShtX3RlbXBFbXB0eUZpbGVQYXRo
KSwgInRlbXBEaXJlY3RvcnkiKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9y
aWVzKG1fdGVtcERpcmVjdG9yeVBhdGgpOwogICAgIH0KIAogICAgIHZvaWQgVGVhckRvd24oKSBv
dmVycmlkZQpAQCAtNzMsNiArNzYsNyBAQCBwdWJsaWM6CiAgICAgICAgIEZpbGVTeXN0ZW06OmRl
bGV0ZUZpbGUobV9zcGFjZUNvbnRhaW5pbmdGaWxlUGF0aCk7CiAgICAgICAgIEZpbGVTeXN0ZW06
OmRlbGV0ZUZpbGUobV9iYW5nQ29udGFpbmluZ0ZpbGVQYXRoKTsKICAgICAgICAgRmlsZVN5c3Rl
bTo6ZGVsZXRlRmlsZShtX3F1b3RlQ29udGFpbmluZ0ZpbGVQYXRoKTsKKyAgICAgICAgRmlsZVN5
c3RlbTo6ZGVsZXRlRW1wdHlEaXJlY3RvcnkobV90ZW1wRGlyZWN0b3J5UGF0aCk7CiAgICAgfQog
CiAgICAgY29uc3QgU3RyaW5nJiB0ZW1wRmlsZVBhdGgoKSB7IHJldHVybiBtX3RlbXBGaWxlUGF0
aDsgfQpAQCAtODEsNiArODUsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiBzcGFjZUNv
bnRhaW5pbmdGaWxlUGF0aCgpIHsgcmV0dXJuIG1fc3BhY2VDb250YWluaW5nRmlsZVBhdGg7IH0K
ICAgICBjb25zdCBTdHJpbmcmIGJhbmdDb250YWluaW5nRmlsZVBhdGgoKSB7IHJldHVybiBtX2Jh
bmdDb250YWluaW5nRmlsZVBhdGg7IH0KICAgICBjb25zdCBTdHJpbmcmIHF1b3RlQ29udGFpbmlu
Z0ZpbGVQYXRoKCkgeyByZXR1cm4gbV9xdW90ZUNvbnRhaW5pbmdGaWxlUGF0aDsgfQorICAgIGNv
bnN0IFN0cmluZyYgdGVtcERpcmVjdG9yeVBhdGgoKSB7IHJldHVybiBtX3RlbXBEaXJlY3RvcnlQ
YXRoOyB9CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdGVtcEZpbGVQYXRoOwpAQCAtODksNiAr
OTQsNyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX3NwYWNlQ29udGFpbmluZ0ZpbGVQYXRoOwog
ICAgIFN0cmluZyBtX2JhbmdDb250YWluaW5nRmlsZVBhdGg7CiAgICAgU3RyaW5nIG1fcXVvdGVD
b250YWluaW5nRmlsZVBhdGg7CisgICAgU3RyaW5nIG1fdGVtcERpcmVjdG9yeVBhdGg7CiB9Owog
CiBURVNUX0YoRmlsZVN5c3RlbVRlc3QsIE1hcHBpbmdNaXNzaW5nRmlsZSkKQEAgLTE0NSw0ICsx
NTEsMTcgQEAgVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBVbmljb2RlRGlyZWN0b3J5TmFtZSkKICAg
ICBFWFBFQ1RfVFJVRShleHBlY3RlZERpcmVjdG9yeU5hbWUgPT0gZGlyZWN0b3J5TmFtZSk7CiB9
CiAKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgQ3VycmVudFdvcmtpbmdEaXJlY3RvcnkpCit7Cisg
ICAgYXV0byBvcmlnaW5hbFBhdGggPSBGaWxlU3lzdGVtOjpnZXRDdXJyZW50V29ya2luZ0RpcmVj
dG9yeSgpOworICAgIEVYUEVDVF9UUlVFKG9yaWdpbmFsUGF0aCk7CisgICAgYXV0byBjaGFuZ2Ug
PSBGaWxlU3lzdGVtOjpjaGFuZ2VDdXJyZW50V29ya2luZ0RpcmVjdG9yeSh0ZW1wRGlyZWN0b3J5
UGF0aCgpKTsKKyAgICBFWFBFQ1RfVFJVRShjaGFuZ2UpOworICAgIGF1dG8gbmV3UGF0aCA9IEZp
bGVTeXN0ZW06OmdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KCk7CisgICAgYXV0byBjaGFuZ2VC
YWNrID0gRmlsZVN5c3RlbTo6Y2hhbmdlQ3VycmVudFdvcmtpbmdEaXJlY3Rvcnkob3JpZ2luYWxQ
YXRoLnZhbHVlKCkpOworICAgIEVYUEVDVF9UUlVFKG5ld1BhdGgpOworICAgIEVYUEVDVF9UUlVF
KG5ld1BhdGgudmFsdWUoKSA9PSB0ZW1wRGlyZWN0b3J5UGF0aCgpKTsKKyAgICBFWFBFQ1RfVFJV
RShjaGFuZ2VCYWNrKTsKK30KKwogfQo=
</data>
<flag name="review"
          id="378085"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361644</attachid>
            <date>2019-02-10 14:57:43 -0800</date>
            <delta_ts>2022-02-10 16:52:36 -0800</delta_ts>
            <desc>Add get/change current working directory functions</desc>
            <filename>194344.3.diff</filename>
            <type>text/plain</type>
            <size>11227</size>
            <attacher name="Stephan Szabo">stephan.szabo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggMTNjYTkyMjFmZDkuLjU2Y2E3OWNkN2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE5
LTAyLTEwICBTdGVwaGFuIFN6YWJvICA8c3RlcGhhbi5zemFib0Bzb255LmNvbT4KKworICAgICAg
ICBbV1RGXSBBZGQgZ2V0dGluZy9jaGFuZ2luZyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHRv
IEZpbGVTeXN0ZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5NDM0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogd3RmL0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgQWRkIG5ldyBnZXRDdXJyZW50V29ya2lu
Z0RpcmVjdG9yeSBhbmQKKyAgICAgICAgY2hhbmdlQ3VycmVudFdvcmtpbmdEaXJlY3RvcnkgbWV0
aG9kcy4KKyAgICAgICAgKiB3dGYvUGxhdGZvcm1QbGF5U3RhdGlvbi5jbWFrZToKKyAgICAgICAg
QWRkIG5ldyBGaWxlU3lzdGVtUGxheVN0YXRpb24uY3BwIHRvIGJ1aWxkCisgICAgICAgICogd3Rm
L2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwOgorICAgICAgICAqIHd0Zi9wbGF5c3RhdGlvbi9GaWxl
U3lzdGVtUGxheVN0YXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgQXMgUGxheVN0YXRpb24gZG9l
c24ndCBwcm92aWRlIHVzZXIgcHJvZ3JhbXMgdGhlIHNhbWUKKyAgICAgICAgc29ydCBvZiBjd2Qv
cmVsYXRpdmUgcGF0aCBzdXBwb3J0IGFzIG90aGVyIHN5c3RlbXMsCisgICAgICAgIHNpbXVsYXRl
IGl0LgorICAgICAgICAqIHd0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwOgorICAgICAgICAq
IHd0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHA6CisKIDIwMTktMDItMDMgIENvbW1pdCBRdWV1ZSAg
PGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHIyNDA4OTYuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmggYi9T
b3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKaW5kZXggOTAzOTYyYWQ0NmQuLjAzOWJkZTQ5Yzc2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvRmlsZVN5c3RlbS5oCkBAIC0xODcsNiArMTg3LDkgQEAgV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgZGVsZXRlTm9uRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJik7CiAKIFdURl9FWFBP
UlRfUFJJVkFURSBTdHJpbmcgcmVhbFBhdGgoY29uc3QgU3RyaW5nJik7CiAKK1dURl9FWFBPUlRf
UFJJVkFURSBPcHRpb25hbDxTdHJpbmc+IGdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KCk7CitX
VEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBjaGFuZ2VDdXJyZW50V29ya2luZ0RpcmVjdG9yeShjb25z
dCBTdHJpbmcmKTsKKwogY2xhc3MgTWFwcGVkRmlsZURhdGEgewogcHVibGljOgogICAgIE1hcHBl
ZEZpbGVEYXRhKCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVBsYXlT
dGF0aW9uLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1QbGF5U3RhdGlvbi5jbWFrZQpp
bmRleCA0YjY5MTkwNzZmMy4uOTM3ODEyYTJlM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1Q
bGF5U3RhdGlvbi5jbWFrZQpAQCAtNSw2ICs1LDggQEAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMK
ICAgICBnZW5lcmljL1J1bkxvb3BHZW5lcmljLmNwcAogICAgIGdlbmVyaWMvV29ya1F1ZXVlR2Vu
ZXJpYy5jcHAKIAorICAgIHBsYXlzdGF0aW9uL0ZpbGVTeXN0ZW1QbGF5U3RhdGlvbi5jcHAKKwog
ICAgIHBvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKICAgICBwb3NpeC9PU0FsbG9jYXRvclBPU0lY
LmNwcAogICAgIHBvc2l4L1RocmVhZGluZ1BPU0lYLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL0ZpbGVT
eXN0ZW1HbGliLmNwcAppbmRleCBjM2VjOTlhM2QxYi4uYjJjNTc3YmI5MmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCisrKyBiL1NvdXJjZS9XVEYv
d3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCkBAIC00NjUsNSArNDY1LDIwIEBAIGJvb2wgdW5s
b2NrRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlKQogfQogI2VuZGlmIC8vIFVTRShGSUxF
X0xPQ0spCiAKK09wdGlvbmFsPFN0cmluZz4gZ2V0Q3VycmVudFdvcmtpbmdEaXJlY3RvcnkoKQor
eworICAgIEdVbmlxdWVQdHI8Y2hhcj4gY3VycmVudERpcihnX2dldF9jdXJyZW50X2RpcigpKTsK
KyAgICByZXR1cm4gc3RyaW5nRnJvbUZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihjdXJyZW50RGly
LmdldCgpKTsKK30KKworYm9vbCBjaGFuZ2VDdXJyZW50V29ya2luZ0RpcmVjdG9yeShjb25zdCBT
dHJpbmcmIGZpbGVQYXRoKQoreworI2lmIE9TKFdJTkRPV1MpCisgICAgcmV0dXJuIFNldEN1cnJl
bnRXb3JraW5nRGlyZWN0b3J5KGZpbGVQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9u
KCkuZGF0YSgpKTsKKyNlbHNlCisgICAgcmV0dXJuICFjaGRpcihmaWxlU3lzdGVtUmVwcmVzZW50
YXRpb24oZmlsZVBhdGgpLmRhdGEoKSk7CisjZW5kaWYKK30KKwogfSAvLyBuYW1lc3BhY2UgRmls
ZVN5c3RlbUltcGwKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvcGxheXN0YXRpb24vRmlsZVN5c3RlbVBsYXlTdGF0aW9uLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L3BsYXlzdGF0aW9uL0ZpbGVTeXN0ZW1QbGF5U3RhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY3OGFjZjExNjU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dURi93dGYvcGxheXN0YXRpb24vRmlsZVN5c3RlbVBsYXlTdGF0aW9uLmNwcApAQCAtMCww
ICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50
ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworbmFt
ZXNwYWNlIEZpbGVTeXN0ZW1JbXBsIHsKKworY2hhciBjdXJyZW50V29ya2luZ0RpcmVjdG9yeVtQ
QVRIX01BWF0gPSB7MH07CisKK09wdGlvbmFsPFN0cmluZz4gZ2V0Q3VycmVudFdvcmtpbmdEaXJl
Y3RvcnkoKQoreworICAgIGlmICghY3VycmVudFdvcmtpbmdEaXJlY3RvcnlbMF0pCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHN0cmluZ0Zyb21GaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24oY3VycmVudFdvcmtpbmdEaXJlY3RvcnkpOworfQorCitib29sIGNoYW5nZUN1
cnJlbnRXb3JraW5nRGlyZWN0b3J5KGNvbnN0IFN0cmluZyAmZmlsZVBhdGgpCit7CisgICAgQ1N0
cmluZyBwYXRoID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGZpbGVQYXRoKTsKKyAgICBpZiAo
cGF0aC5sZW5ndGgoKSA+IHNpemVvZihjdXJyZW50V29ya2luZ0RpcmVjdG9yeSkgLSAxKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgc3RybmNweShjdXJyZW50V29ya2luZ0RpcmVjdG9yeSwg
cGF0aC5kYXRhKCksIHNpemVvZihjdXJyZW50V29ya2luZ0RpcmVjdG9yeSkpOworICAgIGN1cnJl
bnRXb3JraW5nRGlyZWN0b3J5W3NpemVvZihjdXJyZW50V29ya2luZ0RpcmVjdG9yeSktMV0gPSAw
OworICAgIHJldHVybiB0cnVlOworfQorCitDU3RyaW5nIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgaWYgKHBhdGhbMF0gIT0gJy8nKSB7CisgICAg
ICAgIGF1dG8gY3dkID0gZ2V0Q3VycmVudFdvcmtpbmdEaXJlY3RvcnkoKTsKKyAgICAgICAgaWYg
KGN3ZCAmJiBjd2QudmFsdWUoKS5sZW5ndGgoKSkgeworICAgICAgICAgICAgU3RyaW5nQnVpbGRl
ciBidWlsZGVyOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoY3dkLnZhbHVlKCkpOworICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQoJy8nKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KHBhdGgpOworICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKS51dGY4KCk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHBhdGgudXRmOCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBGaWxlU3lzdGVtSW1wbAorfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwIGIvU291cmNlL1dURi93dGYvcG9z
aXgvRmlsZVN5c3RlbVBPU0lYLmNwcAppbmRleCA3MGQyZjk4ZTRkNy4uZTIzOWU1MGIzYTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKKysrIGIv
U291cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcApAQCAtMzkxLDExICszOTEs
MTMgQEAgU3RyaW5nIHN0cmluZ0Zyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3QgY2hh
ciogcGF0aCkKICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChwYXRoKTsKIH0KIAorI2lmICFQ
TEFURk9STShQTEFZU1RBVElPTikKIENTdHJpbmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNv
bnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICByZXR1cm4gcGF0aC51dGY4KCk7CiB9CiAjZW5kaWYK
KyNlbmRpZgogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogYm9vbCBtb3ZlRmlsZShjb25zdCBTdHJp
bmcmIG9sZFBhdGgsIGNvbnN0IFN0cmluZyYgbmV3UGF0aCkKQEAgLTQ5Miw1ICs0OTQsMjAgQEAg
U3RyaW5nIHJlYWxQYXRoKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCiAgICAgcmV0dXJuIHJlc3Vs
dCA/IFN0cmluZzo6ZnJvbVVURjgocmVzdWx0KSA6IGZpbGVQYXRoOwogfQogCisjaWYgIVBMQVRG
T1JNKFBMQVlTVEFUSU9OKQorT3B0aW9uYWw8U3RyaW5nPiBnZXRDdXJyZW50V29ya2luZ0RpcmVj
dG9yeSgpCit7CisgICAgY2hhciB3b3JraW5nRGlyZWN0b3J5W1BBVEhfTUFYXTsKKyAgICBpZiAo
IWdldGN3ZCh3b3JraW5nRGlyZWN0b3J5LCBzaXplb2Yod29ya2luZ0RpcmVjdG9yeSkpKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBzdHJpbmdGcm9tRmlsZVN5c3Rl
bVJlcHJlc2VudGF0aW9uKHdvcmtpbmdEaXJlY3RvcnkpOworfQorCitib29sIGNoYW5nZUN1cnJl
bnRXb3JraW5nRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCit7CisgICAgcmV0dXJu
ICFjaGRpcihmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZmlsZVBhdGgpLmRhdGEoKSk7Cit9Cisj
ZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgRmlsZVN5c3RlbUltcGwKIH0gLy8gbmFtZXNwYWNlIFdU
RgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwIGIvU291
cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCmluZGV4IGQ2NzJhZjYzNzQ2Li5iZTg3
Mjg3N2E5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3Bw
CisrKyBiL1NvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcApAQCAtNTgyLDUgKzU4
MiwyNiBAQCBib29sIGRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGlyZWN0
b3J5UGF0aCkKICAgICByZXR1cm4gIVNIRmlsZU9wZXJhdGlvbigmZGVsZXRlT3BlcmF0aW9uKTsK
IH0KIAorT3B0aW9uYWw8U3RyaW5nPiBnZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpCit7Cisg
ICAgRFdPUkQgYnVmZmVyTGVuZ3RoID0gOjpHZXRDdXJyZW50RGlyZWN0b3J5VygwLCBudWxscHRy
KTsKKyAgICBpZiAoIWJ1ZmZlckxlbmd0aCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICAvLyBJbiBXaW5kb3dzLCB3Y2hhcl90IGlzIHRoZSBVVEYtMTZMRS4KKyAgICAvLyBodHRw
czovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2RkMzc0MDgxLmFzcHgKKyAgICAv
LyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3Rv
cC9mZjM4MTQwNy5hc3B4CisgICAgVmVjdG9yPHdjaGFyX3Q+IGJ1ZmZlcihidWZmZXJMZW5ndGgp
OworICAgIERXT1JEIGxlbmd0aE5vdEluY2x1ZGluZ051bGwgPSA6OkdldEN1cnJlbnREaXJlY3Rv
cnlXKGJ1ZmZlckxlbmd0aCwgYnVmZmVyLmRhdGEoKSk7CisgICAgaWYgKCFsZW5ndGhOb3RJbmNs
dWRpbmdOdWxsKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiB3Y2hh
clRvU3RyaW5nKGJ1ZmZlci5kYXRhKCksIGxlbmd0aE5vdEluY2x1ZGluZ051bGwpOworfQorCiti
b29sIGNoYW5nZUN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZmlsZVBhdGgp
Cit7CisgICAgU3RyaW5nIGRlc3RpbmF0aW9uID0gZmlsZVBhdGg7CisgICAgcmV0dXJuIFNldEN1
cnJlbnREaXJlY3RvcnlXKHN0cmluZ1RvTnVsbFRlcm1pbmF0ZWRXQ2hhcihkZXN0aW5hdGlvbiku
ZGF0YSgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgRmlsZVN5c3RlbUltcGwKIH0gLy8gbmFtZXNw
YWNlIFdURgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IDFjMmE1NGU5MjZhLi41MjY2MTM5MWNhMCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE5LTAyLTEwICBTdGVw
aGFuIFN6YWJvICA8c3RlcGhhbi5zemFib0Bzb255LmNvbT4KKworICAgICAgICBbV1RGXSBBZGQg
Z2V0dGluZy9jaGFuZ2luZyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHRvIEZpbGVTeXN0ZW0K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDM0NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0ZXN0
IGZvciBXVEY6OkZpbGVTeXN0ZW06OmdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5IGFuZAorICAg
ICAgICBXVEY6OkZpbGVTeXN0ZW06OmNoYW5nZUN1cnJlbnRXb3JraW5nRGlyZWN0b3J5LgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHA6CisKIDIwMTkt
MDItMDMgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAg
ICAgW1dpbl0gV2ViS2l0VGVzdFJ1bm5lcnMgaXMgZmFpbGluZyB0byBjcmVhdGUgdGhlIEluZGV4
ZWREQiBkaXJlY3RvcnkuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9GaWxlU3lzdGVtLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0
ZW0uY3BwCmluZGV4IDgzMDU1MjU1NmRlLi40YzM3ZWM1MTBlYyAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAKQEAgLTYzLDYgKzYzLDkgQEAgcHVibGlj
OgogCiAgICAgICAgIG1fcXVvdGVDb250YWluaW5nRmlsZVBhdGggPSBGaWxlU3lzdGVtOjpvcGVu
VGVtcG9yYXJ5RmlsZSgidGVtcFwiRW1wdHlcIlRlc3RGaWxlIiwgaGFuZGxlKTsKICAgICAgICAg
RmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CisKKyAgICAgICAgbV90ZW1wRGlyZWN0b3J5
UGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChGaWxlU3lzdGVtOjpk
aXJlY3RvcnlOYW1lKG1fdGVtcEVtcHR5RmlsZVBhdGgpLCAidGVtcERpcmVjdG9yeSIpOworICAg
ICAgICBGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMobV90ZW1wRGlyZWN0b3J5UGF0aCk7
CiAgICAgfQogCiAgICAgdm9pZCBUZWFyRG93bigpIG92ZXJyaWRlCkBAIC03Myw2ICs3Niw3IEBA
IHB1YmxpYzoKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShtX3NwYWNlQ29udGFpbmlu
Z0ZpbGVQYXRoKTsKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShtX2JhbmdDb250YWlu
aW5nRmlsZVBhdGgpOwogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKG1fcXVvdGVDb250
YWluaW5nRmlsZVBhdGgpOworICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURpcmVjdG9y
eShtX3RlbXBEaXJlY3RvcnlQYXRoKTsKICAgICB9CiAKICAgICBjb25zdCBTdHJpbmcmIHRlbXBG
aWxlUGF0aCgpIHsgcmV0dXJuIG1fdGVtcEZpbGVQYXRoOyB9CkBAIC04MSw2ICs4NSw3IEBAIHB1
YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIHNwYWNlQ29udGFpbmluZ0ZpbGVQYXRoKCkgeyByZXR1
cm4gbV9zcGFjZUNvbnRhaW5pbmdGaWxlUGF0aDsgfQogICAgIGNvbnN0IFN0cmluZyYgYmFuZ0Nv
bnRhaW5pbmdGaWxlUGF0aCgpIHsgcmV0dXJuIG1fYmFuZ0NvbnRhaW5pbmdGaWxlUGF0aDsgfQog
ICAgIGNvbnN0IFN0cmluZyYgcXVvdGVDb250YWluaW5nRmlsZVBhdGgoKSB7IHJldHVybiBtX3F1
b3RlQ29udGFpbmluZ0ZpbGVQYXRoOyB9CisgICAgY29uc3QgU3RyaW5nJiB0ZW1wRGlyZWN0b3J5
UGF0aCgpIHsgcmV0dXJuIG1fdGVtcERpcmVjdG9yeVBhdGg7IH0KIAogcHJpdmF0ZToKICAgICBT
dHJpbmcgbV90ZW1wRmlsZVBhdGg7CkBAIC04OSw2ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgU3Ry
aW5nIG1fc3BhY2VDb250YWluaW5nRmlsZVBhdGg7CiAgICAgU3RyaW5nIG1fYmFuZ0NvbnRhaW5p
bmdGaWxlUGF0aDsKICAgICBTdHJpbmcgbV9xdW90ZUNvbnRhaW5pbmdGaWxlUGF0aDsKKyAgICBT
dHJpbmcgbV90ZW1wRGlyZWN0b3J5UGF0aDsKIH07CiAKIFRFU1RfRihGaWxlU3lzdGVtVGVzdCwg
TWFwcGluZ01pc3NpbmdGaWxlKQpAQCAtMTQ1LDQgKzE1MSwxNyBAQCBURVNUX0YoRmlsZVN5c3Rl
bVRlc3QsIFVuaWNvZGVEaXJlY3RvcnlOYW1lKQogICAgIEVYUEVDVF9UUlVFKGV4cGVjdGVkRGly
ZWN0b3J5TmFtZSA9PSBkaXJlY3RvcnlOYW1lKTsKIH0KIAorVEVTVF9GKEZpbGVTeXN0ZW1UZXN0
LCBDdXJyZW50V29ya2luZ0RpcmVjdG9yeSkKK3sKKyAgICBhdXRvIG9yaWdpbmFsUGF0aCA9IEZp
bGVTeXN0ZW06OmdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KCk7CisgICAgRVhQRUNUX1RSVUUo
b3JpZ2luYWxQYXRoKTsKKyAgICBhdXRvIGNoYW5nZSA9IEZpbGVTeXN0ZW06OmNoYW5nZUN1cnJl
bnRXb3JraW5nRGlyZWN0b3J5KHRlbXBEaXJlY3RvcnlQYXRoKCkpOworICAgIEVYUEVDVF9UUlVF
KGNoYW5nZSk7CisgICAgYXV0byBuZXdQYXRoID0gRmlsZVN5c3RlbTo6Z2V0Q3VycmVudFdvcmtp
bmdEaXJlY3RvcnkoKTsKKyAgICBhdXRvIGNoYW5nZUJhY2sgPSBGaWxlU3lzdGVtOjpjaGFuZ2VD
dXJyZW50V29ya2luZ0RpcmVjdG9yeShvcmlnaW5hbFBhdGgudmFsdWUoKSk7CisgICAgRVhQRUNU
X1RSVUUobmV3UGF0aCk7CisgICAgRVhQRUNUX1RSVUUobmV3UGF0aC52YWx1ZSgpID09IHRlbXBE
aXJlY3RvcnlQYXRoKCkpOworICAgIEVYUEVDVF9UUlVFKGNoYW5nZUJhY2spOworfQorCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361645</attachid>
            <date>2019-02-10 15:02:07 -0800</date>
            <delta_ts>2019-02-10 15:02:07 -0800</delta_ts>
            <desc>Add get/change current working directory functions, with JSC changes</desc>
            <filename>194344.3b.diff</filename>
            <type>text/plain</type>
            <size>20628</size>
            <attacher name="Stephan Szabo">stephan.szabo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDVlZmQzNDNhY2RiLi5kMTJmOGQ2MjJkZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTktMDItMTAgIFN0ZXBo
YW4gU3phYm8gIDxzdGVwaGFuLnN6YWJvQHNvbnkuY29tPgorCisgICAgICAgIFtXVEZdIEFkZCBn
ZXR0aW5nL2NoYW5naW5nIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgdG8gRmlsZVN5c3RlbQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MzQ0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3dpdGNoIGZy
b20gZm9wZW4vZnNlZWsvZ2V0Y3dkIGV0YyB0byBGaWxlU3lzdGVtIGluIEpTQyBzaGVsbAorICAg
ICAgICB0byBoYW5kbGUgc29tZSBvZiB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgYmVoYXZpb3JzIGlu
IFdURi4KKyAgICAgICAgQWRkIGFyZ3VtZW50IGZvciBzcGVjaWZ5aW5nIHRoZSB3b3JraW5nIGRp
cmVjdG9yeSBmb3Igc3lzdGVtcworICAgICAgICB0aGF0IGRvbid0IHByb3ZpZGUgb25lIChlLmcu
IFBsYXlTdGF0aW9uKQorCisgICAgICAgICoganNjLmNwcDoKKwogMjAxOS0wMi0wNCAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgREZHJ3MgZG9lc0dDKCkgaXMgaW5j
b3JyZWN0IGFib3V0IHRoZSBTYW1lVmFsdWUgbm9kZSdzIGJlaGF2aW9yLgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAppbmRleCBiZTAxODA2MDVlNi4uNDViNjNkNGMxOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
CkBAIC04Myw2ICs4Myw3IEBACiAjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8d3Rm
L0JveC5oPgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvRmls
ZVN5c3RlbS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL01l
bW9yeVByZXNzdXJlSGFuZGxlci5oPgogI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CkBA
IC00MjUsNiArNDI2LDcgQEAgcHVibGljOgogICAgIGJvb2wgbV9kdW1wTWVtb3J5Rm9vdHByaW50
IHsgZmFsc2UgfTsKICAgICBib29sIG1fZHVtcFNhbXBsaW5nUHJvZmlsZXJEYXRhIHsgZmFsc2Ug
fTsKICAgICBib29sIG1fZW5hYmxlUmVtb3RlRGVidWdnaW5nIHsgZmFsc2UgfTsKKyAgICBTdHJp
bmcgbV93b3JraW5nRGlyZWN0b3J5OwogCiAgICAgdm9pZCBwYXJzZUFyZ3VtZW50cyhpbnQsIGNo
YXIqKik7CiB9OwpAQCAtNzI3LDM3ICs3MjksMTggQEAgc3RhdGljIE9wdGlvbmFsPERpcmVjdG9y
eU5hbWU+IGV4dHJhY3REaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgYWJzb2x1dGVQYXRoVG8K
IAogc3RhdGljIE9wdGlvbmFsPERpcmVjdG9yeU5hbWU+IGN1cnJlbnRXb3JraW5nRGlyZWN0b3J5
KCkKIHsKKyAgICBPcHRpb25hbDxTdHJpbmc+IGRpcmVjdG9yeSA9IEZpbGVTeXN0ZW06OmdldEN1
cnJlbnRXb3JraW5nRGlyZWN0b3J5KCk7CiAjaWYgT1MoV0lORE9XUykKLSAgICAvLyBodHRwczov
L21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9hYTM2NDkz
NC5hc3B4Ci0gICAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93
aW5kb3dzL2Rlc2t0b3AvYWEzNjUyNDcuYXNweCNtYXhwYXRoCi0gICAgLy8gVGhlIF9NQVhfUEFU
SCBpbiBXaW5kb3dzIGlzIDI2MC4gSWYgdGhlIHBhdGggb2YgdGhlIGN1cnJlbnQgd29ya2luZyBk
aXJlY3RvcnkgaXMgbG9uZ2VyIHRoYW4gdGhhdCwgX2dldGN3ZCB0cnVuY2F0ZXMgdGhlIHJlc3Vs
dC4KLSAgICAvLyBBbmQgb3RoZXIgSS9PIGZ1bmN0aW9ucyB0YWtpbmcgYSBwYXRoIG5hbWUgYWxz
byB0cnVuY2F0ZSBpdC4gVG8gYXZvaWQgdGhpcyBzaXR1YXRpb24sCi0gICAgLy8KLSAgICAvLyAo
MSkuIFdoZW4gb3BlbmluZyB0aGUgZmlsZSBpbiBXaW5kb3dzIGZvciBtb2R1bGVzLCB3ZSBhbHdh
eXMgdXNlIHRoZSBhYm9zb2x1dGUgcGF0aCBhbmQgYWRkICJcXD9cIiBwcmVmaXggdG8gdGhlIHBh
dGggbmFtZS4KLSAgICAvLyAoMikuIFdoZW4gcmV0cmlldmluZyB0aGUgY3VycmVudCB3b3JraW5n
IGRpcmVjdG9yeSwgdXNlIEdldEN1cnJlbnREaXJlY3RvcnkgaW5zdGVhZCBvZiBfZ2V0Y3dkLgot
ICAgIC8vCi0gICAgLy8gSW4gdGhlIHBhdGggdXRpbGl0eSBmdW5jdGlvbnMgaW5zaWRlIHRoZSBK
U0Mgc2hlbGwsIHdlIGRvZXMgbm90IGhhbmRsZSB0aGUgVU5DIGFuZCBVTkNXIGluY2x1ZGluZyB0
aGUgbmV0d29yayBob3N0IG5hbWUuCi0gICAgRFdPUkQgYnVmZmVyTGVuZ3RoID0gOjpHZXRDdXJy
ZW50RGlyZWN0b3J5VygwLCBudWxscHRyKTsKLSAgICBpZiAoIWJ1ZmZlckxlbmd0aCkKLSAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAvLyBJbiBXaW5kb3dzLCB3Y2hhcl90IGlzIHRo
ZSBVVEYtMTZMRS4KLSAgICAvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJy
YXJ5L2RkMzc0MDgxLmFzcHgKLSAgICAvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11
cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9mZjM4MTQwNy5hc3B4Ci0gICAgVmVjdG9yPHdjaGFy
X3Q+IGJ1ZmZlcihidWZmZXJMZW5ndGgpOwotICAgIERXT1JEIGxlbmd0aE5vdEluY2x1ZGluZ051
bGwgPSA6OkdldEN1cnJlbnREaXJlY3RvcnlXKGJ1ZmZlckxlbmd0aCwgYnVmZmVyLmRhdGEoKSk7
Ci0gICAgU3RyaW5nIGRpcmVjdG9yeVN0cmluZyA9IHdjaGFyVG9TdHJpbmcoYnVmZmVyLmRhdGEo
KSwgbGVuZ3RoTm90SW5jbHVkaW5nTnVsbCk7CiAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBuZXR3
b3JrIHBhdGggbGlrZSBcXGhvc3Rcc2hhcmVcPHBhdGggbmFtZT4uCiAgICAgaWYgKGRpcmVjdG9y
eVN0cmluZy5zdGFydHNXaXRoKCJcXFxcIikpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0jZWxzZQotICAgIFZlY3RvcjxjaGFyPiBidWZmZXIoUEFUSF9NQVgpOwotICAgIGlmICghZ2V0
Y3dkKGJ1ZmZlci5kYXRhKCksIFBBVEhfTUFYKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLSAgICBTdHJpbmcgZGlyZWN0b3J5U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChidWZmZXIu
ZGF0YSgpKTsKICNlbmRpZgotICAgIGlmIChkaXJlY3RvcnlTdHJpbmcuaXNFbXB0eSgpKQorICAg
IGlmICghZGlyZWN0b3J5KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCisgICAgU3Ry
aW5nIGRpcmVjdG9yeVN0cmluZyA9IGRpcmVjdG9yeS52YWx1ZSgpOworICAgIGlmIChkaXJlY3Rv
cnlTdHJpbmcuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGlm
IChkaXJlY3RvcnlTdHJpbmdbZGlyZWN0b3J5U3RyaW5nLmxlbmd0aCgpIC0gMV0gPT0gcGF0aFNl
cGFyYXRvcigpKQogICAgICAgICByZXR1cm4gZXh0cmFjdERpcmVjdG9yeU5hbWUoZGlyZWN0b3J5
U3RyaW5nKTsKICAgICAvLyBBcHBlbmQgdGhlIHNlcGVyYXRvciB0byByZXByZXNlbnRzIHRoZSBm
aWxlIG5hbWUuIGV4dHJhY3REaXJlY3RvcnlOYW1lIG9ubHkgYWNjZXB0cyB0aGUgYWJzb2x1dGUg
ZmlsZSBuYW1lLgpAQCAtODgzLDY1ICs4NjYsNjYgQEAgc3RhdGljIHZvaWQgY29udmVydFNoZWJh
bmdUb0pTQ29tbWVudChWZWN0b3ImIGJ1ZmZlcikKICAgICB9CiB9CiAKLXN0YXRpYyBSZWZQdHI8
VWludDhBcnJheT4gZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShGSUxFKiBmaWxlKQorc3Rh
dGljIFJlZlB0cjxVaW50OEFycmF5PiBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKEZpbGVT
eXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSAmaGFuZGxlKQogewotICAgIGlmIChmc2VlayhmaWxl
LCAwLCBTRUVLX0VORCkgPT0gLTEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGxvbmcg
YnVmZmVyQ2FwYWNpdHkgPSBmdGVsbChmaWxlKTsKKyAgICBhdXRvIGJ1ZmZlckNhcGFjaXR5ID0g
RmlsZVN5c3RlbTo6c2Vla0ZpbGUoaGFuZGxlLCAwLCBGaWxlU3lzdGVtOjpGaWxlU2Vla09yaWdp
bjo6RW5kKTsKICAgICBpZiAoYnVmZmVyQ2FwYWNpdHkgPT0gLTEpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGlmIChmc2VlayhmaWxlLCAwLCBTRUVLX1NFVCkgPT0gLTEpCisgICAgaWYg
KEZpbGVTeXN0ZW06OnNlZWtGaWxlKGhhbmRsZSwgMCwgRmlsZVN5c3RlbTo6RmlsZVNlZWtPcmln
aW46OkJlZ2lubmluZykgPT0gLTEpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGF1dG8g
cmVzdWx0ID0gVWludDhBcnJheTo6dHJ5Q3JlYXRlKGJ1ZmZlckNhcGFjaXR5KTsKICAgICBpZiAo
IXJlc3VsdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgc2l6ZV90IHJlYWRTaXplID0g
ZnJlYWQocmVzdWx0LT5kYXRhKCksIDEsIGJ1ZmZlckNhcGFjaXR5LCBmaWxlKTsKLSAgICBpZiAo
cmVhZFNpemUgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihidWZmZXJDYXBhY2l0eSkpCisKKyAgICBj
aGFyKiBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0LT5kYXRhKCkpOworICAg
IGludCByZWFkU2l6ZSA9IEZpbGVTeXN0ZW06OnJlYWRGcm9tRmlsZShoYW5kbGUsIGRhdGEsIGJ1
ZmZlckNhcGFjaXR5KTsKKyAgICBpZiAocmVhZFNpemUgIT0gc3RhdGljX2Nhc3Q8aW50PihidWZm
ZXJDYXBhY2l0eSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIHN0YXRpYyBSZWZQdHI8VWludDhBcnJheT4gZmlsbEJ1ZmZlcldpdGhDb250ZW50c09m
RmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQogewotICAgIEZJTEUqIGYgPSBmb3BlbihmaWxl
TmFtZS51dGY4KCkuZGF0YSgpLCAicmIiKTsKLSAgICBpZiAoIWYpIHsKKyAgICBGaWxlU3lzdGVt
OjpQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUoZmlsZU5h
bWUsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCk7CisgICAgaWYgKCFGaWxlU3lzdGVt
Ojppc0hhbmRsZVZhbGlkKGhhbmRsZSkpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3Vs
ZCBub3Qgb3BlbiBmaWxlOiAlc1xuIiwgZmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIFJlZlB0cjxVaW50OEFycmF5PiByZXN1bHQg
PSBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGYpOwotICAgIGZjbG9zZShmKTsKKyAgICBS
ZWZQdHI8VWludDhBcnJheT4gcmVzdWx0ID0gZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZSho
YW5kbGUpOworICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwogCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yPgotc3RhdGljIGJvb2wgZmls
bEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShGSUxFKiBmaWxlLCBWZWN0b3ImIGJ1ZmZlcikKK3N0
YXRpYyBib29sIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoRmlsZVN5c3RlbTo6UGxhdGZv
cm1GaWxlSGFuZGxlICZoYW5kbGUsIFZlY3RvciYgYnVmZmVyKQogewogICAgIC8vIFdlIG1pZ2h0
IGhhdmUgaW5qZWN0ZWQgInVzZSBzdHJpY3QiOyBhdCB0aGUgdG9wLgogICAgIHNpemVfdCBpbml0
aWFsU2l6ZSA9IGJ1ZmZlci5zaXplKCk7Ci0gICAgaWYgKGZzZWVrKGZpbGUsIDAsIFNFRUtfRU5E
KSA9PSAtMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGxvbmcgYnVmZmVyQ2FwYWNpdHkg
PSBmdGVsbChmaWxlKTsKKyAgICBhdXRvIGJ1ZmZlckNhcGFjaXR5ID0gRmlsZVN5c3RlbTo6c2Vl
a0ZpbGUoaGFuZGxlLCAwLCBGaWxlU3lzdGVtOjpGaWxlU2Vla09yaWdpbjo6RW5kKTsKICAgICBp
ZiAoYnVmZmVyQ2FwYWNpdHkgPT0gLTEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
ZnNlZWsoZmlsZSwgMCwgU0VFS19TRVQpID09IC0xKQorICAgIGlmIChGaWxlU3lzdGVtOjpzZWVr
RmlsZShoYW5kbGUsIDAsIEZpbGVTeXN0ZW06OkZpbGVTZWVrT3JpZ2luOjpCZWdpbm5pbmcpID09
IC0xKQogICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBidWZmZXIucmVzaXplKGJ1ZmZlckNh
cGFjaXR5ICsgaW5pdGlhbFNpemUpOwotICAgIHNpemVfdCByZWFkU2l6ZSA9IGZyZWFkKGJ1ZmZl
ci5kYXRhKCkgKyBpbml0aWFsU2l6ZSwgMSwgYnVmZmVyLnNpemUoKSwgZmlsZSk7Ci0gICAgcmV0
dXJuIHJlYWRTaXplID09IGJ1ZmZlci5zaXplKCkgLSBpbml0aWFsU2l6ZTsKKworICAgIGNoYXIq
IGRhdGEgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihidWZmZXIuZGF0YSgpICsgaW5pdGlhbFNp
emUpOworICAgIGludCByZWFkU2l6ZSA9IEZpbGVTeXN0ZW06OnJlYWRGcm9tRmlsZShoYW5kbGUs
IGRhdGEsIGJ1ZmZlckNhcGFjaXR5KTsKKyAgICByZXR1cm4gcmVhZFNpemUgPT0gYnVmZmVyQ2Fw
YWNpdHk7CiB9CiAKIHN0YXRpYyBib29sIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSwgVmVjdG9yPGNoYXI+JiBidWZmZXIpCiB7Ci0gICAgRklMRSog
ZiA9IGZvcGVuKGZpbGVOYW1lLnV0ZjgoKS5kYXRhKCksICJyYiIpOwotICAgIGlmICghZikgewor
ICAgIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUgPSBGaWxlU3lzdGVtOjpv
cGVuRmlsZShmaWxlTmFtZSwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKKyAgICBp
ZiAoIUZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQoaGFuZGxlKSkgewogICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkNvdWxkIG5vdCBvcGVuIGZpbGU6ICVzXG4iLCBmaWxlTmFtZS51dGY4KCkuZGF0
YSgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGJvb2wgcmVzdWx0ID0g
ZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShmLCBidWZmZXIpOwotICAgIGZjbG9zZShmKTsK
KyAgICBib29sIHJlc3VsdCA9IGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoaGFuZGxlLCBi
dWZmZXIpOworICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwogCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KQEAgLTk3Nyw3ICs5NjEsNyBAQCBzdGF0aWMgYm9vbCBmZXRjaE1vZHVsZUZy
b21Mb2NhbEZpbGVTeXN0ZW0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgVmVjdG9yJiBidWZmZQog
ICAgIGlmICgoc3RhdHVzLnN0X21vZGUgJiBTX0lGTVQpICE9IFNfSUZSRUcpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIEZJTEUqIGYgPSBfd2ZvcGVuKHBhdGhOYW1lLmRhdGEoKSwgTCJy
YiIpOworICAgIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUgPSBGaWxlU3lz
dGVtOjpvcGVuRmlsZShsb25nVU5DUGF0aE5hbWUsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6
UmVhZCk7CiAjZWxzZQogICAgIGF1dG8gcGF0aE5hbWUgPSBmaWxlTmFtZS51dGY4KCk7CiAgICAg
c3RydWN0IHN0YXQgc3RhdHVzIHsgfTsKQEAgLTk4NiwxNyArOTcwLDE3IEBAIHN0YXRpYyBib29s
IGZldGNoTW9kdWxlRnJvbUxvY2FsRmlsZVN5c3RlbShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBW
ZWN0b3ImIGJ1ZmZlCiAgICAgaWYgKChzdGF0dXMuc3RfbW9kZSAmIFNfSUZNVCkgIT0gU19JRlJF
RykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRklMRSogZiA9IGZvcGVuKHBhdGhOYW1l
LmRhdGEoKSwgInIiKTsKKyAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxl
ID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUoZmlsZU5hbWUsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9k
ZTo6UmVhZCk7CiAjZW5kaWYKLSAgICBpZiAoIWYpIHsKKyAgICBpZiAoIUZpbGVTeXN0ZW06Omlz
SGFuZGxlVmFsaWQoaGFuZGxlKSkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5v
dCBvcGVuIGZpbGU6ICVzXG4iLCBmaWxlTmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGJvb2wgcmVzdWx0ID0gZmlsbEJ1ZmZlcldpdGhDb250
ZW50c09mRmlsZShmLCBidWZmZXIpOworICAgIGJvb2wgcmVzdWx0ID0gZmlsbEJ1ZmZlcldpdGhD
b250ZW50c09mRmlsZShoYW5kbGUsIGJ1ZmZlcik7CiAgICAgaWYgKHJlc3VsdCkKICAgICAgICAg
Y29udmVydFNoZWJhbmdUb0pTQ29tbWVudChidWZmZXIpOwotICAgIGZjbG9zZShmKTsKKyAgICBG
aWxlU3lzdGVtOjpjbG9zZUZpbGUoaGFuZGxlKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBA
IC0yNzYyLDYgKzI3NDYsMTIgQEAgdm9pZCBDb21tYW5kTGluZTo6cGFyc2VBcmd1bWVudHMoaW50
IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAor
ICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgd29ya2luZ0RpcmVjdG9yeVN0ckxlbmd0aCA9
IHN0cmxlbigiLS13b3JraW5nLWRpcmVjdG9yeT0iKTsKKyAgICAgICAgaWYgKCFzdHJuY21wKGFy
ZywgIi0td29ya2luZy1kaXJlY3Rvcnk9Iiwgd29ya2luZ0RpcmVjdG9yeVN0ckxlbmd0aCkpIHsK
KyAgICAgICAgICAgIG1fd29ya2luZ0RpcmVjdG9yeSA9IFN0cmluZyhhcmcgKyB3b3JraW5nRGly
ZWN0b3J5U3RyTGVuZ3RoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKICAg
ICAgICAgLy8gU2VlIGlmIHRoZSAtLSBvcHRpb24gaXMgYSBKU0MgVk0gb3B0aW9uLgogICAgICAg
ICBpZiAoc3Ryc3RyKGFyZywgIi0tIikgPT0gYXJnKSB7CiAgICAgICAgICAgICBpZiAoIUpTQzo6
T3B0aW9uczo6c2V0T3B0aW9uKCZhcmdbMl0pKSB7CkBAIC0yODAxLDYgKzI3OTEsOSBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPgogaW50IHJ1bkpTQyhjb25zdCBDb21tYW5kTGluZSYgb3B0aW9u
cywgYm9vbCBpc1dvcmtlciwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBXb3JrZXIgd29ya2Vy
KFdvcmtlcnM6OnNpbmdsZXRvbigpKTsKKworICAgIGlmICghb3B0aW9ucy5tX3dvcmtpbmdEaXJl
Y3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBGaWxlU3lzdGVtOjpjaGFuZ2VDdXJyZW50V29ya2lu
Z0RpcmVjdG9yeShvcHRpb25zLm1fd29ya2luZ0RpcmVjdG9yeSk7CiAgICAgCiAgICAgVk0mIHZt
ID0gVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKICAgICBpbnQgcmVzdWx0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRl
eCAxM2NhOTIyMWZkOS4uNTZjYTc5Y2Q3YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTktMDIt
MTAgIFN0ZXBoYW4gU3phYm8gIDxzdGVwaGFuLnN6YWJvQHNvbnkuY29tPgorCisgICAgICAgIFtX
VEZdIEFkZCBnZXR0aW5nL2NoYW5naW5nIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgdG8gRmls
ZVN5c3RlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk0MzQ0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiB3dGYvRmlsZVN5c3RlbS5oOgorICAgICAgICBBZGQgbmV3IGdldEN1cnJlbnRXb3JraW5nRGly
ZWN0b3J5IGFuZAorICAgICAgICBjaGFuZ2VDdXJyZW50V29ya2luZ0RpcmVjdG9yeSBtZXRob2Rz
LgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlOgorICAgICAgICBBZGQg
bmV3IEZpbGVTeXN0ZW1QbGF5U3RhdGlvbi5jcHAgdG8gYnVpbGQKKyAgICAgICAgKiB3dGYvZ2xp
Yi9GaWxlU3lzdGVtR2xpYi5jcHA6CisgICAgICAgICogd3RmL3BsYXlzdGF0aW9uL0ZpbGVTeXN0
ZW1QbGF5U3RhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICBBcyBQbGF5U3RhdGlvbiBkb2Vzbid0
IHByb3ZpZGUgdXNlciBwcm9ncmFtcyB0aGUgc2FtZQorICAgICAgICBzb3J0IG9mIGN3ZC9yZWxh
dGl2ZSBwYXRoIHN1cHBvcnQgYXMgb3RoZXIgc3lzdGVtcywKKyAgICAgICAgc2ltdWxhdGUgaXQu
CisgICAgICAgICogd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHA6CisgICAgICAgICogd3Rm
L3dpbi9GaWxlU3lzdGVtV2luLmNwcDoKKwogMjAxOS0wMi0wMyAgQ29tbWl0IFF1ZXVlICA8Y29t
bWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQg
cjI0MDg5Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaCBiL1NvdXJj
ZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAppbmRleCA5MDM5NjJhZDQ2ZC4uMDM5YmRlNDljNzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9GaWxlU3lzdGVtLmgKQEAgLTE4Nyw2ICsxODcsOSBAQCBXVEZfRVhQT1JUX1BSSVZBVEUgYm9v
bCBkZWxldGVOb25FbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmKTsKIAogV1RGX0VYUE9SVF9Q
UklWQVRFIFN0cmluZyByZWFsUGF0aChjb25zdCBTdHJpbmcmKTsKIAorV1RGX0VYUE9SVF9QUklW
QVRFIE9wdGlvbmFsPFN0cmluZz4gZ2V0Q3VycmVudFdvcmtpbmdEaXJlY3RvcnkoKTsKK1dURl9F
WFBPUlRfUFJJVkFURSBib29sIGNoYW5nZUN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KGNvbnN0IFN0
cmluZyYpOworCiBjbGFzcyBNYXBwZWRGaWxlRGF0YSB7CiBwdWJsaWM6CiAgICAgTWFwcGVkRmls
ZURhdGEoKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtUGxheVN0YXRp
b24uY21ha2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCmluZGV4
IDRiNjkxOTA3NmYzLi45Mzc4MTJhMmUzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxh
dGZvcm1QbGF5U3RhdGlvbi5jbWFrZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVBsYXlT
dGF0aW9uLmNtYWtlCkBAIC01LDYgKzUsOCBAQCBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwogICAg
IGdlbmVyaWMvUnVuTG9vcEdlbmVyaWMuY3BwCiAgICAgZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmlj
LmNwcAogCisgICAgcGxheXN0YXRpb24vRmlsZVN5c3RlbVBsYXlTdGF0aW9uLmNwcAorCiAgICAg
cG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAogICAgIHBvc2l4L09TQWxsb2NhdG9yUE9TSVguY3Bw
CiAgICAgcG9zaXgvVGhyZWFkaW5nUE9TSVguY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3Rl
bUdsaWIuY3BwCmluZGV4IGMzZWM5OWEzZDFiLi5iMmM1NzdiYjkyYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
Z2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKQEAgLTQ2NSw1ICs0NjUsMjAgQEAgYm9vbCB1bmxvY2tG
aWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUpCiB9CiAjZW5kaWYgLy8gVVNFKEZJTEVfTE9D
SykKIAorT3B0aW9uYWw8U3RyaW5nPiBnZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpCit7Cisg
ICAgR1VuaXF1ZVB0cjxjaGFyPiBjdXJyZW50RGlyKGdfZ2V0X2N1cnJlbnRfZGlyKCkpOworICAg
IHJldHVybiBzdHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGN1cnJlbnREaXIuZ2V0
KCkpOworfQorCitib29sIGNoYW5nZUN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgZmlsZVBhdGgpCit7CisjaWYgT1MoV0lORE9XUykKKyAgICByZXR1cm4gU2V0Q3VycmVudFdv
cmtpbmdEaXJlY3RvcnkoZmlsZVBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5k
YXRhKCkpOworI2Vsc2UKKyAgICByZXR1cm4gIWNoZGlyKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihmaWxlUGF0aCkuZGF0YSgpKTsKKyNlbmRpZgorfQorCiB9IC8vIG5hbWVzcGFjZSBGaWxlU3lz
dGVtSW1wbAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9w
bGF5c3RhdGlvbi9GaWxlU3lzdGVtUGxheVN0YXRpb24uY3BwIGIvU291cmNlL1dURi93dGYvcGxh
eXN0YXRpb24vRmlsZVN5c3RlbVBsYXlTdGF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uNjc4YWNmMTE2NTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9wbGF5c3RhdGlvbi9GaWxlU3lzdGVtUGxheVN0YXRpb24uY3BwCkBAIC0wLDAgKzEs
NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRh
aW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3Bh
Y2UgRmlsZVN5c3RlbUltcGwgeworCitjaGFyIGN1cnJlbnRXb3JraW5nRGlyZWN0b3J5W1BBVEhf
TUFYXSA9IHswfTsKKworT3B0aW9uYWw8U3RyaW5nPiBnZXRDdXJyZW50V29ya2luZ0RpcmVjdG9y
eSgpCit7CisgICAgaWYgKCFjdXJyZW50V29ya2luZ0RpcmVjdG9yeVswXSkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gc3RyaW5nRnJvbUZpbGVTeXN0ZW1SZXByZXNl
bnRhdGlvbihjdXJyZW50V29ya2luZ0RpcmVjdG9yeSk7Cit9CisKK2Jvb2wgY2hhbmdlQ3VycmVu
dFdvcmtpbmdEaXJlY3RvcnkoY29uc3QgU3RyaW5nICZmaWxlUGF0aCkKK3sKKyAgICBDU3RyaW5n
IHBhdGggPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZmlsZVBhdGgpOworICAgIGlmIChwYXRo
Lmxlbmd0aCgpID4gc2l6ZW9mKGN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KSAtIDEpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBzdHJuY3B5KGN1cnJlbnRXb3JraW5nRGlyZWN0b3J5LCBwYXRo
LmRhdGEoKSwgc2l6ZW9mKGN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KSk7CisgICAgY3VycmVudFdv
cmtpbmdEaXJlY3Rvcnlbc2l6ZW9mKGN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KS0xXSA9IDA7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK0NTdHJpbmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNv
bnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBpZiAocGF0aFswXSAhPSAnLycpIHsKKyAgICAgICAg
YXV0byBjd2QgPSBnZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpOworICAgICAgICBpZiAoY3dk
ICYmIGN3ZC52YWx1ZSgpLmxlbmd0aCgpKSB7CisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChjd2QudmFsdWUoKSk7CisgICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZCgnLycpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQocGF0
aCk7CisgICAgICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gcGF0aC51dGY4KCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEZpbGVTeXN0ZW1JbXBsCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9G
aWxlU3lzdGVtUE9TSVguY3BwCmluZGV4IDcwZDJmOThlNGQ3Li5lMjM5ZTUwYjNhNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCkBAIC0zOTEsMTEgKzM5MSwxMyBA
QCBTdHJpbmcgc3RyaW5nRnJvbUZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihjb25zdCBjaGFyKiBw
YXRoKQogICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHBhdGgpOwogfQogCisjaWYgIVBMQVRG
T1JNKFBMQVlTVEFUSU9OKQogQ1N0cmluZyBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3Qg
U3RyaW5nJiBwYXRoKQogewogICAgIHJldHVybiBwYXRoLnV0ZjgoKTsKIH0KICNlbmRpZgorI2Vu
ZGlmCiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCiBib29sIG1vdmVGaWxlKGNvbnN0IFN0cmluZyYg
b2xkUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdQYXRoKQpAQCAtNDkyLDUgKzQ5NCwyMCBAQCBTdHJp
bmcgcmVhbFBhdGgoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKICAgICByZXR1cm4gcmVzdWx0ID8g
U3RyaW5nOjpmcm9tVVRGOChyZXN1bHQpIDogZmlsZVBhdGg7CiB9CiAKKyNpZiAhUExBVEZPUk0o
UExBWVNUQVRJT04pCitPcHRpb25hbDxTdHJpbmc+IGdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5
KCkKK3sKKyAgICBjaGFyIHdvcmtpbmdEaXJlY3RvcnlbUEFUSF9NQVhdOworICAgIGlmICghZ2V0
Y3dkKHdvcmtpbmdEaXJlY3RvcnksIHNpemVvZih3b3JraW5nRGlyZWN0b3J5KSkpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHN0cmluZ0Zyb21GaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24od29ya2luZ0RpcmVjdG9yeSk7Cit9CisKK2Jvb2wgY2hhbmdlQ3VycmVudFdv
cmtpbmdEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKK3sKKyAgICByZXR1cm4gIWNo
ZGlyKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihmaWxlUGF0aCkuZGF0YSgpKTsKK30KKyNlbmRp
ZgorCiB9IC8vIG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbAogfSAvLyBuYW1lc3BhY2UgV1RGCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAKaW5kZXggZDY3MmFmNjM3NDYuLmJlODcyODc3
YTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAKKysr
IGIvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCkBAIC01ODIsNSArNTgyLDI2
IEBAIGJvb2wgZGVsZXRlTm9uRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnlQ
YXRoKQogICAgIHJldHVybiAhU0hGaWxlT3BlcmF0aW9uKCZkZWxldGVPcGVyYXRpb24pOwogfQog
CitPcHRpb25hbDxTdHJpbmc+IGdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KCkKK3sKKyAgICBE
V09SRCBidWZmZXJMZW5ndGggPSA6OkdldEN1cnJlbnREaXJlY3RvcnlXKDAsIG51bGxwdHIpOwor
ICAgIGlmICghYnVmZmVyTGVuZ3RoKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
IC8vIEluIFdpbmRvd3MsIHdjaGFyX3QgaXMgdGhlIFVURi0xNkxFLgorICAgIC8vIGh0dHBzOi8v
bXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvZGQzNzQwODEuYXNweAorICAgIC8vIGh0
dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2Zm
MzgxNDA3LmFzcHgKKyAgICBWZWN0b3I8d2NoYXJfdD4gYnVmZmVyKGJ1ZmZlckxlbmd0aCk7Cisg
ICAgRFdPUkQgbGVuZ3RoTm90SW5jbHVkaW5nTnVsbCA9IDo6R2V0Q3VycmVudERpcmVjdG9yeVco
YnVmZmVyTGVuZ3RoLCBidWZmZXIuZGF0YSgpKTsKKyAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGlu
Z051bGwpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHdjaGFyVG9T
dHJpbmcoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoTm90SW5jbHVkaW5nTnVsbCk7Cit9CisKK2Jvb2wg
Y2hhbmdlQ3VycmVudFdvcmtpbmdEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKK3sK
KyAgICBTdHJpbmcgZGVzdGluYXRpb24gPSBmaWxlUGF0aDsKKyAgICByZXR1cm4gU2V0Q3VycmVu
dERpcmVjdG9yeVcoc3RyaW5nVG9OdWxsVGVybWluYXRlZFdDaGFyKGRlc3RpbmF0aW9uKS5kYXRh
KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbAogfSAvLyBuYW1lc3BhY2Ug
V1RGCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXgg
MWMyYTU0ZTkyNmEuLjUyNjYxMzkxY2EwIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysr
IGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTktMDItMTAgIFN0ZXBoYW4g
U3phYm8gIDxzdGVwaGFuLnN6YWJvQHNvbnkuY29tPgorCisgICAgICAgIFtXVEZdIEFkZCBnZXR0
aW5nL2NoYW5naW5nIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgdG8gRmlsZVN5c3RlbQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MzQ0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRlc3QgZm9y
IFdURjo6RmlsZVN5c3RlbTo6Z2V0Q3VycmVudFdvcmtpbmdEaXJlY3RvcnkgYW5kCisgICAgICAg
IFdURjo6RmlsZVN5c3RlbTo6Y2hhbmdlQ3VycmVudFdvcmtpbmdEaXJlY3RvcnkuCisKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcDoKKwogMjAxOS0wMi0w
MyAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAogICAgICAgICBb
V2luXSBXZWJLaXRUZXN0UnVubmVycyBpcyBmYWlsaW5nIHRvIGNyZWF0ZSB0aGUgSW5kZXhlZERC
IGRpcmVjdG9yeS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Zp
bGVTeXN0ZW0uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5j
cHAKaW5kZXggODMwNTUyNTU2ZGUuLjRjMzdlYzUxMGVjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcApAQCAtNjMsNiArNjMsOSBAQCBwdWJsaWM6CiAK
ICAgICAgICAgbV9xdW90ZUNvbnRhaW5pbmdGaWxlUGF0aCA9IEZpbGVTeXN0ZW06Om9wZW5UZW1w
b3JhcnlGaWxlKCJ0ZW1wXCJFbXB0eVwiVGVzdEZpbGUiLCBoYW5kbGUpOwogICAgICAgICBGaWxl
U3lzdGVtOjpjbG9zZUZpbGUoaGFuZGxlKTsKKworICAgICAgICBtX3RlbXBEaXJlY3RvcnlQYXRo
ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KEZpbGVTeXN0ZW06OmRpcmVj
dG9yeU5hbWUobV90ZW1wRW1wdHlGaWxlUGF0aCksICJ0ZW1wRGlyZWN0b3J5Iik7CisgICAgICAg
IEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhtX3RlbXBEaXJlY3RvcnlQYXRoKTsKICAg
ICB9CiAKICAgICB2b2lkIFRlYXJEb3duKCkgb3ZlcnJpZGUKQEAgLTczLDYgKzc2LDcgQEAgcHVi
bGljOgogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKG1fc3BhY2VDb250YWluaW5nRmls
ZVBhdGgpOwogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKG1fYmFuZ0NvbnRhaW5pbmdG
aWxlUGF0aCk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9xdW90ZUNvbnRhaW5p
bmdGaWxlUGF0aCk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KG1f
dGVtcERpcmVjdG9yeVBhdGgpOwogICAgIH0KIAogICAgIGNvbnN0IFN0cmluZyYgdGVtcEZpbGVQ
YXRoKCkgeyByZXR1cm4gbV90ZW1wRmlsZVBhdGg7IH0KQEAgLTgxLDYgKzg1LDcgQEAgcHVibGlj
OgogICAgIGNvbnN0IFN0cmluZyYgc3BhY2VDb250YWluaW5nRmlsZVBhdGgoKSB7IHJldHVybiBt
X3NwYWNlQ29udGFpbmluZ0ZpbGVQYXRoOyB9CiAgICAgY29uc3QgU3RyaW5nJiBiYW5nQ29udGFp
bmluZ0ZpbGVQYXRoKCkgeyByZXR1cm4gbV9iYW5nQ29udGFpbmluZ0ZpbGVQYXRoOyB9CiAgICAg
Y29uc3QgU3RyaW5nJiBxdW90ZUNvbnRhaW5pbmdGaWxlUGF0aCgpIHsgcmV0dXJuIG1fcXVvdGVD
b250YWluaW5nRmlsZVBhdGg7IH0KKyAgICBjb25zdCBTdHJpbmcmIHRlbXBEaXJlY3RvcnlQYXRo
KCkgeyByZXR1cm4gbV90ZW1wRGlyZWN0b3J5UGF0aDsgfQogCiBwcml2YXRlOgogICAgIFN0cmlu
ZyBtX3RlbXBGaWxlUGF0aDsKQEAgLTg5LDYgKzk0LDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcg
bV9zcGFjZUNvbnRhaW5pbmdGaWxlUGF0aDsKICAgICBTdHJpbmcgbV9iYW5nQ29udGFpbmluZ0Zp
bGVQYXRoOwogICAgIFN0cmluZyBtX3F1b3RlQ29udGFpbmluZ0ZpbGVQYXRoOworICAgIFN0cmlu
ZyBtX3RlbXBEaXJlY3RvcnlQYXRoOwogfTsKIAogVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBNYXBw
aW5nTWlzc2luZ0ZpbGUpCkBAIC0xNDUsNCArMTUxLDE3IEBAIFRFU1RfRihGaWxlU3lzdGVtVGVz
dCwgVW5pY29kZURpcmVjdG9yeU5hbWUpCiAgICAgRVhQRUNUX1RSVUUoZXhwZWN0ZWREaXJlY3Rv
cnlOYW1lID09IGRpcmVjdG9yeU5hbWUpOwogfQogCitURVNUX0YoRmlsZVN5c3RlbVRlc3QsIEN1
cnJlbnRXb3JraW5nRGlyZWN0b3J5KQoreworICAgIGF1dG8gb3JpZ2luYWxQYXRoID0gRmlsZVN5
c3RlbTo6Z2V0Q3VycmVudFdvcmtpbmdEaXJlY3RvcnkoKTsKKyAgICBFWFBFQ1RfVFJVRShvcmln
aW5hbFBhdGgpOworICAgIGF1dG8gY2hhbmdlID0gRmlsZVN5c3RlbTo6Y2hhbmdlQ3VycmVudFdv
cmtpbmdEaXJlY3RvcnkodGVtcERpcmVjdG9yeVBhdGgoKSk7CisgICAgRVhQRUNUX1RSVUUoY2hh
bmdlKTsKKyAgICBhdXRvIG5ld1BhdGggPSBGaWxlU3lzdGVtOjpnZXRDdXJyZW50V29ya2luZ0Rp
cmVjdG9yeSgpOworICAgIGF1dG8gY2hhbmdlQmFjayA9IEZpbGVTeXN0ZW06OmNoYW5nZUN1cnJl
bnRXb3JraW5nRGlyZWN0b3J5KG9yaWdpbmFsUGF0aC52YWx1ZSgpKTsKKyAgICBFWFBFQ1RfVFJV
RShuZXdQYXRoKTsKKyAgICBFWFBFQ1RfVFJVRShuZXdQYXRoLnZhbHVlKCkgPT0gdGVtcERpcmVj
dG9yeVBhdGgoKSk7CisgICAgRVhQRUNUX1RSVUUoY2hhbmdlQmFjayk7Cit9CisKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>