Page MenuHomePhabricator

sdmitriev (Sergey Dmitriev)
User

Projects

User does not belong to any projects.

User Details

User Since
Dec 7 2016, 2:42 PM (149 w, 2 d)

Recent Activity

Thu, Oct 17

sdmitriev committed rG6caada4eb465: [clang-offload-wrapper][NFC] Use captured name of the entry type in LIT test (authored by sdmitriev).
[clang-offload-wrapper][NFC] Use captured name of the entry type in LIT test
Thu, Oct 17, 2:57 PM
sdmitriev closed D69140: [clang-offload-wrapper][NFC] Use captured name of the entry type in LIT test.
Thu, Oct 17, 2:57 PM · Restricted Project
sdmitriev committed rL375177: [clang-offload-wrapper][NFC] Use captured name of the entry type in LIT test.
[clang-offload-wrapper][NFC] Use captured name of the entry type in LIT test
Thu, Oct 17, 2:57 PM
sdmitriev created D69140: [clang-offload-wrapper][NFC] Use captured name of the entry type in LIT test.
Thu, Oct 17, 2:37 PM · Restricted Project
sdmitriev added inline comments to D68438: [gicombiner] Add the run-time rule disable option.
Thu, Oct 17, 10:14 AM · Restricted Project

Wed, Oct 16

sdmitriev abandoned D64943: [Clang][OpenMP offload] Eliminate use of OpenMP linker script.

All three parts have been committed, so I am abandoning the original patch.

Wed, Oct 16, 1:59 PM

Tue, Oct 15

sdmitriev committed rG5836c356fa6e: [Clang][OpenMP Offload] Move offload registration code to the wrapper (authored by sdmitriev).
[Clang][OpenMP Offload] Move offload registration code to the wrapper
Tue, Oct 15, 11:46 AM
sdmitriev committed rL374937: [Clang][OpenMP Offload] Move offload registration code to the wrapper.
[Clang][OpenMP Offload] Move offload registration code to the wrapper
Tue, Oct 15, 11:45 AM
sdmitriev closed D68746: [Clang][OpenMP Offload] Move offload registration code to the wrapper.
Tue, Oct 15, 11:45 AM · Restricted Project

Sun, Oct 13

sdmitriev accepted D68931: [clang] [clang-offload-bundler] Fix finding installed llvm-objcopy.

Looks good.

Sun, Oct 13, 8:32 PM · Restricted Project

Fri, Oct 11

sdmitriev added inline comments to D67031: [Clang][Bundler] Error reporting improvements.
Fri, Oct 11, 8:22 PM · Restricted Project
sdmitriev updated the diff for D67031: [Clang][Bundler] Error reporting improvements.

Rebased patch.

Fri, Oct 11, 8:13 PM · Restricted Project
sdmitriev updated the diff for D68746: [Clang][OpenMP Offload] Move offload registration code to the wrapper.

Rebased patch and addressed review comments.

Fri, Oct 11, 9:56 AM · Restricted Project
sdmitriev added inline comments to D68746: [Clang][OpenMP Offload] Move offload registration code to the wrapper.
Fri, Oct 11, 8:51 AM · Restricted Project

Thu, Oct 10

sdmitriev updated subscribers of D68746: [Clang][OpenMP Offload] Move offload registration code to the wrapper.
Thu, Oct 10, 3:21 PM · Restricted Project
sdmitriev added inline comments to D68746: [Clang][OpenMP Offload] Move offload registration code to the wrapper.
Thu, Oct 10, 3:03 PM · Restricted Project
sdmitriev added inline comments to D68746: [Clang][OpenMP Offload] Move offload registration code to the wrapper.
Thu, Oct 10, 2:34 PM · Restricted Project

Wed, Oct 9

sdmitriev added a comment to D68166: [Clang][OpenMP Offload] Add new tool for wrapping offload device binaries.

Out of interest (or ignorance :) ), why is this a separate binary instead of just part of the normal clang driver? C, C++, Objective-C, and assembly all can do with a single driver, yet the offload stuff now has both clang-offload-wrapper and clang-offload-bundler. Why isn't just clang enough?

Wed, Oct 9, 5:45 PM · Restricted Project
sdmitriev added inline comments to rL374219: [Clang][OpenMP Offload] Add new tool for wrapping offload device binaries.
Wed, Oct 9, 5:17 PM
sdmitriev added a comment to D64943: [Clang][OpenMP offload] Eliminate use of OpenMP linker script.

