Commit Graph

16 Commits

Author SHA1 Message Date
Robert Coup
38364cede1
always strip whitespace when calling uname -m (#28939) 2023-01-19 18:39:39 -08:00
7FrogTW
42db6e908b
[tensorflow-common] fix regex pattern of static link script (#27847) 2022-11-17 23:28:00 -08:00
7FrogTW
a251c00247
chore: upgrade tensorflow-cc portfile (#24861) (#24861)
Co-authored-by: Jonliu1993 <13720414433@163.com>
2022-10-21 10:32:45 -07:00
Stefano Sinigardi
eff88baadc
[x64-windows-release] add a single config community triplet based on x64-windows and make it work on some ports (#15983)
* add a single config community triplet based on x64-windows

* add a failed port, otherwise mechanism does not support empty list

* add failures to baseline

* remove duplicate entry

* second round of failures added to baseline

* third round of regressions added to CI

* [ade] fix single-config builds

* [ade] update refs

* remove duplicate entries

* [unix2dos] restore eol in script file

* add even more ports now failing in singleConfig...

* [libjpeg-turbo] remove unnecessary check

* [libjpeg-turbo] fix references

* [baseline] restore check for ports that were added recently

* [libmodplug] enable single config triplets

* [tensorflow-common] enable single config triplets

* update baseline

* fix references

* remove wrong check for single config triplets

* fix references

* [ogre] fix single config builds

* [ogre] fix references

* [untested] force x64-windows-release as host triplet when testing x64-windows-release in CI

* fix

* [x264] fix for single config

* [x264] update refs

* [libffi] enable single config builds

* [libffi] update refs

* remove cli broken arguments

* [calceph] enable single-config builds

* [calceph] fix references

* [kf5config] enable single-config builds

* [kf5config] fix references

* [detours] enable single-config builds

* [detours] fix references

* [kf5*] enable single-config builds

* [kf5*] fix references

* fix

* kf5config fix reference

* trying again to force host triplet in CI

* [boost] fix for single-config builds

* [boost] update references

* fix

* [boost] update refs

* disable host triplet in ci because it's not necessary

* retrigger a build for ports previously failing

* remove host triplet in ci, not necessary anymore?

* make PR dry

* [tensorflow-common] bump version

* [tensorflow-common] fix references

* Fix version database for boost-modular-build-helper.

* fix references

* restore CRLF on some ports

* bump versions

* fix references

* bump port versions

* fix references

* boost-modular-build-helper: Reverted due to no changes.

detours, kf5config, kf5holidays, libbacktrace: Reverted due to only whitespace changes.
libffi: bumped port-version
libmodplug: reverted due to no functional changes
ogre, ogre-next: reverted due to incorrect case of "Debug" vs. "Release" already fixed in master.

And rebuilt version database.

Co-authored-by: Billy Robert O'Neal III <bion@microsoft.com>
2021-12-20 10:50:45 -05:00
Daniel Schürmann
1bca1f0203
[tensorflow-common] remove single quotes from vcpkg flags (#21869)
* [vcpkg_acquire_msys] Update bzip2 to 1.0.8-2

* [tensorflow-common] remove single quotes from vcpkg flags

They are escaped like '\'-mtune=native\''  which leads to a compiler error:
cc: error: unrecognized command line option '-mtune=native'
Set via: set(VCPKG_CXX_FLAGS "-mtune=native")
2021-12-17 13:22:50 -05:00
Joachim Gehweiler
e92dfa5c01
[tensorflow] update to 2.7, including bazel latest 4.x update (#22022)
* Revert "incorporate changes from microsoft:master"

* Revert "Revert "incorporate changes from microsoft:master""

* update tensorflow to 2.7 and bazel to latest 4.x

* Update version database.

Co-authored-by: jgehw <Joachim_Gehweiler@McAfee.com>
Co-authored-by: Billy Robert O'Neal III <bion@microsoft.com>
2021-12-15 10:09:54 -08:00
Joachim Gehweiler
a9ff505c5b
[vcpkg baseline][tensorflow] setup python venv and update Linux VMs (#21912)
* Revert "incorporate changes from microsoft:master"

* Revert "Revert "incorporate changes from microsoft:master""

* preliminary approach to solve pip issue

* fix python venv

* fix macOS build command again

* bump version

* x-add-version

* Fix spelling of prerequisites.

* Add python3-venv

* Update linux pool.

Co-authored-by: Joachim Gehweiler <joachim@Joachims-iMac.local>
Co-authored-by: Billy Robert O'Neal III <bion@microsoft.com>
2021-12-13 17:46:40 -08:00
Joachim Gehweiler
8ad33ead90
[tensorflow] update to 2.6 (#20015)
* Revert "incorporate changes from microsoft:master"

* Revert "Revert "incorporate changes from microsoft:master""

* WIP: update to tensorflow 2.6

* update patch

* update more patches

* fix patch again

* fix new Windows compile/linkage errors

* fix patch

* fix patch again

* temporarily revert Windows build option fix to test whether upstream fix doesn't work

* check if constexpr is sufficient (is_same_v requires C++17)

* try patch for build parameters

* remove fastbuild patch and improve constexpr patch (no C++17 requirement)
(fastbuild patch didn't work because bazel overrides it with /DEBUG:FULL)

* x-add-version

* add C++17 preprocessor switch for "if constexpr"

* x-add-version

* remove pre-processor switch (doesn't work without)

* x-add-version

* work-around toolchain issues on macOS

* x-add-version

* fix Windows build options (must be string, not list)

* x-add-version

* temporarily add code to debug CI

* temporarily add more debug output as build doesn't even start on macOS CI

* remove debug code, add switch for linker parameters on macOS and re-introduce old behaviour (some platforms still use old behaviour)

* x-add-version

* fix broken string termination

* x-add-version

* fix function name

* x-add-version

Co-authored-by: jgehw <Joachim_Gehweiler@McAfee.com>
Co-authored-by: Billy Robert O'Neal III <bion@microsoft.com>
2021-09-29 20:43:32 -07:00
Billy O'Neal
8275003fd8
[tensorflow-common] Shutdown server after 1 second. (#20273)
* [tensorflow-common] Shutdown server after 1 second.

Attempts to reduce the probability of failures like https://dev.azure.com/vcpkg/public/_build/results?buildId=59950

* Version database
2021-09-23 18:04:24 -07:00
Joachim Gehweiler
7734e8b89d
[tensorflow] fix macOS build errors caused by numpy and bazel upgrades (#19363)
* Revert "incorporate changes from microsoft:master"

* Revert "Revert "incorporate changes from microsoft:master""

* issue targeted in newer numpy version

* work-around for broken numpy libs on macOS

* temporarily add debug code to analyze CI failures

* again temporary debug code

* fix linkage command on macOS (broken by Bazel upgrade)

* fix regex for macOS linker command

* remove debug code, bump version

* x-add-version seems to require a separate commit...

* Fix misspelled "acceleration".

* x-add-version

Co-authored-by: jgehw <Joachim_Gehweiler@McAfee.com>
Co-authored-by: Billy Robert O'Neal III <bion@microsoft.com>
2021-09-01 14:29:50 -07:00
Cheney Wang
261c458af6
[tensorflow] Update the max version of the supported bazel (#19165)
* [tensorflow] Update the max version of the supported bazel

* Update json file
2021-07-30 13:01:31 -07:00
Joachim Gehweiler
56ca13c972
[tensorflow-common] check for invalid username (#18111)
* Revert "incorporate changes from microsoft:master"

* Revert "Revert "incorporate changes from microsoft:master""

* added check for spaces in username (unsupported by bazel)

* apply a work-around with custom build root instead of terminating build when username contains spaces

* x-add-version

* Add check for spaces in vcpkg path.
Keep non-Windows build output in vcpkg subfolders because it easily sums up to 100GB. So users have only one place to cleanup.

* vcpkg x-add-version

* fix typo

* re-run x-add-version

Co-authored-by: jgehw <Joachim_Gehweiler@McAfee.com>
2021-06-01 11:49:53 -07:00
Billy O'Neal
a9b27ed5df
Update VMs, CMake to 3.20.1, CUDA to 11.3, and pwsh to 7.1.3 (#17331)
* Update to CUDA 11.3 on Windows.

* Update PowerShell to 7.1.3.

* Update CUDA to 11.3 on Linux.

* "Explode" VM provisioning scripts for more consistent feedback during deploy. This resolves the deployment script often hanging with no feedback as to why.

* [libdatachannel] Fix use of deprecated result_type typedef.

Submitted upstream as https://github.com/paullouisageneau/libdatachannel/pull/413

* [libvpx] Get the libvpx outputs from the correct place.

(Perhaps VS2019 version 16.10 moved where these are placed? I've been defensive and left an attempt to find from the old location in place.)

* [chromaprint] Support implementations where lrintf is an intrinsic.

* Add provision-entire-image script.

* [cudnn] Disable download-on-the-fly due to licensing concerns.

* Add libnccl to Linux VMs.

* [wangle] Disable x64-windows due to an ICE.

* [cmake] Update cmake to 3.20.1 to avoid https://gitlab.kitware.com/cmake/cmake/-/issues/21571 race

* [libudis86] Fix passing a bogus working directory which fails on CMake 3.20.x

* [dartsim] Disable unit tests, examples, and tutorials, some of which have CMake authoring errors rejected by 3.20.1.

* Add thrust to the cuda installees.

* [tensorflow] Put .bzl in CURRENT_BUILDTREES_DIR to avoid running out of disk space in CI and to respect --clean-after-build.

* [dimcli] Skip port broken by changes in VS2019 project system.

* [upb] Disable an additional warning.

* [libhv] Fix typo DISABLE_PARALLEL => DISABLE_PARALLEL_CONFIGURE

* Update pools
2021-04-26 10:27:45 -07:00
Joachim Gehweiler
a9ba425534
[tensorflow] upgrade to 2.4.1 (#16364)
* fix build issues occurring from default bazel config being used because customized bazel config is stored in wrong directory

* [tensorflow-cc] Update CONTROL and ci.baseline.txt

* fix also applies to windows static build

* fix debug and static builds as well as library naming for non-linux
- add patch to fix debug builds
- add patch to fix exports for static linking
- really build debug (instead of cloning release)
- override bazel build options for debug (work around bazel bug)
- bazel doesn't support static libraries: work around by building dynamic library and constructing static linkage commands from build log
- Windows .pdb file can't be >4GB even on x64: work around using reduced debug information
- Windows doesn't support .lib files >4GB even on x64, so split into multiple libs
- vcpkg requires equal amount of libs for debug and release: work around using handcrafted empty dummy libs
- fix naming of libs (.dll on Windows and .dylib on macOS)

* upgrade tensorflow from v1.14 to v2.3
- adapt patch files to tensorflow code changes
- update bazel from v0.25.2 to v3.1
- on Windows use python installed on the host instead of embedded python obtained via vcpkg because embedded python lacks pip, which we need to obtain numpy
- on Windows add MSYS2 to the PATH so that bazel tools can access MSYS2 GIT
- add support for custom CA certificates when using HTTPS_PROXY

* fix execute process macro
The existing implementation totally screwed up commands if the command's arguments contained semicolons (this is the case, e.g., in the FindPython modules of the cmake distribution).

* extend overriden execute_process to more than one COMMAND as there actually are use cases for this

* added another patch required for tensorflow v2.3, fixed path and working directory

* Revert "incorporate changes from microsoft:master"

* Revert "Revert "incorporate changes from microsoft:master""

* final fixes for static build + improving out messages

* enabling linux and osx in CI to see if it works now

* simplified code, fixed version numbers, fixed generated include cmake file

* fix failing postbuild check on handcrafted empty dummy library by spreading the last real libraries contents over the required number of libraries

* remove dead code commit by mistake again

* improvements from code review

* cleaner fix for debug code

* find pip3 in PATH (PYTHON3_DIR apparently not valid for pip3)

* fix error in python helper script

* fix wrong libname in postbuild script

* fix python detection + switch to python on msys2 (instead of embedded python) for Windows as we need numpy

* fix order of arguments

* fix command (it may contain spaces such as C:\Program Files\...)

* revert last commit (root cause for CI failures is something different: there are line breaks in path)

* fix regex comparision
(value needs to be escaped as it may contains regex special characters such as brackets, eg C:/Program Files (x86)/...)

* fix linebreaks in generated file

* fix CRT linkage
(macOS doesn't support static CRT linkage; it's set to dynamic even static target triplets for macOS and linux)

* refactor implemenation to avoid as much code duplication as possible -- algorithmically identical

* fix version numbers in helper scripts

* enable work-around for Windows until bazel fix is available

* install missing python3-pip on linux

* fix linux build by patching

* apply timeout feature now available via merged master branch

* correct linux build patch

* improve debug build patches
(no functional difference because LOG(FATAL, ...) macro internally anyway calls abort(), which the compiler doesn't detect in debug mode...

* improve linux patch

* temporarily add debug to inspect what's going on on macOS CI

* remove temporary debug code and fix static linking scripts for linux and macOS

* fix regex escaping

* fix ambiguous match while grepping for the framework link command

* extend fix of ambiguous match while grepping for the framework link command

* fix what merge of master broke

* fix more what got broken by merging master
(all packages and their dependencies are now maintained manually instead of using pacman...)

* remove "unofficial" from filename

* added switch do distinct classic and manifest mode when generating config.cmake file

* create symlinks for libraries without version number

* fix linux postbuild script

* temporarily disable code making problems

* add note for linking on Linux and macOS

* forget to add README file in previous commit

* add file forgotton in macro fixing patch

* fix python library path

* fix macOS static link command

* update linkage instructions in README

* Update ports/tensorflow-cc/CONTROL

* Update ports/tensorflow-cc/portfile.cmake

* Update scripts/ci.baseline.txt

* use vcpkg_execute_required_process

* pass C_FLAGS and CXX_FLAGS to bazel

* fix INTERFACE_INCLUDE_DIRECTORIES

* fix optional c/cxx arguments

* also add linker opts

* update README

* merge static libs into one
to support force_load (cannot force_load both due to duplicate symbols)

* update README

* quote python path (it might contain spaces that don't get escaped inside outer quotes of bash command)

* fix python path also for static build

* add arm(64) as currently unsupported arch

* bazel 3.7 is available -> remove workaround

* update README, remove necessary c-ares from deps

* update msys package

* add uwp specific options, and minor general improvements

* fix string replace

* fix control file and windows path separator

* revert backslashes-fix -- the root cause was missing .exe extension

* upgrade to tf 2.3.1

* fix hard-coded version

* remove uwp work-in-progress code so that PR can be merged

* add [tensorflow] C API port

* missing in previous commit

* fix include file

* remove unnecessary suffix

* update README and print out usage info in portfile

* add UWP patches

* fix uwp patch file

* fix patch again

* fix patch again

* fix patch again

* move options from command line to .bazelrc

* fix include paths

* work around bazel restriction "The include path 'D:/buildtrees/tensorflow-cc/tools_clone' references a path outside of the execution root."

* go for a completely different approach: force-include uwppatch.h

* fix include path again

* choose different include location, which is available in bazel build tree

* fix compile errors

* update header (getenv redefinition)

* next try to get patched headers to work

* another try to fix include paths

* update patched header, bazel has its own naming for target triplet

* yet another try to fix patched include path

* next try to fix includes: patch bazel deps where required

* fix patch

* Update ports/tensorflow-cc/CONTROL

Co-authored-by: NancyLi1013 <46708020+NancyLi1013@users.noreply.github.com>

* Update ports/tensorflow/portfile.cmake

Co-authored-by: NancyLi1013 <46708020+NancyLi1013@users.noreply.github.com>

* follow-up to code review

* extend patch (further build deps)

* fix suffix parameter

* add more build deps

* fix quoting

* extend linux patch

* fix patch

* extend patch again

* yet another deps fix

* another try to fix quoting of possibly empty string parameter

* add another deps patch

* extend patch again

* different approach to fix empty string arguments

* fix portfiles, add more bazel deps

* update list of headers for tensorflow 2.3.1 (was still 2.3.0)

* update list of headers for v2.3.1

* extend bazel deps path again

* Update ports/tensorflow/CONTROL

Co-authored-by: NancyLi1013 <46708020+NancyLi1013@users.noreply.github.com>

* fix bazel deps, bump port version

* add more bazel deps

* move common stuff into tensorflow-common as discussed in review

* go for a different approach (patch bazel toolchain) as adding bazel deps is a never-ending story...

* Apply suggestions from code review

Co-authored-by: nicole mazzuca <mazzucan@outlook.com>

* yet again a completely different approach to fix the include path

* fix path

* fix path again

* merge changes from C port

* fix cmake variable replacement (apparently @ cannot be escaped...)

* try again without escaping

* use absolute path

* fix escaping

* calculate absolute path

* fix replacement in configure_file

* handle directory exists error

* convert cygpath to windows path

* overcome backslash / escaping issues

* try include with build-root-relative path

* apply work-around until proper solution is available

* merge master

* resolved conflicts

* Revert "merge master"

This reverts commit f0804f184d.

* add uwp files to copy list

* update uwppatch.h

* fix typo

* patch the patch for UWP case

* fix patch (missing spaces)

* fix build error in AWS SDK prerequisit

* fix more compilation errors

* replace previous patch with more targeted patch

* add escaped quotes around Windows path with spaces

* cleanup

* merge patch (there can only be one patch file per external)

* add messages to user

* update versions files

* update tensorflow to 2.4.1

* port 0 seems to cause errors => remove port field

* remove patches that made it into tensorflow, correct line numbers in remaining patches

* fix patch line numbers, add copy rules for new header files

* fix patch line numbers

* fix versions for x86

* add more Windows and Linux specific patches

* add more Windows and Linux patches

* fix UWP patches

* fix x86 target

* remove UWP specific fixes from this branch as UWP PR doesn't get merged

* fix version shas

* Apply suggestions from code review

Co-authored-by: NancyLi1013 <46708020+NancyLi1013@users.noreply.github.com>

* fix version hash again

* try an easier fix after discussion upstream

* fix hashes

Co-authored-by: Gehweiler <Joachim_Gehweiler@McAfee.com>
Co-authored-by: wangli28 <wangli28@beyondsoft.com>
Co-authored-by: Jack·Boos·Yu <47264268+JackBoosY@users.noreply.github.com>
Co-authored-by: Joachim Gehweiler <joachim@Joachims-iMac.local>
Co-authored-by: NancyLi1013 <46708020+NancyLi1013@users.noreply.github.com>
Co-authored-by: nicole mazzuca <mazzucan@outlook.com>
2021-03-26 14:55:50 -07:00
Billy O'Neal
a8fa84e4d8
[vcpkg] Fix unrecognized identifier errors in prbuild and cibuild. (#15354) 2021-01-10 14:31:30 -08:00
Joachim Gehweiler
c961c13692
[tensorflow] Add C port (#14392)
* fix build issues occurring from default bazel config being used because customized bazel config is stored in wrong directory

* [tensorflow-cc] Update CONTROL and ci.baseline.txt

* fix also applies to windows static build

* fix debug and static builds as well as library naming for non-linux
- add patch to fix debug builds
- add patch to fix exports for static linking
- really build debug (instead of cloning release)
- override bazel build options for debug (work around bazel bug)
- bazel doesn't support static libraries: work around by building dynamic library and constructing static linkage commands from build log
- Windows .pdb file can't be >4GB even on x64: work around using reduced debug information
- Windows doesn't support .lib files >4GB even on x64, so split into multiple libs
- vcpkg requires equal amount of libs for debug and release: work around using handcrafted empty dummy libs
- fix naming of libs (.dll on Windows and .dylib on macOS)

* upgrade tensorflow from v1.14 to v2.3
- adapt patch files to tensorflow code changes
- update bazel from v0.25.2 to v3.1
- on Windows use python installed on the host instead of embedded python obtained via vcpkg because embedded python lacks pip, which we need to obtain numpy
- on Windows add MSYS2 to the PATH so that bazel tools can access MSYS2 GIT
- add support for custom CA certificates when using HTTPS_PROXY

* fix execute process macro
The existing implementation totally screwed up commands if the command's arguments contained semicolons (this is the case, e.g., in the FindPython modules of the cmake distribution).

* extend overriden execute_process to more than one COMMAND as there actually are use cases for this

* added another patch required for tensorflow v2.3, fixed path and working directory

* Revert "incorporate changes from microsoft:master"

* Revert "Revert "incorporate changes from microsoft:master""

* final fixes for static build + improving out messages

* enabling linux and osx in CI to see if it works now

* simplified code, fixed version numbers, fixed generated include cmake file

* fix failing postbuild check on handcrafted empty dummy library by spreading the last real libraries contents over the required number of libraries

* remove dead code commit by mistake again

* improvements from code review

* cleaner fix for debug code

* find pip3 in PATH (PYTHON3_DIR apparently not valid for pip3)

* fix error in python helper script

* fix wrong libname in postbuild script

* fix python detection + switch to python on msys2 (instead of embedded python) for Windows as we need numpy

* fix order of arguments

* fix command (it may contain spaces such as C:\Program Files\...)

* revert last commit (root cause for CI failures is something different: there are line breaks in path)

* fix regex comparision
(value needs to be escaped as it may contains regex special characters such as brackets, eg C:/Program Files (x86)/...)

* fix linebreaks in generated file

* fix CRT linkage
(macOS doesn't support static CRT linkage; it's set to dynamic even static target triplets for macOS and linux)

* refactor implemenation to avoid as much code duplication as possible -- algorithmically identical

* fix version numbers in helper scripts

* enable work-around for Windows until bazel fix is available

* install missing python3-pip on linux

* fix linux build by patching

* apply timeout feature now available via merged master branch

* correct linux build patch

* improve debug build patches
(no functional difference because LOG(FATAL, ...) macro internally anyway calls abort(), which the compiler doesn't detect in debug mode...

* improve linux patch

* temporarily add debug to inspect what's going on on macOS CI

* remove temporary debug code and fix static linking scripts for linux and macOS

* fix regex escaping

* fix ambiguous match while grepping for the framework link command

* extend fix of ambiguous match while grepping for the framework link command

* fix what merge of master broke

* fix more what got broken by merging master
(all packages and their dependencies are now maintained manually instead of using pacman...)

* remove "unofficial" from filename

* added switch do distinct classic and manifest mode when generating config.cmake file

* create symlinks for libraries without version number

* fix linux postbuild script

* temporarily disable code making problems

* add note for linking on Linux and macOS

* forget to add README file in previous commit

* add file forgotton in macro fixing patch

* fix python library path

* fix macOS static link command

* update linkage instructions in README

* Update ports/tensorflow-cc/CONTROL

* Update ports/tensorflow-cc/portfile.cmake

* Update scripts/ci.baseline.txt

* use vcpkg_execute_required_process

* pass C_FLAGS and CXX_FLAGS to bazel

* fix INTERFACE_INCLUDE_DIRECTORIES

* fix optional c/cxx arguments

* also add linker opts

* update README

* merge static libs into one
to support force_load (cannot force_load both due to duplicate symbols)

* update README

* quote python path (it might contain spaces that don't get escaped inside outer quotes of bash command)

* fix python path also for static build

* add arm(64) as currently unsupported arch

* bazel 3.7 is available -> remove workaround

* update README, remove necessary c-ares from deps

* update msys package

* add uwp specific options, and minor general improvements

* fix string replace

* fix control file and windows path separator

* revert backslashes-fix -- the root cause was missing .exe extension

* upgrade to tf 2.3.1

* fix hard-coded version

* remove uwp work-in-progress code so that PR can be merged

* add [tensorflow] C API port

* missing in previous commit

* fix include file

* remove unnecessary suffix

* update README and print out usage info in portfile

* Update ports/tensorflow-cc/CONTROL

Co-authored-by: NancyLi1013 <46708020+NancyLi1013@users.noreply.github.com>

* Update ports/tensorflow/portfile.cmake

Co-authored-by: NancyLi1013 <46708020+NancyLi1013@users.noreply.github.com>

* follow-up to code review

* fix suffix parameter

* fix quoting

* extend linux patch

* another try to fix quoting of possibly empty string parameter

* different approach to fix empty string arguments

* update list of headers for tensorflow 2.3.1 (was still 2.3.0)

* Update ports/tensorflow/CONTROL

Co-authored-by: NancyLi1013 <46708020+NancyLi1013@users.noreply.github.com>

* move common stuff into tensorflow-common as discussed in review

* Apply suggestions from code review

Co-authored-by: nicole mazzuca <mazzucan@outlook.com>

Co-authored-by: Gehweiler <Joachim_Gehweiler@McAfee.com>
Co-authored-by: wangli28 <wangli28@beyondsoft.com>
Co-authored-by: Jack·Boos·Yu <47264268+JackBoosY@users.noreply.github.com>
Co-authored-by: Joachim Gehweiler <joachim@Joachims-iMac.local>
Co-authored-by: NancyLi1013 <46708020+NancyLi1013@users.noreply.github.com>
Co-authored-by: nicole mazzuca <mazzucan@outlook.com>
2020-11-25 11:18:44 -08:00