I have uploaded the last part to https://reviews.llvm.org/D68746

Wed, Oct 9, 5:09 PM
sdmitriev created D68746: [Clang][OpenMP Offload] Move offload registration code to the wrapper.
Wed, Oct 9, 5:08 PM · Restricted Project
sdmitriev committed rGa0d83768f108: [Clang][OpenMP Offload] Add new tool for wrapping offload device binaries (authored by sdmitriev).
[Clang][OpenMP Offload] Add new tool for wrapping offload device binaries
Wed, Oct 9, 1:42 PM
sdmitriev closed D68166: [Clang][OpenMP Offload] Add new tool for wrapping offload device binaries.
Wed, Oct 9, 1:42 PM · Restricted Project
sdmitriev committed rL374219: [Clang][OpenMP Offload] Add new tool for wrapping offload device binaries.
[Clang][OpenMP Offload] Add new tool for wrapping offload device binaries
Wed, Oct 9, 1:42 PM

Fri, Oct 4

sdmitriev updated the diff for D68166: [Clang][OpenMP Offload] Add new tool for wrapping offload device binaries.

Rebased patch and changed clang-offload-wrapper CMakeLists.txt to use add_clang_tool() rather than add_clang_executable() with a custom install rule.

Fri, Oct 4, 4:37 PM · Restricted Project

Wed, Oct 2

sdmitriev added a comment to D68166: [Clang][OpenMP Offload] Add new tool for wrapping offload device binaries.

I think this patch is a behaviour change. Currently, the target binary is embedded in the host binary at link time. With this change, the contents of the binary are embedded in bitcode which is subsequently fed into the link. If indeed so, that seems strictly better - code in the host that cares about the size of the bitcode now has it available at opt time, instead of at link time. The target specific nastiness objcopy would introduce is neatly sidestepped.

This change takes N binaries (that I think need to be for different triples, or the loop doesn't work) and puts them in separate section-annotated bitcode arrays. Equivalent behaviour would result from calling the tool once per binary and passing the N results onward, e.g. to llvm-link.

The functionality of 'take a binary and embed it in bitcode as a const array' is likely to be useful outside of openmp. I've done similar things in the past in non-portable fashion. Aside from the section and symbol names, I don't think there's anything specific to openmp in the tool.

How would you feel about simplifying the tool to work on one file at a time, with an interface that takes the host target (could default to whatever is running the tool) and a string for section name, which generates some bitcode containing that file as a const array plus start/end symbols derived from the section name? The change would involve deleting the multiple file handling and renaming OffloadTargets to SectionName or similar.

clang-offload-wrapper than becomes binary-to-bitcode-embedder (or better, names are hard), with the intent that projects outside of the openmp target offload compiler could use it.

edit: Or keep the multiple file handling if you prefer, preferably raising an error if there are duplicates in the requested section names

Wed, Oct 2, 6:54 PM · Restricted Project
sdmitriev updated the diff for D68166: [Clang][OpenMP Offload] Add new tool for wrapping offload device binaries.

Addressed some comments and rebased patch.

Wed, Oct 2, 2:54 PM · Restricted Project
sdmitriev added inline comments to D67031: [Clang][Bundler] Error reporting improvements.
Wed, Oct 2, 2:24 PM · Restricted Project
sdmitriev committed rG5ac9d18e7d9d: [Clang][Driver][NFC] Corrected DeviceActionBuilder methods' comments. (authored by sdmitriev).
[Clang][Driver][NFC] Corrected DeviceActionBuilder methods' comments.
Wed, Oct 2, 1:46 PM
sdmitriev committed rL373523: [Clang][Driver][NFC] Corrected DeviceActionBuilder methods' comments..
[Clang][Driver][NFC] Corrected DeviceActionBuilder methods' comments.
Wed, Oct 2, 1:45 PM
sdmitriev closed D68355: [Clang][Driver][NFC] Corrected DeviceActionBuilder methods' comments..
Wed, Oct 2, 1:45 PM · Restricted Project, Restricted Project
sdmitriev added a comment to D68355: [Clang][Driver][NFC] Corrected DeviceActionBuilder methods' comments..

Mark the patch as NFC.

Wed, Oct 2, 1:27 PM · Restricted Project, Restricted Project
sdmitriev created D68355: [Clang][Driver][NFC] Corrected DeviceActionBuilder methods' comments..
Wed, Oct 2, 1:18 PM · Restricted Project, Restricted Project
sdmitriev added inline comments to D68166: [Clang][OpenMP Offload] Add new tool for wrapping offload device binaries.
Wed, Oct 2, 1:03 PM · Restricted Project
sdmitriev added a comment to D68166: [Clang][OpenMP Offload] Add new tool for wrapping offload device binaries.

Ping.

Wed, Oct 2, 11:29 AM · Restricted Project
sdmitriev added a comment to D67031: [Clang][Bundler] Error reporting improvements.

Ping.

Wed, Oct 2, 11:29 AM · Restricted Project

Fri, Sep 27

sdmitriev added a comment to D64943: [Clang][OpenMP offload] Eliminate use of OpenMP linker script.

The second part was uploaded to https://reviews.llvm.org/D68166.

Fri, Sep 27, 3:31 PM
sdmitriev created D68166: [Clang][OpenMP Offload] Add new tool for wrapping offload device binaries.
Fri, Sep 27, 3:31 PM · Restricted Project
sdmitriev committed rG4b343fd84c0b: [Clang][OpenMP Offload] Create start/end symbols for the offloading entry table… (authored by sdmitriev).
[Clang][OpenMP Offload] Create start/end symbols for the offloading entry table…
Fri, Sep 27, 1:01 PM
sdmitriev committed rL373118: [Clang][OpenMP Offload] Create start/end symbols for the offloading entry table….
[Clang][OpenMP Offload] Create start/end symbols for the offloading entry table…
Fri, Sep 27, 1:00 PM
sdmitriev closed D68070: [Clang][OpenMP Offload] Create start/end symbols for the offloading entry table with a help of a linker.
Fri, Sep 27, 12:59 PM · Restricted Project

Thu, Sep 26

sdmitriev abandoned D56811: [Mem2Reg] Enable promotion for bitcastable load/store values.
Thu, Sep 26, 9:56 AM · Restricted Project
sdmitriev abandoned D56810: [Mem2Reg] Enable promotion for bitcastable load/store values.
Thu, Sep 26, 9:56 AM · Restricted Project
sdmitriev added a comment to D64943: [Clang][OpenMP offload] Eliminate use of OpenMP linker script.

I have uploaded the first part to https://reviews.llvm.org/D68070

Thu, Sep 26, 9:51 AM

Wed, Sep 25

sdmitriev created D68070: [Clang][OpenMP Offload] Create start/end symbols for the offloading entry table with a help of a linker.
Wed, Sep 25, 8:34 PM · Restricted Project
sdmitriev abandoned D65130: [clang][OpenMP] Add clang-offload-wrapper tool.

This patch is no longer relevant since it was agreed to split https://reviews.llvm.org/D64943 into pieces in a different way.

Wed, Sep 25, 4:07 PM · Restricted Project
sdmitriev updated the diff for D64943: [Clang][OpenMP offload] Eliminate use of OpenMP linker script.

I have rebased patch and addressed last Alexey’s comments. If there are no more comments, I propose to split this patch into 3 pieces

Wed, Sep 25, 3:32 PM
sdmitriev added a comment to D67031: [Clang][Bundler] Error reporting improvements.

Ping.

Wed, Sep 25, 10:55 AM · Restricted Project

Sep 18 2019

sdmitriev added a comment to D67031: [Clang][Bundler] Error reporting improvements.

Ping.

Sep 18 2019, 11:02 AM · Restricted Project

Sep 12 2019

sdmitriev updated the diff for D64943: [Clang][OpenMP offload] Eliminate use of OpenMP linker script.
  • Changed offload entry section name to “omp_offloading_entries”
  • Wrapper bit-code now uses start_ omp_offloading_entries/stop_ omp_offloading_entries symbols for accessing offload entry table assuming that these symbols are defined by the linker
  • Removed omptargetbegin.o/omptargetend.o objects
Sep 12 2019, 9:22 PM
sdmitriev added a comment to D64943: [Clang][OpenMP offload] Eliminate use of OpenMP linker script.

Does this diff mix getting rid of the linker script with other changes? E.g. it looks like the metadata generation is moving from clang to the new tool, but that seems orthogonal to dropping the linker script.

Metadata is still generated by the clang, there are no changes in this area. What is moving to a wrapper tool is the generation of the offload registration code. Let me just attach the slides that I presented on the inter company meeting were the proposal was discussed. It'll probably answer most of your questions.

It does indeed, thanks. I see the motivation for delaying offload registration code. I'm pretty sure that is indeed orthogonal to removing the linker script.

How would you feel about using objcopy to embed the device binary?

Sep 12 2019, 11:00 AM
sdmitriev added a comment to D64943: [Clang][OpenMP offload] Eliminate use of OpenMP linker script.

I'm on board with getting rid of the linker script. Gold's limited support for that seems conclusive.

I believe the current script does two things:
1/ takes a binary and embeds it in a section named .omp_offloading.amdgcn-amd-amdhsa
2/ provides start/end symbols for that section and for .omp_offloading.entries.

2/ is discussed above.
1/ can be implemented as a call to (llvm-)objcopy

If binary is used as the value for --input-target, the input file will be embedded as a data section in an ELF relocatable object, with symbols _binary_<file_name>_start, _binary_<file_name>_end, and _binary_<file_name>_size representing the start, end and size of the data, where <file_name> is the path of the input file as specified on the command line with non-alphanumeric characters converted to _.

I think dropping the linker script means that cmake will need to invoke an extra executable. As far as I can see, that tool can be objcopy instead of clang-offload-wrapper.

Does this diff mix getting rid of the linker script with other changes? E.g. it looks like the metadata generation is moving from clang to the new tool, but that seems orthogonal to dropping the linker script.

Sep 12 2019, 9:14 AM

Sep 11 2019

sdmitriev added a comment to D64943: [Clang][OpenMP offload] Eliminate use of OpenMP linker script.

I'm not sure copying the crtbegin/crtend mechanism from the early days of C runtime is ideal. Since the data is stored in a common section anyway, please could we rename it to __omp_offloading_entries in which case the linker will provide start/end symbols automatically?

Well, I never said that it is an ideal solution, but it is a known mechanism that works well in many cases and can also be reused for the offloading entry table.
I do not fully understand your suggestion for renaming entries section, how it will help with providing start/end symbols for the entries. Can you please provide more details?

Given a custom elf section with a C identifier as a name, the linker will provide definitions of __start_name/__stop_name to satisfy unresolved symbols. I don't believe this occurs if the section name is not a C identifier, e.g. contains a period. So unless I've misinterpreted the purpose of the two object files, they can be removed in exchange for renaming the section.

Sep 11 2019, 6:42 PM
sdmitriev added a comment to D64943: [Clang][OpenMP offload] Eliminate use of OpenMP linker script.

I'm not sure copying the crtbegin/crtend mechanism from the early days of C runtime is ideal. Since the data is stored in a common section anyway, please could we rename it to __omp_offloading_entries in which case the linker will provide start/end symbols automatically?

Sep 11 2019, 1:27 PM
sdmitriev added a comment to D64943: [Clang][OpenMP offload] Eliminate use of OpenMP linker script.

OpenMP linker script is known to cause problems for gold and lld linkers on Linux and it will also cause problems for Windows enabling in future

What are the known problems with the linker script? I'm wondering if they can be resolved without the overhead of introducing a new tool.

They just do not support linker script. And, thus, cannot be used for offloading. Only ld supports it.

In what respect? I've used linker scripts with both gold and lld, and both instances of --help text claim to support them. In the case of lld, a very complicated script hit a few internal errors, but I believe they've all been fixed since.

Hmm, I tried it with gold some time ago and it just did not work for me. The linking failed with diagnostics that some of the commands in the script are unknown.

The problem turns out to be the 'insert before' statement. ld and lld support it, gold does not. According to https://bugzilla.redhat.com/show_bug.cgi?id=927573, the recommended workaround is essentially that implemented in this differential. See also https://sourceware.org/bugzilla/show_bug.cgi?id=15373.

Sep 11 2019, 1:05 PM
sdmitriev updated the diff for D65130: [clang][OpenMP] Add clang-offload-wrapper tool.

Rebase

Sep 11 2019, 11:44 AM · Restricted Project
sdmitriev updated the diff for D64943: [Clang][OpenMP offload] Eliminate use of OpenMP linker script.

Rebase

Sep 11 2019, 11:24 AM
sdmitriev updated the diff for D67031: [Clang][Bundler] Error reporting improvements.

Rebase

Sep 11 2019, 10:30 AM · Restricted Project
sdmitriev committed rGe39b5710c925: [Clang][Bundler] Replace std::vector by SmallVector [NFC] (authored by sdmitriev).
[Clang][Bundler] Replace std::vector by SmallVector [NFC]
Sep 11 2019, 9:33 AM
sdmitriev committed rL371637: [Clang][Bundler] Replace std::vector by SmallVector [NFC].
[Clang][Bundler] Replace std::vector by SmallVector [NFC]
Sep 11 2019, 9:28 AM
sdmitriev closed D67413: [Clang][Bundler] Replace std::vector by SmallVector [NFC].
Sep 11 2019, 9:28 AM · Restricted Project
sdmitriev committed rG0c1257f517e0: [Clang][Bundler] Fix for a potential memory leak [NFC] (authored by sdmitriev).
[Clang][Bundler] Fix for a potential memory leak [NFC]
Sep 11 2019, 9:04 AM
sdmitriev committed rL371633: [Clang][Bundler] Fix for a potential memory leak [NFC].
[Clang][Bundler] Fix for a potential memory leak [NFC]
Sep 11 2019, 9:04 AM
sdmitriev closed D67416: [Clang][Bundler] Fix for a potential memory leak [NFC].
Sep 11 2019, 9:04 AM · Restricted Project
sdmitriev updated the summary of D67416: [Clang][Bundler] Fix for a potential memory leak [NFC].
Sep 11 2019, 8:35 AM · Restricted Project
sdmitriev added a comment to D67416: [Clang][Bundler] Fix for a potential memory leak [NFC].

LG iff the following is correct: The leak is when dyn_cast can't cast and returns null, right? If so, please add into the summary (and do so for future revisions, it will speed up review).

Sep 11 2019, 8:16 AM · Restricted Project
sdmitriev added a reviewer for D67031: [Clang][Bundler] Error reporting improvements: hfinkel.
Sep 11 2019, 7:27 AM · Restricted Project

Sep 10 2019

sdmitriev created D67416: [Clang][Bundler] Fix for a potential memory leak [NFC].
Sep 10 2019, 2:10 PM · Restricted Project
sdmitriev created D67413: [Clang][Bundler] Replace std::vector by SmallVector [NFC].
Sep 10 2019, 1:05 PM · Restricted Project

Sep 9 2019

sdmitriev added a comment to D64943: [Clang][OpenMP offload] Eliminate use of OpenMP linker script.

Ping

Sep 9 2019, 8:17 AM
sdmitriev added a comment to D67031: [Clang][Bundler] Error reporting improvements.

Ping

Sep 9 2019, 8:17 AM · Restricted Project

Sep 5 2019

sdmitriev added a comment to D67031: [Clang][Bundler] Error reporting improvements.

I think I have addressed all comments posted so far. Do you have more notes/comments/suggestions?

Sep 5 2019, 10:52 AM · Restricted Project

Sep 4 2019

sdmitriev added inline comments to D67031: [Clang][Bundler] Error reporting improvements.
Sep 4 2019, 1:12 PM · Restricted Project
sdmitriev updated the diff for D67031: [Clang][Bundler] Error reporting improvements.
Sep 4 2019, 1:11 PM · Restricted Project
sdmitriev added inline comments to D67031: [Clang][Bundler] Error reporting improvements.
Sep 4 2019, 12:25 PM · Restricted Project
sdmitriev updated the diff for D67031: [Clang][Bundler] Error reporting improvements.
Sep 4 2019, 11:25 AM · Restricted Project
sdmitriev added inline comments to D67031: [Clang][Bundler] Error reporting improvements.
Sep 4 2019, 11:21 AM · Restricted Project
sdmitriev added a comment to D67031: [Clang][Bundler] Error reporting improvements.

Any comments?

Sep 4 2019, 11:05 AM · Restricted Project

Aug 31 2019

sdmitriev updated the diff for D67031: [Clang][Bundler] Error reporting improvements.

Removed trailing '.' from error messages and added few additional changes for better error handling.

Aug 31 2019, 6:48 PM · Restricted Project
sdmitriev added inline comments to D67031: [Clang][Bundler] Error reporting improvements.
Aug 31 2019, 11:03 AM · Restricted Project
sdmitriev added inline comments to D67031: [Clang][Bundler] Error reporting improvements.
Aug 31 2019, 9:14 AM · Restricted Project
sdmitriev updated the diff for D67031: [Clang][Bundler] Error reporting improvements.

Addressed review comments.

Aug 31 2019, 9:14 AM · Restricted Project

Aug 30 2019

sdmitriev created D67031: [Clang][Bundler] Error reporting improvements.
Aug 30 2019, 8:02 PM · Restricted Project

Aug 29 2019

sdmitriev added a reviewer for D64943: [Clang][OpenMP offload] Eliminate use of OpenMP linker script: gtbercea.
Aug 29 2019, 10:39 AM

Aug 28 2019

sdmitriev updated the diff for D65130: [clang][OpenMP] Add clang-offload-wrapper tool.

Rebased and synced up changes with https://reviews.llvm.org/D64943

Aug 28 2019, 10:42 AM · Restricted Project
sdmitriev added a comment to D64943: [Clang][OpenMP offload] Eliminate use of OpenMP linker script.

Looks like there will be no more comments. If so, I will update the first part https://reviews.llvm.org/D65130 which adds clang-offload-wrapper tool with the latest changes.

Aug 28 2019, 9:15 AM

Aug 27 2019

sdmitriev committed rG60a99f4964e6: [Clang][Bundler] Do not require host triple for extracting device bundles (authored by sdmitriev).
[Clang][Bundler] Do not require host triple for extracting device bundles
Aug 27 2019, 6:30 PM
sdmitriev committed rL370143: [Clang][Bundler] Do not require host triple for extracting device bundles.
[Clang][Bundler] Do not require host triple for extracting device bundles
Aug 27 2019, 6:29 PM
sdmitriev closed D66601: [Clang][Bundler] Do not require host triple for extracting device bundles.
Aug 27 2019, 6:29 PM · Restricted Project, Restricted Project
sdmitriev added inline comments to D66601: [Clang][Bundler] Do not require host triple for extracting device bundles.
Aug 27 2019, 4:46 PM · Restricted Project, Restricted Project
sdmitriev updated the diff for D66601: [Clang][Bundler] Do not require host triple for extracting device bundles.

Added tests for each file type.

Aug 27 2019, 4:10 PM · Restricted Project, Restricted Project
sdmitriev committed rG4368971b05cc: [Clang][Bundler] Fix for a hang when unbundling fat binary (authored by sdmitriev).
[Clang][Bundler] Fix for a hang when unbundling fat binary
Aug 27 2019, 2:48 PM
sdmitriev committed rL370115: [Clang][Bundler] Fix for a hang when unbundling fat binary.
[Clang][Bundler] Fix for a hang when unbundling fat binary
Aug 27 2019, 2:48 PM
sdmitriev closed D66598: [Clang][Bundler] Fix for a hang when unbundling fat binary.
Aug 27 2019, 2:48 PM · Restricted Project, Restricted Project
sdmitriev added inline comments to D66598: [Clang][Bundler] Fix for a hang when unbundling fat binary.
Aug 27 2019, 1:51 PM · Restricted Project, Restricted Project
sdmitriev updated the diff for D66598: [Clang][Bundler] Fix for a hang when unbundling fat binary.
Aug 27 2019, 1:40 PM · Restricted Project, Restricted Project
sdmitriev added inline comments to D66598: [Clang][Bundler] Fix for a hang when unbundling fat binary.
Aug 27 2019, 1:15 PM · Restricted Project, Restricted Project
sdmitriev added a comment to D66598: [Clang][Bundler] Fix for a hang when unbundling fat binary.

Sure. The main unbundling loop looks as follows (see loop on line 745)

Aug 27 2019, 1:07 PM · Restricted Project, Restricted Project
sdmitriev added inline comments to D66601: [Clang][Bundler] Do not require host triple for extracting device bundles.
Aug 27 2019, 11:47 AM · Restricted Project, Restricted Project
sdmitriev added inline comments to D66601: [Clang][Bundler] Do not require host triple for extracting device bundles.
Aug 27 2019, 11:31 AM · Restricted Project, Restricted Project