diff --git a/Makefile b/Makefile
index 40fabf1fe7..a1f2c94cf4 100644
--- a/Makefile
+++ b/Makefile
@@ -249,11 +249,21 @@ build_verbose: check_env
//submodules/TelegramUI:TelegramUI#shared,iphoneos-arm64 \
//:WatchAppExtension#dwarf-and-dsym,watchos-arm64_32,watchos-armv7k \
//:ShareExtension#dwarf-and-dsym,iphoneos-arm64 \
- //:WidgetExtension#dwarf-and-dsym,iphoneos-arm64 \
- //:NotificationContentExtension#dwarf-and-dsym,iphoneos-arm64 \
- //:NotificationServiceExtension#dwarf-and-dsym,iphoneos-arm64 \
- //:IntentsExtension#dwarf-and-dsym,iphoneos-arm64 \
- --verbose 8 ${BUCK_OPTIONS} ${BUCK_THREADS_OPTIONS} ${BUCK_DEBUG_OPTIONS}
+ //:WidgetExtension#dwarf-and-dsym,iphoneos-arm64 \
+ //:NotificationContentExtension#dwarf-and-dsym,iphoneos-arm64 \
+ //:NotificationServiceExtension#dwarf-and-dsym,iphoneos-arm64 \
+ //:IntentsExtension#dwarf-and-dsym,iphoneos-arm64 \
+ --verbose 8 ${BUCK_OPTIONS} ${BUCK_THREADS_OPTIONS} ${BUCK_DEBUG_OPTIONS}
+
+build_openssl: check_env
+ $(BUCK) build \
+ //submodules/openssl:openssl#iphoneos-arm64 \
+ --verbose 7 ${BUCK_OPTIONS} ${BUCK_THREADS_OPTIONS} ${BUCK_DEBUG_OPTIONS}
+
+build_ton: check_env
+ $(BUCK) build \
+ //submodules/ton:ton#iphoneos-arm64 \
+ --verbose 7 ${BUCK_OPTIONS} ${BUCK_THREADS_OPTIONS} ${BUCK_DEBUG_OPTIONS}
kill_xcode:
killall Xcode || true
diff --git a/Telegram_Buck.xcworkspace/buck-project.meta.json b/Telegram_Buck.xcworkspace/buck-project.meta.json
index 573f189fa5..05ca950f94 100644
--- a/Telegram_Buck.xcworkspace/buck-project.meta.json
+++ b/Telegram_Buck.xcworkspace/buck-project.meta.json
@@ -1 +1 @@
-{"required-targets":["//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_ac3_parser.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_adts_parser.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_avcodec.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_avdct.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_avfft.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_d3d11va.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_dirac.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_dv_profile.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_dxva2.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_jni.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_mediacodec.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_qsv.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_vaapi.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_vdpau.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_version.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_videotoolbox.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_vorbis_parser.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_xvmc.h","//submodules/FFMpeg:ffmpeg_header_libavformat_sub_avformat.h","//submodules/FFMpeg:ffmpeg_header_libavformat_sub_avio.h","//submodules/FFMpeg:ffmpeg_header_libavformat_sub_version.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_adler32.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_aes.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_aes_ctr.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_attributes.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_audio_fifo.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_avassert.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_avconfig.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_avstring.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_avutil.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_base64.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_blowfish.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_bprint.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_bswap.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_buffer.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_camellia.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_cast5.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_channel_layout.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_common.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_cpu.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_crc.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_des.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_dict.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_display.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_downmix_info.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_encryption_info.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_error.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_eval.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_ffversion.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_fifo.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_file.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_frame.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hash.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hmac.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_cuda.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_d3d11va.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_drm.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_dxva2.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_mediacodec.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_qsv.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_vaapi.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_vdpau.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_videotoolbox.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_imgutils.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_intfloat.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_intreadwrite.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_lfg.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_log.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_lzo.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_macros.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_mastering_display_metadata.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_mathematics.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_md5.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_mem.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_motion_vector.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_murmur3.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_opt.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_parseutils.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_pixdesc.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_pixelutils.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_pixfmt.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_random_seed.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_rational.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_rc4.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_replaygain.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_ripemd.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_samplefmt.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_sha.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_sha512.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_spherical.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_stereo3d.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_tea.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_threadmessage.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_time.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_timecode.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_timestamp.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_tree.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_twofish.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_version.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_xtea.h","//submodules/FFMpeg:ffmpeg_header_libswresample_sub_swresample.h","//submodules/FFMpeg:ffmpeg_header_libswresample_sub_version.h","//submodules/FFMpeg:libffmpeg_build","//submodules/MtProtoKit:openssl_libs","//submodules/MtProtoKit:ton_libs","//submodules/Opus:opus_lib_file","//submodules/WebP:WebP_lib_file"],"xcconfig-paths":["buck-out/gen/AppLibrary-Debug.xcconfig","buck-out/gen/AppLibrary-Profile.xcconfig","buck-out/gen/AppLibrary-Release.xcconfig","buck-out/gen/IntentsExtension#iphonesimulator-x86_64-Debug.xcconfig","buck-out/gen/IntentsExtension#iphonesimulator-x86_64-Profile.xcconfig","buck-out/gen/IntentsExtension#iphonesimulator-x86_64-Release.xcconfig","buck-out/gen/NotificationContentExtension#iphonesimulator-x86_64-Debug.xcconfig","buck-out/gen/NotificationContentExtension#iphonesimulator-x86_64-Profile.xcconfig","buck-out/gen/NotificationContentExtension#iphonesimulator-x86_64-Release.xcconfig","buck-out/gen/NotificationServiceExtension#iphonesimulator-x86_64-Debug.xcconfig","buck-out/gen/NotificationServiceExtension#iphonesimulator-x86_64-Profile.xcconfig","buck-out/gen/NotificationServiceExtension#iphonesimulator-x86_64-Release.xcconfig","buck-out/gen/ShareExtension#iphonesimulator-x86_64-Debug.xcconfig","buck-out/gen/ShareExtension#iphonesimulator-x86_64-Profile.xcconfig","buck-out/gen/ShareExtension#iphonesimulator-x86_64-Release.xcconfig","buck-out/gen/Telegram-Debug.xcconfig","buck-out/gen/Telegram-Profile.xcconfig","buck-out/gen/Telegram-Release.xcconfig","buck-out/gen/WatchApp#watchsimulator-i386-Debug.xcconfig","buck-out/gen/WatchApp#watchsimulator-i386-Profile.xcconfig","buck-out/gen/WatchApp#watchsimulator-i386-Release.xcconfig","buck-out/gen/WatchAppExtension#watchsimulator-i386-Debug.xcconfig","buck-out/gen/WatchAppExtension#watchsimulator-i386-Profile.xcconfig","buck-out/gen/WatchAppExtension#watchsimulator-i386-Release.xcconfig","buck-out/gen/WidgetExtension#iphonesimulator-x86_64-Debug.xcconfig","buck-out/gen/WidgetExtension#iphonesimulator-x86_64-Profile.xcconfig","buck-out/gen/WidgetExtension#iphonesimulator-x86_64-Release.xcconfig","buck-out/gen/submodules/AccountContext/AccountContext-Debug.xcconfig","buck-out/gen/submodules/AccountContext/AccountContext-Profile.xcconfig","buck-out/gen/submodules/AccountContext/AccountContext-Release.xcconfig","buck-out/gen/submodules/ActionSheetPeerItem/ActionSheetPeerItem-Debug.xcconfig","buck-out/gen/submodules/ActionSheetPeerItem/ActionSheetPeerItem-Profile.xcconfig","buck-out/gen/submodules/ActionSheetPeerItem/ActionSheetPeerItem-Release.xcconfig","buck-out/gen/submodules/ActivityIndicator/ActivityIndicator-Debug.xcconfig","buck-out/gen/submodules/ActivityIndicator/ActivityIndicator-Profile.xcconfig","buck-out/gen/submodules/ActivityIndicator/ActivityIndicator-Release.xcconfig","buck-out/gen/submodules/AlertUI/AlertUI-Debug.xcconfig","buck-out/gen/submodules/AlertUI/AlertUI-Profile.xcconfig","buck-out/gen/submodules/AlertUI/AlertUI-Release.xcconfig","buck-out/gen/submodules/AnimationUI/AnimationUI-Debug.xcconfig","buck-out/gen/submodules/AnimationUI/AnimationUI-Profile.xcconfig","buck-out/gen/submodules/AnimationUI/AnimationUI-Release.xcconfig","buck-out/gen/submodules/AppBundle/AppBundle-Debug.xcconfig","buck-out/gen/submodules/AppBundle/AppBundle-Profile.xcconfig","buck-out/gen/submodules/AppBundle/AppBundle-Release.xcconfig","buck-out/gen/submodules/AsyncDisplayKit/AsyncDisplayKit#shared-Debug.xcconfig","buck-out/gen/submodules/AsyncDisplayKit/AsyncDisplayKit#shared-Profile.xcconfig","buck-out/gen/submodules/AsyncDisplayKit/AsyncDisplayKit#shared-Release.xcconfig","buck-out/gen/submodules/AuthorizationUI/AuthorizationUI-Debug.xcconfig","buck-out/gen/submodules/AuthorizationUI/AuthorizationUI-Profile.xcconfig","buck-out/gen/submodules/AuthorizationUI/AuthorizationUI-Release.xcconfig","buck-out/gen/submodules/AvatarNode/AvatarNode-Debug.xcconfig","buck-out/gen/submodules/AvatarNode/AvatarNode-Profile.xcconfig","buck-out/gen/submodules/AvatarNode/AvatarNode-Release.xcconfig","buck-out/gen/submodules/BotPaymentsUI/BotPaymentsUI-Debug.xcconfig","buck-out/gen/submodules/BotPaymentsUI/BotPaymentsUI-Profile.xcconfig","buck-out/gen/submodules/BotPaymentsUI/BotPaymentsUI-Release.xcconfig","buck-out/gen/submodules/BuildConfig/BuildConfig-Debug.xcconfig","buck-out/gen/submodules/BuildConfig/BuildConfig-Profile.xcconfig","buck-out/gen/submodules/BuildConfig/BuildConfig-Release.xcconfig","buck-out/gen/submodules/CallListUI/CallListUI-Debug.xcconfig","buck-out/gen/submodules/CallListUI/CallListUI-Profile.xcconfig","buck-out/gen/submodules/CallListUI/CallListUI-Release.xcconfig","buck-out/gen/submodules/ChatListSearchItemHeader/ChatListSearchItemHeader-Debug.xcconfig","buck-out/gen/submodules/ChatListSearchItemHeader/ChatListSearchItemHeader-Profile.xcconfig","buck-out/gen/submodules/ChatListSearchItemHeader/ChatListSearchItemHeader-Release.xcconfig","buck-out/gen/submodules/ChatListSearchItemNode/ChatListSearchItemNode-Debug.xcconfig","buck-out/gen/submodules/ChatListSearchItemNode/ChatListSearchItemNode-Profile.xcconfig","buck-out/gen/submodules/ChatListSearchItemNode/ChatListSearchItemNode-Release.xcconfig","buck-out/gen/submodules/ChatListSearchRecentPeersNode/ChatListSearchRecentPeersNode-Debug.xcconfig","buck-out/gen/submodules/ChatListSearchRecentPeersNode/ChatListSearchRecentPeersNode-Profile.xcconfig","buck-out/gen/submodules/ChatListSearchRecentPeersNode/ChatListSearchRecentPeersNode-Release.xcconfig","buck-out/gen/submodules/ChatListUI/ChatListUI-Debug.xcconfig","buck-out/gen/submodules/ChatListUI/ChatListUI-Profile.xcconfig","buck-out/gen/submodules/ChatListUI/ChatListUI-Release.xcconfig","buck-out/gen/submodules/ChatTitleActivityNode/ChatTitleActivityNode-Debug.xcconfig","buck-out/gen/submodules/ChatTitleActivityNode/ChatTitleActivityNode-Profile.xcconfig","buck-out/gen/submodules/ChatTitleActivityNode/ChatTitleActivityNode-Release.xcconfig","buck-out/gen/submodules/CheckNode/CheckNode-Debug.xcconfig","buck-out/gen/submodules/CheckNode/CheckNode-Profile.xcconfig","buck-out/gen/submodules/CheckNode/CheckNode-Release.xcconfig","buck-out/gen/submodules/ComposePollUI/ComposePollUI-Debug.xcconfig","buck-out/gen/submodules/ComposePollUI/ComposePollUI-Profile.xcconfig","buck-out/gen/submodules/ComposePollUI/ComposePollUI-Release.xcconfig","buck-out/gen/submodules/ContactListUI/ContactListUI-Debug.xcconfig","buck-out/gen/submodules/ContactListUI/ContactListUI-Profile.xcconfig","buck-out/gen/submodules/ContactListUI/ContactListUI-Release.xcconfig","buck-out/gen/submodules/ContactsPeerItem/ContactsPeerItem-Debug.xcconfig","buck-out/gen/submodules/ContactsPeerItem/ContactsPeerItem-Profile.xcconfig","buck-out/gen/submodules/ContactsPeerItem/ContactsPeerItem-Release.xcconfig","buck-out/gen/submodules/ContextUI/ContextUI-Debug.xcconfig","buck-out/gen/submodules/ContextUI/ContextUI-Profile.xcconfig","buck-out/gen/submodules/ContextUI/ContextUI-Release.xcconfig","buck-out/gen/submodules/CounterContollerTitleView/CounterContollerTitleView-Debug.xcconfig","buck-out/gen/submodules/CounterContollerTitleView/CounterContollerTitleView-Profile.xcconfig","buck-out/gen/submodules/CounterContollerTitleView/CounterContollerTitleView-Release.xcconfig","buck-out/gen/submodules/CountrySelectionUI/CountrySelectionUI-Debug.xcconfig","buck-out/gen/submodules/CountrySelectionUI/CountrySelectionUI-Profile.xcconfig","buck-out/gen/submodules/CountrySelectionUI/CountrySelectionUI-Release.xcconfig","buck-out/gen/submodules/Crc32/Crc32-Debug.xcconfig","buck-out/gen/submodules/Crc32/Crc32-Profile.xcconfig","buck-out/gen/submodules/Crc32/Crc32-Release.xcconfig","buck-out/gen/submodules/DateSelectionUI/DateSelectionUI-Debug.xcconfig","buck-out/gen/submodules/DateSelectionUI/DateSelectionUI-Profile.xcconfig","buck-out/gen/submodules/DateSelectionUI/DateSelectionUI-Release.xcconfig","buck-out/gen/submodules/DeleteChatPeerActionSheetItem/DeleteChatPeerActionSheetItem-Debug.xcconfig","buck-out/gen/submodules/DeleteChatPeerActionSheetItem/DeleteChatPeerActionSheetItem-Profile.xcconfig","buck-out/gen/submodules/DeleteChatPeerActionSheetItem/DeleteChatPeerActionSheetItem-Release.xcconfig","buck-out/gen/submodules/DeviceAccess/DeviceAccess-Debug.xcconfig","buck-out/gen/submodules/DeviceAccess/DeviceAccess-Profile.xcconfig","buck-out/gen/submodules/DeviceAccess/DeviceAccess-Release.xcconfig","buck-out/gen/submodules/DeviceLocationManager/DeviceLocationManager-Debug.xcconfig","buck-out/gen/submodules/DeviceLocationManager/DeviceLocationManager-Profile.xcconfig","buck-out/gen/submodules/DeviceLocationManager/DeviceLocationManager-Release.xcconfig","buck-out/gen/submodules/DeviceProximity/DeviceProximity-Debug.xcconfig","buck-out/gen/submodules/DeviceProximity/DeviceProximity-Profile.xcconfig","buck-out/gen/submodules/DeviceProximity/DeviceProximity-Release.xcconfig","buck-out/gen/submodules/DirectionalPanGesture/DirectionalPanGesture-Debug.xcconfig","buck-out/gen/submodules/DirectionalPanGesture/DirectionalPanGesture-Profile.xcconfig","buck-out/gen/submodules/DirectionalPanGesture/DirectionalPanGesture-Release.xcconfig","buck-out/gen/submodules/Display/Display#shared-Debug.xcconfig","buck-out/gen/submodules/Display/Display#shared-Profile.xcconfig","buck-out/gen/submodules/Display/Display#shared-Release.xcconfig","buck-out/gen/submodules/Emoji/Emoji-Debug.xcconfig","buck-out/gen/submodules/Emoji/Emoji-Profile.xcconfig","buck-out/gen/submodules/Emoji/Emoji-Release.xcconfig","buck-out/gen/submodules/EncryptionKeyVisualization/EncryptionKeyVisualization-Debug.xcconfig","buck-out/gen/submodules/EncryptionKeyVisualization/EncryptionKeyVisualization-Profile.xcconfig","buck-out/gen/submodules/EncryptionKeyVisualization/EncryptionKeyVisualization-Release.xcconfig","buck-out/gen/submodules/FFMpeg/FFMpeg-Debug.xcconfig","buck-out/gen/submodules/FFMpeg/FFMpeg-Profile.xcconfig","buck-out/gen/submodules/FFMpeg/FFMpeg-Release.xcconfig","buck-out/gen/submodules/FFMpeg/libffmpeg-Debug.xcconfig","buck-out/gen/submodules/FFMpeg/libffmpeg-Profile.xcconfig","buck-out/gen/submodules/FFMpeg/libffmpeg-Release.xcconfig","buck-out/gen/submodules/GZip/GZip-Debug.xcconfig","buck-out/gen/submodules/GZip/GZip-Profile.xcconfig","buck-out/gen/submodules/GZip/GZip-Release.xcconfig","buck-out/gen/submodules/GalleryUI/GalleryUI-Debug.xcconfig","buck-out/gen/submodules/GalleryUI/GalleryUI-Profile.xcconfig","buck-out/gen/submodules/GalleryUI/GalleryUI-Release.xcconfig","buck-out/gen/submodules/GameUI/GameUI-Debug.xcconfig","buck-out/gen/submodules/GameUI/GameUI-Profile.xcconfig","buck-out/gen/submodules/GameUI/GameUI-Release.xcconfig","buck-out/gen/submodules/Geocoding/Geocoding-Debug.xcconfig","buck-out/gen/submodules/Geocoding/Geocoding-Profile.xcconfig","buck-out/gen/submodules/Geocoding/Geocoding-Release.xcconfig","buck-out/gen/submodules/GridMessageSelectionNode/GridMessageSelectionNode-Debug.xcconfig","buck-out/gen/submodules/GridMessageSelectionNode/GridMessageSelectionNode-Profile.xcconfig","buck-out/gen/submodules/GridMessageSelectionNode/GridMessageSelectionNode-Release.xcconfig","buck-out/gen/submodules/HashtagSearchUI/HashtagSearchUI-Debug.xcconfig","buck-out/gen/submodules/HashtagSearchUI/HashtagSearchUI-Profile.xcconfig","buck-out/gen/submodules/HashtagSearchUI/HashtagSearchUI-Release.xcconfig","buck-out/gen/submodules/HexColor/HexColor-Debug.xcconfig","buck-out/gen/submodules/HexColor/HexColor-Profile.xcconfig","buck-out/gen/submodules/HexColor/HexColor-Release.xcconfig","buck-out/gen/submodules/HockeySDK-iOS/HockeySDK-Debug.xcconfig","buck-out/gen/submodules/HockeySDK-iOS/HockeySDK-Profile.xcconfig","buck-out/gen/submodules/HockeySDK-iOS/HockeySDK-Release.xcconfig","buck-out/gen/submodules/HorizontalPeerItem/HorizontalPeerItem-Debug.xcconfig","buck-out/gen/submodules/HorizontalPeerItem/HorizontalPeerItem-Profile.xcconfig","buck-out/gen/submodules/HorizontalPeerItem/HorizontalPeerItem-Release.xcconfig","buck-out/gen/submodules/ImageBlur/ImageBlur-Debug.xcconfig","buck-out/gen/submodules/ImageBlur/ImageBlur-Profile.xcconfig","buck-out/gen/submodules/ImageBlur/ImageBlur-Release.xcconfig","buck-out/gen/submodules/ImageCompression/ImageCompression-Debug.xcconfig","buck-out/gen/submodules/ImageCompression/ImageCompression-Profile.xcconfig","buck-out/gen/submodules/ImageCompression/ImageCompression-Release.xcconfig","buck-out/gen/submodules/ImageTransparency/ImageTransparency-Debug.xcconfig","buck-out/gen/submodules/ImageTransparency/ImageTransparency-Profile.xcconfig","buck-out/gen/submodules/ImageTransparency/ImageTransparency-Release.xcconfig","buck-out/gen/submodules/InstantPageCache/InstantPageCache-Debug.xcconfig","buck-out/gen/submodules/InstantPageCache/InstantPageCache-Profile.xcconfig","buck-out/gen/submodules/InstantPageCache/InstantPageCache-Release.xcconfig","buck-out/gen/submodules/InstantPageUI/InstantPageUI-Debug.xcconfig","buck-out/gen/submodules/InstantPageUI/InstantPageUI-Profile.xcconfig","buck-out/gen/submodules/InstantPageUI/InstantPageUI-Release.xcconfig","buck-out/gen/submodules/ItemListAddressItem/ItemListAddressItem-Debug.xcconfig","buck-out/gen/submodules/ItemListAddressItem/ItemListAddressItem-Profile.xcconfig","buck-out/gen/submodules/ItemListAddressItem/ItemListAddressItem-Release.xcconfig","buck-out/gen/submodules/ItemListAvatarAndNameInfoItem/ItemListAvatarAndNameInfoItem-Debug.xcconfig","buck-out/gen/submodules/ItemListAvatarAndNameInfoItem/ItemListAvatarAndNameInfoItem-Profile.xcconfig","buck-out/gen/submodules/ItemListAvatarAndNameInfoItem/ItemListAvatarAndNameInfoItem-Release.xcconfig","buck-out/gen/submodules/ItemListPeerActionItem/ItemListPeerActionItem-Debug.xcconfig","buck-out/gen/submodules/ItemListPeerActionItem/ItemListPeerActionItem-Profile.xcconfig","buck-out/gen/submodules/ItemListPeerActionItem/ItemListPeerActionItem-Release.xcconfig","buck-out/gen/submodules/ItemListPeerItem/ItemListPeerItem-Debug.xcconfig","buck-out/gen/submodules/ItemListPeerItem/ItemListPeerItem-Profile.xcconfig","buck-out/gen/submodules/ItemListPeerItem/ItemListPeerItem-Release.xcconfig","buck-out/gen/submodules/ItemListStickerPackItem/ItemListStickerPackItem-Debug.xcconfig","buck-out/gen/submodules/ItemListStickerPackItem/ItemListStickerPackItem-Profile.xcconfig","buck-out/gen/submodules/ItemListStickerPackItem/ItemListStickerPackItem-Release.xcconfig","buck-out/gen/submodules/ItemListUI/ItemListUI-Debug.xcconfig","buck-out/gen/submodules/ItemListUI/ItemListUI-Profile.xcconfig","buck-out/gen/submodules/ItemListUI/ItemListUI-Release.xcconfig","buck-out/gen/submodules/JoinLinkPreviewUI/JoinLinkPreviewUI-Debug.xcconfig","buck-out/gen/submodules/JoinLinkPreviewUI/JoinLinkPreviewUI-Profile.xcconfig","buck-out/gen/submodules/JoinLinkPreviewUI/JoinLinkPreviewUI-Release.xcconfig","buck-out/gen/submodules/LanguageLinkPreviewUI/LanguageLinkPreviewUI-Debug.xcconfig","buck-out/gen/submodules/LanguageLinkPreviewUI/LanguageLinkPreviewUI-Profile.xcconfig","buck-out/gen/submodules/LanguageLinkPreviewUI/LanguageLinkPreviewUI-Release.xcconfig","buck-out/gen/submodules/LanguageSuggestionUI/LanguageSuggestionUI-Debug.xcconfig","buck-out/gen/submodules/LanguageSuggestionUI/LanguageSuggestionUI-Profile.xcconfig","buck-out/gen/submodules/LanguageSuggestionUI/LanguageSuggestionUI-Release.xcconfig","buck-out/gen/submodules/LegacyComponents/LegacyComponents-Debug.xcconfig","buck-out/gen/submodules/LegacyComponents/LegacyComponents-Profile.xcconfig","buck-out/gen/submodules/LegacyComponents/LegacyComponents-Release.xcconfig","buck-out/gen/submodules/LegacyDataImport/LegacyDataImport-Debug.xcconfig","buck-out/gen/submodules/LegacyDataImport/LegacyDataImport-Profile.xcconfig","buck-out/gen/submodules/LegacyDataImport/LegacyDataImport-Release.xcconfig","buck-out/gen/submodules/LegacyMediaPickerUI/LegacyMediaPickerUI-Debug.xcconfig","buck-out/gen/submodules/LegacyMediaPickerUI/LegacyMediaPickerUI-Profile.xcconfig","buck-out/gen/submodules/LegacyMediaPickerUI/LegacyMediaPickerUI-Release.xcconfig","buck-out/gen/submodules/LegacyUI/LegacyUI-Debug.xcconfig","buck-out/gen/submodules/LegacyUI/LegacyUI-Profile.xcconfig","buck-out/gen/submodules/LegacyUI/LegacyUI-Release.xcconfig","buck-out/gen/submodules/LightweightAccountData/LightweightAccountData-Debug.xcconfig","buck-out/gen/submodules/LightweightAccountData/LightweightAccountData-Profile.xcconfig","buck-out/gen/submodules/LightweightAccountData/LightweightAccountData-Release.xcconfig","buck-out/gen/submodules/ListSectionHeaderNode/ListSectionHeaderNode-Debug.xcconfig","buck-out/gen/submodules/ListSectionHeaderNode/ListSectionHeaderNode-Profile.xcconfig","buck-out/gen/submodules/ListSectionHeaderNode/ListSectionHeaderNode-Release.xcconfig","buck-out/gen/submodules/LiveLocationManager/LiveLocationManager-Debug.xcconfig","buck-out/gen/submodules/LiveLocationManager/LiveLocationManager-Profile.xcconfig","buck-out/gen/submodules/LiveLocationManager/LiveLocationManager-Release.xcconfig","buck-out/gen/submodules/LiveLocationPositionNode/LiveLocationPositionNode-Debug.xcconfig","buck-out/gen/submodules/LiveLocationPositionNode/LiveLocationPositionNode-Profile.xcconfig","buck-out/gen/submodules/LiveLocationPositionNode/LiveLocationPositionNode-Release.xcconfig","buck-out/gen/submodules/LiveLocationTimerNode/LiveLocationTimerNode-Debug.xcconfig","buck-out/gen/submodules/LiveLocationTimerNode/LiveLocationTimerNode-Profile.xcconfig","buck-out/gen/submodules/LiveLocationTimerNode/LiveLocationTimerNode-Release.xcconfig","buck-out/gen/submodules/LocalAuth/LocalAuth-Debug.xcconfig","buck-out/gen/submodules/LocalAuth/LocalAuth-Profile.xcconfig","buck-out/gen/submodules/LocalAuth/LocalAuth-Release.xcconfig","buck-out/gen/submodules/LocalMediaResources/LocalMediaResources-Debug.xcconfig","buck-out/gen/submodules/LocalMediaResources/LocalMediaResources-Profile.xcconfig","buck-out/gen/submodules/LocalMediaResources/LocalMediaResources-Release.xcconfig","buck-out/gen/submodules/LocalizedPeerData/LocalizedPeerData-Debug.xcconfig","buck-out/gen/submodules/LocalizedPeerData/LocalizedPeerData-Profile.xcconfig","buck-out/gen/submodules/LocalizedPeerData/LocalizedPeerData-Release.xcconfig","buck-out/gen/submodules/LocationUI/LocationUI-Debug.xcconfig","buck-out/gen/submodules/LocationUI/LocationUI-Profile.xcconfig","buck-out/gen/submodules/LocationUI/LocationUI-Release.xcconfig","buck-out/gen/submodules/MapResourceToAvatarSizes/MapResourceToAvatarSizes-Debug.xcconfig","buck-out/gen/submodules/MapResourceToAvatarSizes/MapResourceToAvatarSizes-Profile.xcconfig","buck-out/gen/submodules/MapResourceToAvatarSizes/MapResourceToAvatarSizes-Release.xcconfig","buck-out/gen/submodules/MediaPlayer/UniversalMediaPlayer-Debug.xcconfig","buck-out/gen/submodules/MediaPlayer/UniversalMediaPlayer-Profile.xcconfig","buck-out/gen/submodules/MediaPlayer/UniversalMediaPlayer-Release.xcconfig","buck-out/gen/submodules/MediaResources/MediaResources-Debug.xcconfig","buck-out/gen/submodules/MediaResources/MediaResources-Profile.xcconfig","buck-out/gen/submodules/MediaResources/MediaResources-Release.xcconfig","buck-out/gen/submodules/MergeLists/MergeLists-Debug.xcconfig","buck-out/gen/submodules/MergeLists/MergeLists-Profile.xcconfig","buck-out/gen/submodules/MergeLists/MergeLists-Release.xcconfig","buck-out/gen/submodules/MessageReactionListUI/MessageReactionListUI-Debug.xcconfig","buck-out/gen/submodules/MessageReactionListUI/MessageReactionListUI-Profile.xcconfig","buck-out/gen/submodules/MessageReactionListUI/MessageReactionListUI-Release.xcconfig","buck-out/gen/submodules/MimeTypes/MimeTypes-Debug.xcconfig","buck-out/gen/submodules/MimeTypes/MimeTypes-Profile.xcconfig","buck-out/gen/submodules/MimeTypes/MimeTypes-Release.xcconfig","buck-out/gen/submodules/MosaicLayout/MosaicLayout-Debug.xcconfig","buck-out/gen/submodules/MosaicLayout/MosaicLayout-Profile.xcconfig","buck-out/gen/submodules/MosaicLayout/MosaicLayout-Release.xcconfig","buck-out/gen/submodules/MtProtoKit/MtProtoKit#shared-Debug.xcconfig","buck-out/gen/submodules/MtProtoKit/MtProtoKit#shared-Profile.xcconfig","buck-out/gen/submodules/MtProtoKit/MtProtoKit#shared-Release.xcconfig","buck-out/gen/submodules/MtProtoKit/openssl-Debug.xcconfig","buck-out/gen/submodules/MtProtoKit/openssl-Profile.xcconfig","buck-out/gen/submodules/MtProtoKit/openssl-Release.xcconfig","buck-out/gen/submodules/MtProtoKit/ton-Debug.xcconfig","buck-out/gen/submodules/MtProtoKit/ton-Profile.xcconfig","buck-out/gen/submodules/MtProtoKit/ton-Release.xcconfig","buck-out/gen/submodules/MusicAlbumArtResources/MusicAlbumArtResources-Debug.xcconfig","buck-out/gen/submodules/MusicAlbumArtResources/MusicAlbumArtResources-Profile.xcconfig","buck-out/gen/submodules/MusicAlbumArtResources/MusicAlbumArtResources-Release.xcconfig","buck-out/gen/submodules/NotificationMuteSettingsUI/NotificationMuteSettingsUI-Debug.xcconfig","buck-out/gen/submodules/NotificationMuteSettingsUI/NotificationMuteSettingsUI-Profile.xcconfig","buck-out/gen/submodules/NotificationMuteSettingsUI/NotificationMuteSettingsUI-Release.xcconfig","buck-out/gen/submodules/NotificationSoundSelectionUI/NotificationSoundSelectionUI-Debug.xcconfig","buck-out/gen/submodules/NotificationSoundSelectionUI/NotificationSoundSelectionUI-Profile.xcconfig","buck-out/gen/submodules/NotificationSoundSelectionUI/NotificationSoundSelectionUI-Release.xcconfig","buck-out/gen/submodules/OpenInExternalAppUI/OpenInExternalAppUI-Debug.xcconfig","buck-out/gen/submodules/OpenInExternalAppUI/OpenInExternalAppUI-Profile.xcconfig","buck-out/gen/submodules/OpenInExternalAppUI/OpenInExternalAppUI-Release.xcconfig","buck-out/gen/submodules/Opus/opus-Debug.xcconfig","buck-out/gen/submodules/Opus/opus-Profile.xcconfig","buck-out/gen/submodules/Opus/opus-Release.xcconfig","buck-out/gen/submodules/Opus/opus_lib-Debug.xcconfig","buck-out/gen/submodules/Opus/opus_lib-Profile.xcconfig","buck-out/gen/submodules/Opus/opus_lib-Release.xcconfig","buck-out/gen/submodules/OpusBinding/OpusBinding-Debug.xcconfig","buck-out/gen/submodules/OpusBinding/OpusBinding-Profile.xcconfig","buck-out/gen/submodules/OpusBinding/OpusBinding-Release.xcconfig","buck-out/gen/submodules/OverlayStatusController/OverlayStatusController-Debug.xcconfig","buck-out/gen/submodules/OverlayStatusController/OverlayStatusController-Profile.xcconfig","buck-out/gen/submodules/OverlayStatusController/OverlayStatusController-Release.xcconfig","buck-out/gen/submodules/PasscodeUI/PasscodeUI-Debug.xcconfig","buck-out/gen/submodules/PasscodeUI/PasscodeUI-Profile.xcconfig","buck-out/gen/submodules/PasscodeUI/PasscodeUI-Release.xcconfig","buck-out/gen/submodules/PassportUI/PassportUI-Debug.xcconfig","buck-out/gen/submodules/PassportUI/PassportUI-Profile.xcconfig","buck-out/gen/submodules/PassportUI/PassportUI-Release.xcconfig","buck-out/gen/submodules/PasswordSetupUI/PasswordSetupUI-Debug.xcconfig","buck-out/gen/submodules/PasswordSetupUI/PasswordSetupUI-Profile.xcconfig","buck-out/gen/submodules/PasswordSetupUI/PasswordSetupUI-Release.xcconfig","buck-out/gen/submodules/Pdf/Pdf-Debug.xcconfig","buck-out/gen/submodules/Pdf/Pdf-Profile.xcconfig","buck-out/gen/submodules/Pdf/Pdf-Release.xcconfig","buck-out/gen/submodules/PeerAvatarGalleryUI/PeerAvatarGalleryUI-Debug.xcconfig","buck-out/gen/submodules/PeerAvatarGalleryUI/PeerAvatarGalleryUI-Profile.xcconfig","buck-out/gen/submodules/PeerAvatarGalleryUI/PeerAvatarGalleryUI-Release.xcconfig","buck-out/gen/submodules/PeerInfoUI/PeerInfoUI-Debug.xcconfig","buck-out/gen/submodules/PeerInfoUI/PeerInfoUI-Profile.xcconfig","buck-out/gen/submodules/PeerInfoUI/PeerInfoUI-Release.xcconfig","buck-out/gen/submodules/PeerOnlineMarkerNode/PeerOnlineMarkerNode-Debug.xcconfig","buck-out/gen/submodules/PeerOnlineMarkerNode/PeerOnlineMarkerNode-Profile.xcconfig","buck-out/gen/submodules/PeerOnlineMarkerNode/PeerOnlineMarkerNode-Release.xcconfig","buck-out/gen/submodules/PeerPresenceStatusManager/PeerPresenceStatusManager-Debug.xcconfig","buck-out/gen/submodules/PeerPresenceStatusManager/PeerPresenceStatusManager-Profile.xcconfig","buck-out/gen/submodules/PeerPresenceStatusManager/PeerPresenceStatusManager-Release.xcconfig","buck-out/gen/submodules/PeersNearbyIconNode/PeersNearbyIconNode-Debug.xcconfig","buck-out/gen/submodules/PeersNearbyIconNode/PeersNearbyIconNode-Profile.xcconfig","buck-out/gen/submodules/PeersNearbyIconNode/PeersNearbyIconNode-Release.xcconfig","buck-out/gen/submodules/PeersNearbyUI/PeersNearbyUI-Debug.xcconfig","buck-out/gen/submodules/PeersNearbyUI/PeersNearbyUI-Profile.xcconfig","buck-out/gen/submodules/PeersNearbyUI/PeersNearbyUI-Release.xcconfig","buck-out/gen/submodules/PersistentStringHash/PersistentStringHash-Debug.xcconfig","buck-out/gen/submodules/PersistentStringHash/PersistentStringHash-Profile.xcconfig","buck-out/gen/submodules/PersistentStringHash/PersistentStringHash-Release.xcconfig","buck-out/gen/submodules/PhoneInputNode/PhoneInputNode-Debug.xcconfig","buck-out/gen/submodules/PhoneInputNode/PhoneInputNode-Profile.xcconfig","buck-out/gen/submodules/PhoneInputNode/PhoneInputNode-Release.xcconfig","buck-out/gen/submodules/PhotoResources/PhotoResources-Debug.xcconfig","buck-out/gen/submodules/PhotoResources/PhotoResources-Profile.xcconfig","buck-out/gen/submodules/PhotoResources/PhotoResources-Release.xcconfig","buck-out/gen/submodules/PlatformRestrictionMatching/PlatformRestrictionMatching-Debug.xcconfig","buck-out/gen/submodules/PlatformRestrictionMatching/PlatformRestrictionMatching-Profile.xcconfig","buck-out/gen/submodules/PlatformRestrictionMatching/PlatformRestrictionMatching-Release.xcconfig","buck-out/gen/submodules/Postbox/Postbox#shared-Debug.xcconfig","buck-out/gen/submodules/Postbox/Postbox#shared-Profile.xcconfig","buck-out/gen/submodules/Postbox/Postbox#shared-Release.xcconfig","buck-out/gen/submodules/ProgressNavigationButtonNode/ProgressNavigationButtonNode-Debug.xcconfig","buck-out/gen/submodules/ProgressNavigationButtonNode/ProgressNavigationButtonNode-Profile.xcconfig","buck-out/gen/submodules/ProgressNavigationButtonNode/ProgressNavigationButtonNode-Release.xcconfig","buck-out/gen/submodules/QrCode/QrCode-Debug.xcconfig","buck-out/gen/submodules/QrCode/QrCode-Profile.xcconfig","buck-out/gen/submodules/QrCode/QrCode-Release.xcconfig","buck-out/gen/submodules/RMIntro/RMIntro-Debug.xcconfig","buck-out/gen/submodules/RMIntro/RMIntro-Profile.xcconfig","buck-out/gen/submodules/RMIntro/RMIntro-Release.xcconfig","buck-out/gen/submodules/RadialStatusNode/RadialStatusNode-Debug.xcconfig","buck-out/gen/submodules/RadialStatusNode/RadialStatusNode-Profile.xcconfig","buck-out/gen/submodules/RadialStatusNode/RadialStatusNode-Release.xcconfig","buck-out/gen/submodules/RaiseToListen/RaiseToListen-Debug.xcconfig","buck-out/gen/submodules/RaiseToListen/RaiseToListen-Profile.xcconfig","buck-out/gen/submodules/RaiseToListen/RaiseToListen-Release.xcconfig","buck-out/gen/submodules/ReactionSelectionNode/ReactionSelectionNode-Debug.xcconfig","buck-out/gen/submodules/ReactionSelectionNode/ReactionSelectionNode-Profile.xcconfig","buck-out/gen/submodules/ReactionSelectionNode/ReactionSelectionNode-Release.xcconfig","buck-out/gen/submodules/SSignalKit/SSignalKit/SSignalKit-Debug.xcconfig","buck-out/gen/submodules/SSignalKit/SSignalKit/SSignalKit-Profile.xcconfig","buck-out/gen/submodules/SSignalKit/SSignalKit/SSignalKit-Release.xcconfig","buck-out/gen/submodules/SSignalKit/SwiftSignalKit/SwiftSignalKit#shared-Debug.xcconfig","buck-out/gen/submodules/SSignalKit/SwiftSignalKit/SwiftSignalKit#shared-Profile.xcconfig","buck-out/gen/submodules/SSignalKit/SwiftSignalKit/SwiftSignalKit#shared-Release.xcconfig","buck-out/gen/submodules/SaveToCameraRoll/SaveToCameraRoll-Debug.xcconfig","buck-out/gen/submodules/SaveToCameraRoll/SaveToCameraRoll-Profile.xcconfig","buck-out/gen/submodules/SaveToCameraRoll/SaveToCameraRoll-Release.xcconfig","buck-out/gen/submodules/ScreenCaptureDetection/ScreenCaptureDetection-Debug.xcconfig","buck-out/gen/submodules/ScreenCaptureDetection/ScreenCaptureDetection-Profile.xcconfig","buck-out/gen/submodules/ScreenCaptureDetection/ScreenCaptureDetection-Release.xcconfig","buck-out/gen/submodules/SearchBarNode/SearchBarNode-Debug.xcconfig","buck-out/gen/submodules/SearchBarNode/SearchBarNode-Profile.xcconfig","buck-out/gen/submodules/SearchBarNode/SearchBarNode-Release.xcconfig","buck-out/gen/submodules/SearchUI/SearchUI-Debug.xcconfig","buck-out/gen/submodules/SearchUI/SearchUI-Profile.xcconfig","buck-out/gen/submodules/SearchUI/SearchUI-Release.xcconfig","buck-out/gen/submodules/SegmentedControlNode/SegmentedControlNode-Debug.xcconfig","buck-out/gen/submodules/SegmentedControlNode/SegmentedControlNode-Profile.xcconfig","buck-out/gen/submodules/SegmentedControlNode/SegmentedControlNode-Release.xcconfig","buck-out/gen/submodules/SelectablePeerNode/SelectablePeerNode-Debug.xcconfig","buck-out/gen/submodules/SelectablePeerNode/SelectablePeerNode-Profile.xcconfig","buck-out/gen/submodules/SelectablePeerNode/SelectablePeerNode-Release.xcconfig","buck-out/gen/submodules/SettingsUI/SettingsUI-Debug.xcconfig","buck-out/gen/submodules/SettingsUI/SettingsUI-Profile.xcconfig","buck-out/gen/submodules/SettingsUI/SettingsUI-Release.xcconfig","buck-out/gen/submodules/ShareController/ShareController-Debug.xcconfig","buck-out/gen/submodules/ShareController/ShareController-Profile.xcconfig","buck-out/gen/submodules/ShareController/ShareController-Release.xcconfig","buck-out/gen/submodules/ShareItems/ShareItems-Debug.xcconfig","buck-out/gen/submodules/ShareItems/ShareItems-Profile.xcconfig","buck-out/gen/submodules/ShareItems/ShareItems-Release.xcconfig","buck-out/gen/submodules/SinglePhoneInputNode/SinglePhoneInputNode-Debug.xcconfig","buck-out/gen/submodules/SinglePhoneInputNode/SinglePhoneInputNode-Profile.xcconfig","buck-out/gen/submodules/SinglePhoneInputNode/SinglePhoneInputNode-Release.xcconfig","buck-out/gen/submodules/SolidRoundedButtonNode/SolidRoundedButtonNode-Debug.xcconfig","buck-out/gen/submodules/SolidRoundedButtonNode/SolidRoundedButtonNode-Profile.xcconfig","buck-out/gen/submodules/SolidRoundedButtonNode/SolidRoundedButtonNode-Release.xcconfig","buck-out/gen/submodules/StickerPackPreviewUI/StickerPackPreviewUI-Debug.xcconfig","buck-out/gen/submodules/StickerPackPreviewUI/StickerPackPreviewUI-Profile.xcconfig","buck-out/gen/submodules/StickerPackPreviewUI/StickerPackPreviewUI-Release.xcconfig","buck-out/gen/submodules/StickerResources/StickerResources-Debug.xcconfig","buck-out/gen/submodules/StickerResources/StickerResources-Profile.xcconfig","buck-out/gen/submodules/StickerResources/StickerResources-Release.xcconfig","buck-out/gen/submodules/Stripe/Stripe-Debug.xcconfig","buck-out/gen/submodules/Stripe/Stripe-Profile.xcconfig","buck-out/gen/submodules/Stripe/Stripe-Release.xcconfig","buck-out/gen/submodules/SwipeToDismissGesture/SwipeToDismissGesture-Debug.xcconfig","buck-out/gen/submodules/SwipeToDismissGesture/SwipeToDismissGesture-Profile.xcconfig","buck-out/gen/submodules/SwipeToDismissGesture/SwipeToDismissGesture-Release.xcconfig","buck-out/gen/submodules/SwitchNode/SwitchNode-Debug.xcconfig","buck-out/gen/submodules/SwitchNode/SwitchNode-Profile.xcconfig","buck-out/gen/submodules/SwitchNode/SwitchNode-Release.xcconfig","buck-out/gen/submodules/TelegramApi/TelegramApi-Debug.xcconfig","buck-out/gen/submodules/TelegramApi/TelegramApi-Profile.xcconfig","buck-out/gen/submodules/TelegramApi/TelegramApi-Release.xcconfig","buck-out/gen/submodules/TelegramAudio/TelegramAudio-Debug.xcconfig","buck-out/gen/submodules/TelegramAudio/TelegramAudio-Profile.xcconfig","buck-out/gen/submodules/TelegramAudio/TelegramAudio-Release.xcconfig","buck-out/gen/submodules/TelegramBaseController/TelegramBaseController-Debug.xcconfig","buck-out/gen/submodules/TelegramBaseController/TelegramBaseController-Profile.xcconfig","buck-out/gen/submodules/TelegramBaseController/TelegramBaseController-Release.xcconfig","buck-out/gen/submodules/TelegramCallsUI/TelegramCallsUI-Debug.xcconfig","buck-out/gen/submodules/TelegramCallsUI/TelegramCallsUI-Profile.xcconfig","buck-out/gen/submodules/TelegramCallsUI/TelegramCallsUI-Release.xcconfig","buck-out/gen/submodules/TelegramCore/TelegramCore#shared-Debug.xcconfig","buck-out/gen/submodules/TelegramCore/TelegramCore#shared-Profile.xcconfig","buck-out/gen/submodules/TelegramCore/TelegramCore#shared-Release.xcconfig","buck-out/gen/submodules/TelegramNotices/TelegramNotices-Debug.xcconfig","buck-out/gen/submodules/TelegramNotices/TelegramNotices-Profile.xcconfig","buck-out/gen/submodules/TelegramNotices/TelegramNotices-Release.xcconfig","buck-out/gen/submodules/TelegramPermissions/TelegramPermissions-Debug.xcconfig","buck-out/gen/submodules/TelegramPermissions/TelegramPermissions-Profile.xcconfig","buck-out/gen/submodules/TelegramPermissions/TelegramPermissions-Release.xcconfig","buck-out/gen/submodules/TelegramPermissionsUI/TelegramPermissionsUI-Debug.xcconfig","buck-out/gen/submodules/TelegramPermissionsUI/TelegramPermissionsUI-Profile.xcconfig","buck-out/gen/submodules/TelegramPermissionsUI/TelegramPermissionsUI-Release.xcconfig","buck-out/gen/submodules/TelegramPresentationData/TelegramPresentationData-Debug.xcconfig","buck-out/gen/submodules/TelegramPresentationData/TelegramPresentationData-Profile.xcconfig","buck-out/gen/submodules/TelegramPresentationData/TelegramPresentationData-Release.xcconfig","buck-out/gen/submodules/TelegramStringFormatting/TelegramStringFormatting-Debug.xcconfig","buck-out/gen/submodules/TelegramStringFormatting/TelegramStringFormatting-Profile.xcconfig","buck-out/gen/submodules/TelegramStringFormatting/TelegramStringFormatting-Release.xcconfig","buck-out/gen/submodules/TelegramUI/TelegramUI#shared-Debug.xcconfig","buck-out/gen/submodules/TelegramUI/TelegramUI#shared-Profile.xcconfig","buck-out/gen/submodules/TelegramUI/TelegramUI#shared-Release.xcconfig","buck-out/gen/submodules/TelegramUIPreferences/TelegramUIPreferences-Debug.xcconfig","buck-out/gen/submodules/TelegramUIPreferences/TelegramUIPreferences-Profile.xcconfig","buck-out/gen/submodules/TelegramUIPreferences/TelegramUIPreferences-Release.xcconfig","buck-out/gen/submodules/TelegramUniversalVideoContent/TelegramUniversalVideoContent-Debug.xcconfig","buck-out/gen/submodules/TelegramUniversalVideoContent/TelegramUniversalVideoContent-Profile.xcconfig","buck-out/gen/submodules/TelegramUniversalVideoContent/TelegramUniversalVideoContent-Release.xcconfig","buck-out/gen/submodules/TelegramUpdateUI/TelegramUpdateUI-Debug.xcconfig","buck-out/gen/submodules/TelegramUpdateUI/TelegramUpdateUI-Profile.xcconfig","buck-out/gen/submodules/TelegramUpdateUI/TelegramUpdateUI-Release.xcconfig","buck-out/gen/submodules/TelegramVoip/TelegramVoip-Debug.xcconfig","buck-out/gen/submodules/TelegramVoip/TelegramVoip-Profile.xcconfig","buck-out/gen/submodules/TelegramVoip/TelegramVoip-Release.xcconfig","buck-out/gen/submodules/TemporaryCachedPeerDataManager/TemporaryCachedPeerDataManager-Debug.xcconfig","buck-out/gen/submodules/TemporaryCachedPeerDataManager/TemporaryCachedPeerDataManager-Profile.xcconfig","buck-out/gen/submodules/TemporaryCachedPeerDataManager/TemporaryCachedPeerDataManager-Release.xcconfig","buck-out/gen/submodules/TextFormat/TextFormat-Debug.xcconfig","buck-out/gen/submodules/TextFormat/TextFormat-Profile.xcconfig","buck-out/gen/submodules/TextFormat/TextFormat-Release.xcconfig","buck-out/gen/submodules/TextSelectionNode/TextSelectionNode-Debug.xcconfig","buck-out/gen/submodules/TextSelectionNode/TextSelectionNode-Profile.xcconfig","buck-out/gen/submodules/TextSelectionNode/TextSelectionNode-Release.xcconfig","buck-out/gen/submodules/TinyThumbnail/TinyThumbnail-Debug.xcconfig","buck-out/gen/submodules/TinyThumbnail/TinyThumbnail-Profile.xcconfig","buck-out/gen/submodules/TinyThumbnail/TinyThumbnail-Release.xcconfig","buck-out/gen/submodules/TouchDownGesture/TouchDownGesture-Debug.xcconfig","buck-out/gen/submodules/TouchDownGesture/TouchDownGesture-Profile.xcconfig","buck-out/gen/submodules/TouchDownGesture/TouchDownGesture-Release.xcconfig","buck-out/gen/submodules/Tuples/Tuples-Debug.xcconfig","buck-out/gen/submodules/Tuples/Tuples-Profile.xcconfig","buck-out/gen/submodules/Tuples/Tuples-Release.xcconfig","buck-out/gen/submodules/UndoUI/UndoUI-Debug.xcconfig","buck-out/gen/submodules/UndoUI/UndoUI-Profile.xcconfig","buck-out/gen/submodules/UndoUI/UndoUI-Release.xcconfig","buck-out/gen/submodules/UrlEscaping/UrlEscaping-Debug.xcconfig","buck-out/gen/submodules/UrlEscaping/UrlEscaping-Profile.xcconfig","buck-out/gen/submodules/UrlEscaping/UrlEscaping-Release.xcconfig","buck-out/gen/submodules/UrlHandling/UrlHandling-Debug.xcconfig","buck-out/gen/submodules/UrlHandling/UrlHandling-Profile.xcconfig","buck-out/gen/submodules/UrlHandling/UrlHandling-Release.xcconfig","buck-out/gen/submodules/WalletUI/WalletUI-Debug.xcconfig","buck-out/gen/submodules/WalletUI/WalletUI-Profile.xcconfig","buck-out/gen/submodules/WalletUI/WalletUI-Release.xcconfig","buck-out/gen/submodules/WallpaperResources/WallpaperResources-Debug.xcconfig","buck-out/gen/submodules/WallpaperResources/WallpaperResources-Profile.xcconfig","buck-out/gen/submodules/WallpaperResources/WallpaperResources-Release.xcconfig","buck-out/gen/submodules/WatchBridge/WatchBridge-Debug.xcconfig","buck-out/gen/submodules/WatchBridge/WatchBridge-Profile.xcconfig","buck-out/gen/submodules/WatchBridge/WatchBridge-Release.xcconfig","buck-out/gen/submodules/WatchBridgeAudio/WatchBridgeAudio-Debug.xcconfig","buck-out/gen/submodules/WatchBridgeAudio/WatchBridgeAudio-Profile.xcconfig","buck-out/gen/submodules/WatchBridgeAudio/WatchBridgeAudio-Release.xcconfig","buck-out/gen/submodules/WatchCommon/Host/WatchCommon-Debug.xcconfig","buck-out/gen/submodules/WatchCommon/Host/WatchCommon-Profile.xcconfig","buck-out/gen/submodules/WatchCommon/Host/WatchCommon-Release.xcconfig","buck-out/gen/submodules/WebP/WebPImage-Debug.xcconfig","buck-out/gen/submodules/WebP/WebPImage-Profile.xcconfig","buck-out/gen/submodules/WebP/WebPImage-Release.xcconfig","buck-out/gen/submodules/WebP/WebP_lib-Debug.xcconfig","buck-out/gen/submodules/WebP/WebP_lib-Profile.xcconfig","buck-out/gen/submodules/WebP/WebP_lib-Release.xcconfig","buck-out/gen/submodules/WebSearchUI/WebSearchUI-Debug.xcconfig","buck-out/gen/submodules/WebSearchUI/WebSearchUI-Profile.xcconfig","buck-out/gen/submodules/WebSearchUI/WebSearchUI-Release.xcconfig","buck-out/gen/submodules/WebUI/WebUI-Debug.xcconfig","buck-out/gen/submodules/WebUI/WebUI-Profile.xcconfig","buck-out/gen/submodules/WebUI/WebUI-Release.xcconfig","buck-out/gen/submodules/WebsiteType/WebsiteType-Debug.xcconfig","buck-out/gen/submodules/WebsiteType/WebsiteType-Profile.xcconfig","buck-out/gen/submodules/WebsiteType/WebsiteType-Release.xcconfig","buck-out/gen/submodules/YuvConversion/YuvConversion-Debug.xcconfig","buck-out/gen/submodules/YuvConversion/YuvConversion-Profile.xcconfig","buck-out/gen/submodules/YuvConversion/YuvConversion-Release.xcconfig","buck-out/gen/submodules/libphonenumber/libphonenumber-Debug.xcconfig","buck-out/gen/submodules/libphonenumber/libphonenumber-Profile.xcconfig","buck-out/gen/submodules/libphonenumber/libphonenumber-Release.xcconfig","buck-out/gen/submodules/libtgvoip/libtgvoip-Debug.xcconfig","buck-out/gen/submodules/libtgvoip/libtgvoip-Profile.xcconfig","buck-out/gen/submodules/libtgvoip/libtgvoip-Release.xcconfig","buck-out/gen/submodules/lottie-ios/Lottie-Debug.xcconfig","buck-out/gen/submodules/lottie-ios/Lottie-Profile.xcconfig","buck-out/gen/submodules/lottie-ios/Lottie-Release.xcconfig","buck-out/gen/submodules/rlottie/RLottieBinding-Debug.xcconfig","buck-out/gen/submodules/rlottie/RLottieBinding-Profile.xcconfig","buck-out/gen/submodules/rlottie/RLottieBinding-Release.xcconfig","buck-out/gen/submodules/sqlcipher/sqlcipher-Debug.xcconfig","buck-out/gen/submodules/sqlcipher/sqlcipher-Profile.xcconfig","buck-out/gen/submodules/sqlcipher/sqlcipher-Release.xcconfig"],"copy-in-xcode":[]}
\ No newline at end of file
+{"required-targets":["//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_ac3_parser.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_adts_parser.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_avcodec.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_avdct.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_avfft.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_d3d11va.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_dirac.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_dv_profile.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_dxva2.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_jni.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_mediacodec.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_qsv.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_vaapi.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_vdpau.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_version.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_videotoolbox.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_vorbis_parser.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_xvmc.h","//submodules/FFMpeg:ffmpeg_header_libavformat_sub_avformat.h","//submodules/FFMpeg:ffmpeg_header_libavformat_sub_avio.h","//submodules/FFMpeg:ffmpeg_header_libavformat_sub_version.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_adler32.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_aes.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_aes_ctr.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_attributes.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_audio_fifo.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_avassert.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_avconfig.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_avstring.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_avutil.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_base64.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_blowfish.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_bprint.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_bswap.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_buffer.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_camellia.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_cast5.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_channel_layout.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_common.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_cpu.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_crc.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_des.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_dict.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_display.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_downmix_info.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_encryption_info.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_error.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_eval.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_ffversion.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_fifo.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_file.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_frame.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hash.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hmac.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_cuda.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_d3d11va.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_drm.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_dxva2.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_mediacodec.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_qsv.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_vaapi.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_vdpau.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_videotoolbox.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_imgutils.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_intfloat.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_intreadwrite.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_lfg.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_log.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_lzo.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_macros.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_mastering_display_metadata.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_mathematics.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_md5.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_mem.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_motion_vector.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_murmur3.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_opt.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_parseutils.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_pixdesc.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_pixelutils.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_pixfmt.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_random_seed.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_rational.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_rc4.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_replaygain.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_ripemd.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_samplefmt.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_sha.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_sha512.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_spherical.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_stereo3d.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_tea.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_threadmessage.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_time.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_timecode.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_timestamp.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_tree.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_twofish.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_version.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_xtea.h","//submodules/FFMpeg:ffmpeg_header_libswresample_sub_swresample.h","//submodules/FFMpeg:ffmpeg_header_libswresample_sub_version.h","//submodules/FFMpeg:libffmpeg_build","//submodules/Opus:opus_lib_file","//submodules/WebP:WebP_lib_file","//submodules/openssl:openssl_build_merged","//submodules/openssl:openssl_header_openssl_sub_aes.h","//submodules/openssl:openssl_header_openssl_sub_asn1.h","//submodules/openssl:openssl_header_openssl_sub_asn1_mac.h","//submodules/openssl:openssl_header_openssl_sub_asn1err.h","//submodules/openssl:openssl_header_openssl_sub_asn1t.h","//submodules/openssl:openssl_header_openssl_sub_async.h","//submodules/openssl:openssl_header_openssl_sub_asyncerr.h","//submodules/openssl:openssl_header_openssl_sub_bio.h","//submodules/openssl:openssl_header_openssl_sub_bioerr.h","//submodules/openssl:openssl_header_openssl_sub_blowfish.h","//submodules/openssl:openssl_header_openssl_sub_bn.h","//submodules/openssl:openssl_header_openssl_sub_bnerr.h","//submodules/openssl:openssl_header_openssl_sub_buffer.h","//submodules/openssl:openssl_header_openssl_sub_buffererr.h","//submodules/openssl:openssl_header_openssl_sub_camellia.h","//submodules/openssl:openssl_header_openssl_sub_cast.h","//submodules/openssl:openssl_header_openssl_sub_cmac.h","//submodules/openssl:openssl_header_openssl_sub_cms.h","//submodules/openssl:openssl_header_openssl_sub_cmserr.h","//submodules/openssl:openssl_header_openssl_sub_comp.h","//submodules/openssl:openssl_header_openssl_sub_comperr.h","//submodules/openssl:openssl_header_openssl_sub_conf.h","//submodules/openssl:openssl_header_openssl_sub_conf_api.h","//submodules/openssl:openssl_header_openssl_sub_conferr.h","//submodules/openssl:openssl_header_openssl_sub_crypto.h","//submodules/openssl:openssl_header_openssl_sub_cryptoerr.h","//submodules/openssl:openssl_header_openssl_sub_ct.h","//submodules/openssl:openssl_header_openssl_sub_cterr.h","//submodules/openssl:openssl_header_openssl_sub_des.h","//submodules/openssl:openssl_header_openssl_sub_dh.h","//submodules/openssl:openssl_header_openssl_sub_dherr.h","//submodules/openssl:openssl_header_openssl_sub_dsa.h","//submodules/openssl:openssl_header_openssl_sub_dsaerr.h","//submodules/openssl:openssl_header_openssl_sub_dtls1.h","//submodules/openssl:openssl_header_openssl_sub_e_os2.h","//submodules/openssl:openssl_header_openssl_sub_ebcdic.h","//submodules/openssl:openssl_header_openssl_sub_ec.h","//submodules/openssl:openssl_header_openssl_sub_ecdh.h","//submodules/openssl:openssl_header_openssl_sub_ecdsa.h","//submodules/openssl:openssl_header_openssl_sub_ecerr.h","//submodules/openssl:openssl_header_openssl_sub_engine.h","//submodules/openssl:openssl_header_openssl_sub_engineerr.h","//submodules/openssl:openssl_header_openssl_sub_err.h","//submodules/openssl:openssl_header_openssl_sub_evp.h","//submodules/openssl:openssl_header_openssl_sub_evperr.h","//submodules/openssl:openssl_header_openssl_sub_hmac.h","//submodules/openssl:openssl_header_openssl_sub_idea.h","//submodules/openssl:openssl_header_openssl_sub_kdf.h","//submodules/openssl:openssl_header_openssl_sub_kdferr.h","//submodules/openssl:openssl_header_openssl_sub_lhash.h","//submodules/openssl:openssl_header_openssl_sub_md2.h","//submodules/openssl:openssl_header_openssl_sub_md4.h","//submodules/openssl:openssl_header_openssl_sub_md5.h","//submodules/openssl:openssl_header_openssl_sub_mdc2.h","//submodules/openssl:openssl_header_openssl_sub_modes.h","//submodules/openssl:openssl_header_openssl_sub_obj_mac.h","//submodules/openssl:openssl_header_openssl_sub_objects.h","//submodules/openssl:openssl_header_openssl_sub_objectserr.h","//submodules/openssl:openssl_header_openssl_sub_ocsp.h","//submodules/openssl:openssl_header_openssl_sub_ocsperr.h","//submodules/openssl:openssl_header_openssl_sub_opensslconf.h","//submodules/openssl:openssl_header_openssl_sub_opensslv.h","//submodules/openssl:openssl_header_openssl_sub_ossl_typ.h","//submodules/openssl:openssl_header_openssl_sub_pem.h","//submodules/openssl:openssl_header_openssl_sub_pem2.h","//submodules/openssl:openssl_header_openssl_sub_pemerr.h","//submodules/openssl:openssl_header_openssl_sub_pkcs12.h","//submodules/openssl:openssl_header_openssl_sub_pkcs12err.h","//submodules/openssl:openssl_header_openssl_sub_pkcs7.h","//submodules/openssl:openssl_header_openssl_sub_pkcs7err.h","//submodules/openssl:openssl_header_openssl_sub_rand.h","//submodules/openssl:openssl_header_openssl_sub_rand_drbg.h","//submodules/openssl:openssl_header_openssl_sub_randerr.h","//submodules/openssl:openssl_header_openssl_sub_rc2.h","//submodules/openssl:openssl_header_openssl_sub_rc4.h","//submodules/openssl:openssl_header_openssl_sub_rc5.h","//submodules/openssl:openssl_header_openssl_sub_ripemd.h","//submodules/openssl:openssl_header_openssl_sub_rsa.h","//submodules/openssl:openssl_header_openssl_sub_rsaerr.h","//submodules/openssl:openssl_header_openssl_sub_safestack.h","//submodules/openssl:openssl_header_openssl_sub_seed.h","//submodules/openssl:openssl_header_openssl_sub_sha.h","//submodules/openssl:openssl_header_openssl_sub_srp.h","//submodules/openssl:openssl_header_openssl_sub_srtp.h","//submodules/openssl:openssl_header_openssl_sub_ssl.h","//submodules/openssl:openssl_header_openssl_sub_ssl2.h","//submodules/openssl:openssl_header_openssl_sub_ssl3.h","//submodules/openssl:openssl_header_openssl_sub_sslerr.h","//submodules/openssl:openssl_header_openssl_sub_stack.h","//submodules/openssl:openssl_header_openssl_sub_store.h","//submodules/openssl:openssl_header_openssl_sub_storeerr.h","//submodules/openssl:openssl_header_openssl_sub_symhacks.h","//submodules/openssl:openssl_header_openssl_sub_tls1.h","//submodules/openssl:openssl_header_openssl_sub_ts.h","//submodules/openssl:openssl_header_openssl_sub_tserr.h","//submodules/openssl:openssl_header_openssl_sub_txt_db.h","//submodules/openssl:openssl_header_openssl_sub_ui.h","//submodules/openssl:openssl_header_openssl_sub_uierr.h","//submodules/openssl:openssl_header_openssl_sub_whrlpool.h","//submodules/openssl:openssl_header_openssl_sub_x509.h","//submodules/openssl:openssl_header_openssl_sub_x509_vfy.h","//submodules/openssl:openssl_header_openssl_sub_x509err.h","//submodules/openssl:openssl_header_openssl_sub_x509v3.h","//submodules/openssl:openssl_header_openssl_sub_x509v3err.h","//submodules/ton:ton_build","//submodules/ton:ton_header_auto_sub_tl_sub_tonlib_api.h","//submodules/ton:ton_header_td_sub_utils_sub_SharedSlice.h","//submodules/ton:ton_header_td_sub_utils_sub_Slice-decl.h","//submodules/ton:ton_header_td_sub_utils_sub_Slice.h","//submodules/ton:ton_header_td_sub_utils_sub_check.h","//submodules/ton:ton_header_td_sub_utils_sub_common.h","//submodules/ton:ton_header_td_sub_utils_sub_config.h","//submodules/ton:ton_header_td_sub_utils_sub_int_types.h","//submodules/ton:ton_header_td_sub_utils_sub_port_sub_platform.h","//submodules/ton:ton_header_td_sub_utils_sub_unique_ptr.h","//submodules/ton:ton_header_tl_sub_TlObject.h","//submodules/ton:ton_header_tonlib_sub_Client.h","//submodules/ton:ton_header_tonlib_sub_tonlib_client_json.h","//submodules/ton:ton_header_tonlib_sub_tonlibjson_export.h"],"xcconfig-paths":["buck-out/gen/AppLibrary-Debug.xcconfig","buck-out/gen/AppLibrary-Profile.xcconfig","buck-out/gen/AppLibrary-Release.xcconfig","buck-out/gen/IntentsExtension#iphonesimulator-x86_64-Debug.xcconfig","buck-out/gen/IntentsExtension#iphonesimulator-x86_64-Profile.xcconfig","buck-out/gen/IntentsExtension#iphonesimulator-x86_64-Release.xcconfig","buck-out/gen/NotificationContentExtension#iphonesimulator-x86_64-Debug.xcconfig","buck-out/gen/NotificationContentExtension#iphonesimulator-x86_64-Profile.xcconfig","buck-out/gen/NotificationContentExtension#iphonesimulator-x86_64-Release.xcconfig","buck-out/gen/NotificationServiceExtension#iphonesimulator-x86_64-Debug.xcconfig","buck-out/gen/NotificationServiceExtension#iphonesimulator-x86_64-Profile.xcconfig","buck-out/gen/NotificationServiceExtension#iphonesimulator-x86_64-Release.xcconfig","buck-out/gen/ShareExtension#iphonesimulator-x86_64-Debug.xcconfig","buck-out/gen/ShareExtension#iphonesimulator-x86_64-Profile.xcconfig","buck-out/gen/ShareExtension#iphonesimulator-x86_64-Release.xcconfig","buck-out/gen/Telegram-Debug.xcconfig","buck-out/gen/Telegram-Profile.xcconfig","buck-out/gen/Telegram-Release.xcconfig","buck-out/gen/WatchApp#watchsimulator-i386-Debug.xcconfig","buck-out/gen/WatchApp#watchsimulator-i386-Profile.xcconfig","buck-out/gen/WatchApp#watchsimulator-i386-Release.xcconfig","buck-out/gen/WatchAppExtension#watchsimulator-i386-Debug.xcconfig","buck-out/gen/WatchAppExtension#watchsimulator-i386-Profile.xcconfig","buck-out/gen/WatchAppExtension#watchsimulator-i386-Release.xcconfig","buck-out/gen/WidgetExtension#iphonesimulator-x86_64-Debug.xcconfig","buck-out/gen/WidgetExtension#iphonesimulator-x86_64-Profile.xcconfig","buck-out/gen/WidgetExtension#iphonesimulator-x86_64-Release.xcconfig","buck-out/gen/submodules/AccountContext/AccountContext-Debug.xcconfig","buck-out/gen/submodules/AccountContext/AccountContext-Profile.xcconfig","buck-out/gen/submodules/AccountContext/AccountContext-Release.xcconfig","buck-out/gen/submodules/ActionSheetPeerItem/ActionSheetPeerItem-Debug.xcconfig","buck-out/gen/submodules/ActionSheetPeerItem/ActionSheetPeerItem-Profile.xcconfig","buck-out/gen/submodules/ActionSheetPeerItem/ActionSheetPeerItem-Release.xcconfig","buck-out/gen/submodules/ActivityIndicator/ActivityIndicator-Debug.xcconfig","buck-out/gen/submodules/ActivityIndicator/ActivityIndicator-Profile.xcconfig","buck-out/gen/submodules/ActivityIndicator/ActivityIndicator-Release.xcconfig","buck-out/gen/submodules/AlertUI/AlertUI-Debug.xcconfig","buck-out/gen/submodules/AlertUI/AlertUI-Profile.xcconfig","buck-out/gen/submodules/AlertUI/AlertUI-Release.xcconfig","buck-out/gen/submodules/AnimationUI/AnimationUI-Debug.xcconfig","buck-out/gen/submodules/AnimationUI/AnimationUI-Profile.xcconfig","buck-out/gen/submodules/AnimationUI/AnimationUI-Release.xcconfig","buck-out/gen/submodules/AppBundle/AppBundle-Debug.xcconfig","buck-out/gen/submodules/AppBundle/AppBundle-Profile.xcconfig","buck-out/gen/submodules/AppBundle/AppBundle-Release.xcconfig","buck-out/gen/submodules/AsyncDisplayKit/AsyncDisplayKit#shared-Debug.xcconfig","buck-out/gen/submodules/AsyncDisplayKit/AsyncDisplayKit#shared-Profile.xcconfig","buck-out/gen/submodules/AsyncDisplayKit/AsyncDisplayKit#shared-Release.xcconfig","buck-out/gen/submodules/AuthorizationUI/AuthorizationUI-Debug.xcconfig","buck-out/gen/submodules/AuthorizationUI/AuthorizationUI-Profile.xcconfig","buck-out/gen/submodules/AuthorizationUI/AuthorizationUI-Release.xcconfig","buck-out/gen/submodules/AvatarNode/AvatarNode-Debug.xcconfig","buck-out/gen/submodules/AvatarNode/AvatarNode-Profile.xcconfig","buck-out/gen/submodules/AvatarNode/AvatarNode-Release.xcconfig","buck-out/gen/submodules/BotPaymentsUI/BotPaymentsUI-Debug.xcconfig","buck-out/gen/submodules/BotPaymentsUI/BotPaymentsUI-Profile.xcconfig","buck-out/gen/submodules/BotPaymentsUI/BotPaymentsUI-Release.xcconfig","buck-out/gen/submodules/BuildConfig/BuildConfig-Debug.xcconfig","buck-out/gen/submodules/BuildConfig/BuildConfig-Profile.xcconfig","buck-out/gen/submodules/BuildConfig/BuildConfig-Release.xcconfig","buck-out/gen/submodules/CallListUI/CallListUI-Debug.xcconfig","buck-out/gen/submodules/CallListUI/CallListUI-Profile.xcconfig","buck-out/gen/submodules/CallListUI/CallListUI-Release.xcconfig","buck-out/gen/submodules/ChatListSearchItemHeader/ChatListSearchItemHeader-Debug.xcconfig","buck-out/gen/submodules/ChatListSearchItemHeader/ChatListSearchItemHeader-Profile.xcconfig","buck-out/gen/submodules/ChatListSearchItemHeader/ChatListSearchItemHeader-Release.xcconfig","buck-out/gen/submodules/ChatListSearchItemNode/ChatListSearchItemNode-Debug.xcconfig","buck-out/gen/submodules/ChatListSearchItemNode/ChatListSearchItemNode-Profile.xcconfig","buck-out/gen/submodules/ChatListSearchItemNode/ChatListSearchItemNode-Release.xcconfig","buck-out/gen/submodules/ChatListSearchRecentPeersNode/ChatListSearchRecentPeersNode-Debug.xcconfig","buck-out/gen/submodules/ChatListSearchRecentPeersNode/ChatListSearchRecentPeersNode-Profile.xcconfig","buck-out/gen/submodules/ChatListSearchRecentPeersNode/ChatListSearchRecentPeersNode-Release.xcconfig","buck-out/gen/submodules/ChatListUI/ChatListUI-Debug.xcconfig","buck-out/gen/submodules/ChatListUI/ChatListUI-Profile.xcconfig","buck-out/gen/submodules/ChatListUI/ChatListUI-Release.xcconfig","buck-out/gen/submodules/ChatTitleActivityNode/ChatTitleActivityNode-Debug.xcconfig","buck-out/gen/submodules/ChatTitleActivityNode/ChatTitleActivityNode-Profile.xcconfig","buck-out/gen/submodules/ChatTitleActivityNode/ChatTitleActivityNode-Release.xcconfig","buck-out/gen/submodules/CheckNode/CheckNode-Debug.xcconfig","buck-out/gen/submodules/CheckNode/CheckNode-Profile.xcconfig","buck-out/gen/submodules/CheckNode/CheckNode-Release.xcconfig","buck-out/gen/submodules/ComposePollUI/ComposePollUI-Debug.xcconfig","buck-out/gen/submodules/ComposePollUI/ComposePollUI-Profile.xcconfig","buck-out/gen/submodules/ComposePollUI/ComposePollUI-Release.xcconfig","buck-out/gen/submodules/ContactListUI/ContactListUI-Debug.xcconfig","buck-out/gen/submodules/ContactListUI/ContactListUI-Profile.xcconfig","buck-out/gen/submodules/ContactListUI/ContactListUI-Release.xcconfig","buck-out/gen/submodules/ContactsPeerItem/ContactsPeerItem-Debug.xcconfig","buck-out/gen/submodules/ContactsPeerItem/ContactsPeerItem-Profile.xcconfig","buck-out/gen/submodules/ContactsPeerItem/ContactsPeerItem-Release.xcconfig","buck-out/gen/submodules/ContextUI/ContextUI-Debug.xcconfig","buck-out/gen/submodules/ContextUI/ContextUI-Profile.xcconfig","buck-out/gen/submodules/ContextUI/ContextUI-Release.xcconfig","buck-out/gen/submodules/CounterContollerTitleView/CounterContollerTitleView-Debug.xcconfig","buck-out/gen/submodules/CounterContollerTitleView/CounterContollerTitleView-Profile.xcconfig","buck-out/gen/submodules/CounterContollerTitleView/CounterContollerTitleView-Release.xcconfig","buck-out/gen/submodules/CountrySelectionUI/CountrySelectionUI-Debug.xcconfig","buck-out/gen/submodules/CountrySelectionUI/CountrySelectionUI-Profile.xcconfig","buck-out/gen/submodules/CountrySelectionUI/CountrySelectionUI-Release.xcconfig","buck-out/gen/submodules/Crc32/Crc32-Debug.xcconfig","buck-out/gen/submodules/Crc32/Crc32-Profile.xcconfig","buck-out/gen/submodules/Crc32/Crc32-Release.xcconfig","buck-out/gen/submodules/DateSelectionUI/DateSelectionUI-Debug.xcconfig","buck-out/gen/submodules/DateSelectionUI/DateSelectionUI-Profile.xcconfig","buck-out/gen/submodules/DateSelectionUI/DateSelectionUI-Release.xcconfig","buck-out/gen/submodules/DeleteChatPeerActionSheetItem/DeleteChatPeerActionSheetItem-Debug.xcconfig","buck-out/gen/submodules/DeleteChatPeerActionSheetItem/DeleteChatPeerActionSheetItem-Profile.xcconfig","buck-out/gen/submodules/DeleteChatPeerActionSheetItem/DeleteChatPeerActionSheetItem-Release.xcconfig","buck-out/gen/submodules/DeviceAccess/DeviceAccess-Debug.xcconfig","buck-out/gen/submodules/DeviceAccess/DeviceAccess-Profile.xcconfig","buck-out/gen/submodules/DeviceAccess/DeviceAccess-Release.xcconfig","buck-out/gen/submodules/DeviceLocationManager/DeviceLocationManager-Debug.xcconfig","buck-out/gen/submodules/DeviceLocationManager/DeviceLocationManager-Profile.xcconfig","buck-out/gen/submodules/DeviceLocationManager/DeviceLocationManager-Release.xcconfig","buck-out/gen/submodules/DeviceProximity/DeviceProximity-Debug.xcconfig","buck-out/gen/submodules/DeviceProximity/DeviceProximity-Profile.xcconfig","buck-out/gen/submodules/DeviceProximity/DeviceProximity-Release.xcconfig","buck-out/gen/submodules/DirectionalPanGesture/DirectionalPanGesture-Debug.xcconfig","buck-out/gen/submodules/DirectionalPanGesture/DirectionalPanGesture-Profile.xcconfig","buck-out/gen/submodules/DirectionalPanGesture/DirectionalPanGesture-Release.xcconfig","buck-out/gen/submodules/Display/Display#shared-Debug.xcconfig","buck-out/gen/submodules/Display/Display#shared-Profile.xcconfig","buck-out/gen/submodules/Display/Display#shared-Release.xcconfig","buck-out/gen/submodules/Emoji/Emoji-Debug.xcconfig","buck-out/gen/submodules/Emoji/Emoji-Profile.xcconfig","buck-out/gen/submodules/Emoji/Emoji-Release.xcconfig","buck-out/gen/submodules/EncryptionKeyVisualization/EncryptionKeyVisualization-Debug.xcconfig","buck-out/gen/submodules/EncryptionKeyVisualization/EncryptionKeyVisualization-Profile.xcconfig","buck-out/gen/submodules/EncryptionKeyVisualization/EncryptionKeyVisualization-Release.xcconfig","buck-out/gen/submodules/FFMpeg/FFMpeg-Debug.xcconfig","buck-out/gen/submodules/FFMpeg/FFMpeg-Profile.xcconfig","buck-out/gen/submodules/FFMpeg/FFMpeg-Release.xcconfig","buck-out/gen/submodules/FFMpeg/libffmpeg-Debug.xcconfig","buck-out/gen/submodules/FFMpeg/libffmpeg-Profile.xcconfig","buck-out/gen/submodules/FFMpeg/libffmpeg-Release.xcconfig","buck-out/gen/submodules/GZip/GZip-Debug.xcconfig","buck-out/gen/submodules/GZip/GZip-Profile.xcconfig","buck-out/gen/submodules/GZip/GZip-Release.xcconfig","buck-out/gen/submodules/GalleryUI/GalleryUI-Debug.xcconfig","buck-out/gen/submodules/GalleryUI/GalleryUI-Profile.xcconfig","buck-out/gen/submodules/GalleryUI/GalleryUI-Release.xcconfig","buck-out/gen/submodules/GameUI/GameUI-Debug.xcconfig","buck-out/gen/submodules/GameUI/GameUI-Profile.xcconfig","buck-out/gen/submodules/GameUI/GameUI-Release.xcconfig","buck-out/gen/submodules/Geocoding/Geocoding-Debug.xcconfig","buck-out/gen/submodules/Geocoding/Geocoding-Profile.xcconfig","buck-out/gen/submodules/Geocoding/Geocoding-Release.xcconfig","buck-out/gen/submodules/GridMessageSelectionNode/GridMessageSelectionNode-Debug.xcconfig","buck-out/gen/submodules/GridMessageSelectionNode/GridMessageSelectionNode-Profile.xcconfig","buck-out/gen/submodules/GridMessageSelectionNode/GridMessageSelectionNode-Release.xcconfig","buck-out/gen/submodules/HashtagSearchUI/HashtagSearchUI-Debug.xcconfig","buck-out/gen/submodules/HashtagSearchUI/HashtagSearchUI-Profile.xcconfig","buck-out/gen/submodules/HashtagSearchUI/HashtagSearchUI-Release.xcconfig","buck-out/gen/submodules/HexColor/HexColor-Debug.xcconfig","buck-out/gen/submodules/HexColor/HexColor-Profile.xcconfig","buck-out/gen/submodules/HexColor/HexColor-Release.xcconfig","buck-out/gen/submodules/HockeySDK-iOS/HockeySDK-Debug.xcconfig","buck-out/gen/submodules/HockeySDK-iOS/HockeySDK-Profile.xcconfig","buck-out/gen/submodules/HockeySDK-iOS/HockeySDK-Release.xcconfig","buck-out/gen/submodules/HorizontalPeerItem/HorizontalPeerItem-Debug.xcconfig","buck-out/gen/submodules/HorizontalPeerItem/HorizontalPeerItem-Profile.xcconfig","buck-out/gen/submodules/HorizontalPeerItem/HorizontalPeerItem-Release.xcconfig","buck-out/gen/submodules/ImageBlur/ImageBlur-Debug.xcconfig","buck-out/gen/submodules/ImageBlur/ImageBlur-Profile.xcconfig","buck-out/gen/submodules/ImageBlur/ImageBlur-Release.xcconfig","buck-out/gen/submodules/ImageCompression/ImageCompression-Debug.xcconfig","buck-out/gen/submodules/ImageCompression/ImageCompression-Profile.xcconfig","buck-out/gen/submodules/ImageCompression/ImageCompression-Release.xcconfig","buck-out/gen/submodules/ImageTransparency/ImageTransparency-Debug.xcconfig","buck-out/gen/submodules/ImageTransparency/ImageTransparency-Profile.xcconfig","buck-out/gen/submodules/ImageTransparency/ImageTransparency-Release.xcconfig","buck-out/gen/submodules/InstantPageCache/InstantPageCache-Debug.xcconfig","buck-out/gen/submodules/InstantPageCache/InstantPageCache-Profile.xcconfig","buck-out/gen/submodules/InstantPageCache/InstantPageCache-Release.xcconfig","buck-out/gen/submodules/InstantPageUI/InstantPageUI-Debug.xcconfig","buck-out/gen/submodules/InstantPageUI/InstantPageUI-Profile.xcconfig","buck-out/gen/submodules/InstantPageUI/InstantPageUI-Release.xcconfig","buck-out/gen/submodules/ItemListAddressItem/ItemListAddressItem-Debug.xcconfig","buck-out/gen/submodules/ItemListAddressItem/ItemListAddressItem-Profile.xcconfig","buck-out/gen/submodules/ItemListAddressItem/ItemListAddressItem-Release.xcconfig","buck-out/gen/submodules/ItemListAvatarAndNameInfoItem/ItemListAvatarAndNameInfoItem-Debug.xcconfig","buck-out/gen/submodules/ItemListAvatarAndNameInfoItem/ItemListAvatarAndNameInfoItem-Profile.xcconfig","buck-out/gen/submodules/ItemListAvatarAndNameInfoItem/ItemListAvatarAndNameInfoItem-Release.xcconfig","buck-out/gen/submodules/ItemListPeerActionItem/ItemListPeerActionItem-Debug.xcconfig","buck-out/gen/submodules/ItemListPeerActionItem/ItemListPeerActionItem-Profile.xcconfig","buck-out/gen/submodules/ItemListPeerActionItem/ItemListPeerActionItem-Release.xcconfig","buck-out/gen/submodules/ItemListPeerItem/ItemListPeerItem-Debug.xcconfig","buck-out/gen/submodules/ItemListPeerItem/ItemListPeerItem-Profile.xcconfig","buck-out/gen/submodules/ItemListPeerItem/ItemListPeerItem-Release.xcconfig","buck-out/gen/submodules/ItemListStickerPackItem/ItemListStickerPackItem-Debug.xcconfig","buck-out/gen/submodules/ItemListStickerPackItem/ItemListStickerPackItem-Profile.xcconfig","buck-out/gen/submodules/ItemListStickerPackItem/ItemListStickerPackItem-Release.xcconfig","buck-out/gen/submodules/ItemListUI/ItemListUI-Debug.xcconfig","buck-out/gen/submodules/ItemListUI/ItemListUI-Profile.xcconfig","buck-out/gen/submodules/ItemListUI/ItemListUI-Release.xcconfig","buck-out/gen/submodules/JoinLinkPreviewUI/JoinLinkPreviewUI-Debug.xcconfig","buck-out/gen/submodules/JoinLinkPreviewUI/JoinLinkPreviewUI-Profile.xcconfig","buck-out/gen/submodules/JoinLinkPreviewUI/JoinLinkPreviewUI-Release.xcconfig","buck-out/gen/submodules/LanguageLinkPreviewUI/LanguageLinkPreviewUI-Debug.xcconfig","buck-out/gen/submodules/LanguageLinkPreviewUI/LanguageLinkPreviewUI-Profile.xcconfig","buck-out/gen/submodules/LanguageLinkPreviewUI/LanguageLinkPreviewUI-Release.xcconfig","buck-out/gen/submodules/LanguageSuggestionUI/LanguageSuggestionUI-Debug.xcconfig","buck-out/gen/submodules/LanguageSuggestionUI/LanguageSuggestionUI-Profile.xcconfig","buck-out/gen/submodules/LanguageSuggestionUI/LanguageSuggestionUI-Release.xcconfig","buck-out/gen/submodules/LegacyComponents/LegacyComponents-Debug.xcconfig","buck-out/gen/submodules/LegacyComponents/LegacyComponents-Profile.xcconfig","buck-out/gen/submodules/LegacyComponents/LegacyComponents-Release.xcconfig","buck-out/gen/submodules/LegacyDataImport/LegacyDataImport-Debug.xcconfig","buck-out/gen/submodules/LegacyDataImport/LegacyDataImport-Profile.xcconfig","buck-out/gen/submodules/LegacyDataImport/LegacyDataImport-Release.xcconfig","buck-out/gen/submodules/LegacyMediaPickerUI/LegacyMediaPickerUI-Debug.xcconfig","buck-out/gen/submodules/LegacyMediaPickerUI/LegacyMediaPickerUI-Profile.xcconfig","buck-out/gen/submodules/LegacyMediaPickerUI/LegacyMediaPickerUI-Release.xcconfig","buck-out/gen/submodules/LegacyUI/LegacyUI-Debug.xcconfig","buck-out/gen/submodules/LegacyUI/LegacyUI-Profile.xcconfig","buck-out/gen/submodules/LegacyUI/LegacyUI-Release.xcconfig","buck-out/gen/submodules/LightweightAccountData/LightweightAccountData-Debug.xcconfig","buck-out/gen/submodules/LightweightAccountData/LightweightAccountData-Profile.xcconfig","buck-out/gen/submodules/LightweightAccountData/LightweightAccountData-Release.xcconfig","buck-out/gen/submodules/ListSectionHeaderNode/ListSectionHeaderNode-Debug.xcconfig","buck-out/gen/submodules/ListSectionHeaderNode/ListSectionHeaderNode-Profile.xcconfig","buck-out/gen/submodules/ListSectionHeaderNode/ListSectionHeaderNode-Release.xcconfig","buck-out/gen/submodules/LiveLocationManager/LiveLocationManager-Debug.xcconfig","buck-out/gen/submodules/LiveLocationManager/LiveLocationManager-Profile.xcconfig","buck-out/gen/submodules/LiveLocationManager/LiveLocationManager-Release.xcconfig","buck-out/gen/submodules/LiveLocationPositionNode/LiveLocationPositionNode-Debug.xcconfig","buck-out/gen/submodules/LiveLocationPositionNode/LiveLocationPositionNode-Profile.xcconfig","buck-out/gen/submodules/LiveLocationPositionNode/LiveLocationPositionNode-Release.xcconfig","buck-out/gen/submodules/LiveLocationTimerNode/LiveLocationTimerNode-Debug.xcconfig","buck-out/gen/submodules/LiveLocationTimerNode/LiveLocationTimerNode-Profile.xcconfig","buck-out/gen/submodules/LiveLocationTimerNode/LiveLocationTimerNode-Release.xcconfig","buck-out/gen/submodules/LocalAuth/LocalAuth-Debug.xcconfig","buck-out/gen/submodules/LocalAuth/LocalAuth-Profile.xcconfig","buck-out/gen/submodules/LocalAuth/LocalAuth-Release.xcconfig","buck-out/gen/submodules/LocalMediaResources/LocalMediaResources-Debug.xcconfig","buck-out/gen/submodules/LocalMediaResources/LocalMediaResources-Profile.xcconfig","buck-out/gen/submodules/LocalMediaResources/LocalMediaResources-Release.xcconfig","buck-out/gen/submodules/LocalizedPeerData/LocalizedPeerData-Debug.xcconfig","buck-out/gen/submodules/LocalizedPeerData/LocalizedPeerData-Profile.xcconfig","buck-out/gen/submodules/LocalizedPeerData/LocalizedPeerData-Release.xcconfig","buck-out/gen/submodules/LocationUI/LocationUI-Debug.xcconfig","buck-out/gen/submodules/LocationUI/LocationUI-Profile.xcconfig","buck-out/gen/submodules/LocationUI/LocationUI-Release.xcconfig","buck-out/gen/submodules/MapResourceToAvatarSizes/MapResourceToAvatarSizes-Debug.xcconfig","buck-out/gen/submodules/MapResourceToAvatarSizes/MapResourceToAvatarSizes-Profile.xcconfig","buck-out/gen/submodules/MapResourceToAvatarSizes/MapResourceToAvatarSizes-Release.xcconfig","buck-out/gen/submodules/MediaPlayer/UniversalMediaPlayer-Debug.xcconfig","buck-out/gen/submodules/MediaPlayer/UniversalMediaPlayer-Profile.xcconfig","buck-out/gen/submodules/MediaPlayer/UniversalMediaPlayer-Release.xcconfig","buck-out/gen/submodules/MediaResources/MediaResources-Debug.xcconfig","buck-out/gen/submodules/MediaResources/MediaResources-Profile.xcconfig","buck-out/gen/submodules/MediaResources/MediaResources-Release.xcconfig","buck-out/gen/submodules/MergeLists/MergeLists-Debug.xcconfig","buck-out/gen/submodules/MergeLists/MergeLists-Profile.xcconfig","buck-out/gen/submodules/MergeLists/MergeLists-Release.xcconfig","buck-out/gen/submodules/MessageReactionListUI/MessageReactionListUI-Debug.xcconfig","buck-out/gen/submodules/MessageReactionListUI/MessageReactionListUI-Profile.xcconfig","buck-out/gen/submodules/MessageReactionListUI/MessageReactionListUI-Release.xcconfig","buck-out/gen/submodules/MimeTypes/MimeTypes-Debug.xcconfig","buck-out/gen/submodules/MimeTypes/MimeTypes-Profile.xcconfig","buck-out/gen/submodules/MimeTypes/MimeTypes-Release.xcconfig","buck-out/gen/submodules/MosaicLayout/MosaicLayout-Debug.xcconfig","buck-out/gen/submodules/MosaicLayout/MosaicLayout-Profile.xcconfig","buck-out/gen/submodules/MosaicLayout/MosaicLayout-Release.xcconfig","buck-out/gen/submodules/MtProtoKit/MtProtoKit#shared-Debug.xcconfig","buck-out/gen/submodules/MtProtoKit/MtProtoKit#shared-Profile.xcconfig","buck-out/gen/submodules/MtProtoKit/MtProtoKit#shared-Release.xcconfig","buck-out/gen/submodules/MusicAlbumArtResources/MusicAlbumArtResources-Debug.xcconfig","buck-out/gen/submodules/MusicAlbumArtResources/MusicAlbumArtResources-Profile.xcconfig","buck-out/gen/submodules/MusicAlbumArtResources/MusicAlbumArtResources-Release.xcconfig","buck-out/gen/submodules/NotificationMuteSettingsUI/NotificationMuteSettingsUI-Debug.xcconfig","buck-out/gen/submodules/NotificationMuteSettingsUI/NotificationMuteSettingsUI-Profile.xcconfig","buck-out/gen/submodules/NotificationMuteSettingsUI/NotificationMuteSettingsUI-Release.xcconfig","buck-out/gen/submodules/NotificationSoundSelectionUI/NotificationSoundSelectionUI-Debug.xcconfig","buck-out/gen/submodules/NotificationSoundSelectionUI/NotificationSoundSelectionUI-Profile.xcconfig","buck-out/gen/submodules/NotificationSoundSelectionUI/NotificationSoundSelectionUI-Release.xcconfig","buck-out/gen/submodules/OpenInExternalAppUI/OpenInExternalAppUI-Debug.xcconfig","buck-out/gen/submodules/OpenInExternalAppUI/OpenInExternalAppUI-Profile.xcconfig","buck-out/gen/submodules/OpenInExternalAppUI/OpenInExternalAppUI-Release.xcconfig","buck-out/gen/submodules/Opus/opus-Debug.xcconfig","buck-out/gen/submodules/Opus/opus-Profile.xcconfig","buck-out/gen/submodules/Opus/opus-Release.xcconfig","buck-out/gen/submodules/Opus/opus_lib-Debug.xcconfig","buck-out/gen/submodules/Opus/opus_lib-Profile.xcconfig","buck-out/gen/submodules/Opus/opus_lib-Release.xcconfig","buck-out/gen/submodules/OpusBinding/OpusBinding-Debug.xcconfig","buck-out/gen/submodules/OpusBinding/OpusBinding-Profile.xcconfig","buck-out/gen/submodules/OpusBinding/OpusBinding-Release.xcconfig","buck-out/gen/submodules/OverlayStatusController/OverlayStatusController-Debug.xcconfig","buck-out/gen/submodules/OverlayStatusController/OverlayStatusController-Profile.xcconfig","buck-out/gen/submodules/OverlayStatusController/OverlayStatusController-Release.xcconfig","buck-out/gen/submodules/PasscodeUI/PasscodeUI-Debug.xcconfig","buck-out/gen/submodules/PasscodeUI/PasscodeUI-Profile.xcconfig","buck-out/gen/submodules/PasscodeUI/PasscodeUI-Release.xcconfig","buck-out/gen/submodules/PassportUI/PassportUI-Debug.xcconfig","buck-out/gen/submodules/PassportUI/PassportUI-Profile.xcconfig","buck-out/gen/submodules/PassportUI/PassportUI-Release.xcconfig","buck-out/gen/submodules/PasswordSetupUI/PasswordSetupUI-Debug.xcconfig","buck-out/gen/submodules/PasswordSetupUI/PasswordSetupUI-Profile.xcconfig","buck-out/gen/submodules/PasswordSetupUI/PasswordSetupUI-Release.xcconfig","buck-out/gen/submodules/Pdf/Pdf-Debug.xcconfig","buck-out/gen/submodules/Pdf/Pdf-Profile.xcconfig","buck-out/gen/submodules/Pdf/Pdf-Release.xcconfig","buck-out/gen/submodules/PeerAvatarGalleryUI/PeerAvatarGalleryUI-Debug.xcconfig","buck-out/gen/submodules/PeerAvatarGalleryUI/PeerAvatarGalleryUI-Profile.xcconfig","buck-out/gen/submodules/PeerAvatarGalleryUI/PeerAvatarGalleryUI-Release.xcconfig","buck-out/gen/submodules/PeerInfoUI/PeerInfoUI-Debug.xcconfig","buck-out/gen/submodules/PeerInfoUI/PeerInfoUI-Profile.xcconfig","buck-out/gen/submodules/PeerInfoUI/PeerInfoUI-Release.xcconfig","buck-out/gen/submodules/PeerOnlineMarkerNode/PeerOnlineMarkerNode-Debug.xcconfig","buck-out/gen/submodules/PeerOnlineMarkerNode/PeerOnlineMarkerNode-Profile.xcconfig","buck-out/gen/submodules/PeerOnlineMarkerNode/PeerOnlineMarkerNode-Release.xcconfig","buck-out/gen/submodules/PeerPresenceStatusManager/PeerPresenceStatusManager-Debug.xcconfig","buck-out/gen/submodules/PeerPresenceStatusManager/PeerPresenceStatusManager-Profile.xcconfig","buck-out/gen/submodules/PeerPresenceStatusManager/PeerPresenceStatusManager-Release.xcconfig","buck-out/gen/submodules/PeersNearbyIconNode/PeersNearbyIconNode-Debug.xcconfig","buck-out/gen/submodules/PeersNearbyIconNode/PeersNearbyIconNode-Profile.xcconfig","buck-out/gen/submodules/PeersNearbyIconNode/PeersNearbyIconNode-Release.xcconfig","buck-out/gen/submodules/PeersNearbyUI/PeersNearbyUI-Debug.xcconfig","buck-out/gen/submodules/PeersNearbyUI/PeersNearbyUI-Profile.xcconfig","buck-out/gen/submodules/PeersNearbyUI/PeersNearbyUI-Release.xcconfig","buck-out/gen/submodules/PersistentStringHash/PersistentStringHash-Debug.xcconfig","buck-out/gen/submodules/PersistentStringHash/PersistentStringHash-Profile.xcconfig","buck-out/gen/submodules/PersistentStringHash/PersistentStringHash-Release.xcconfig","buck-out/gen/submodules/PhoneInputNode/PhoneInputNode-Debug.xcconfig","buck-out/gen/submodules/PhoneInputNode/PhoneInputNode-Profile.xcconfig","buck-out/gen/submodules/PhoneInputNode/PhoneInputNode-Release.xcconfig","buck-out/gen/submodules/PhotoResources/PhotoResources-Debug.xcconfig","buck-out/gen/submodules/PhotoResources/PhotoResources-Profile.xcconfig","buck-out/gen/submodules/PhotoResources/PhotoResources-Release.xcconfig","buck-out/gen/submodules/PlatformRestrictionMatching/PlatformRestrictionMatching-Debug.xcconfig","buck-out/gen/submodules/PlatformRestrictionMatching/PlatformRestrictionMatching-Profile.xcconfig","buck-out/gen/submodules/PlatformRestrictionMatching/PlatformRestrictionMatching-Release.xcconfig","buck-out/gen/submodules/Postbox/Postbox#shared-Debug.xcconfig","buck-out/gen/submodules/Postbox/Postbox#shared-Profile.xcconfig","buck-out/gen/submodules/Postbox/Postbox#shared-Release.xcconfig","buck-out/gen/submodules/ProgressNavigationButtonNode/ProgressNavigationButtonNode-Debug.xcconfig","buck-out/gen/submodules/ProgressNavigationButtonNode/ProgressNavigationButtonNode-Profile.xcconfig","buck-out/gen/submodules/ProgressNavigationButtonNode/ProgressNavigationButtonNode-Release.xcconfig","buck-out/gen/submodules/QrCode/QrCode-Debug.xcconfig","buck-out/gen/submodules/QrCode/QrCode-Profile.xcconfig","buck-out/gen/submodules/QrCode/QrCode-Release.xcconfig","buck-out/gen/submodules/RMIntro/RMIntro-Debug.xcconfig","buck-out/gen/submodules/RMIntro/RMIntro-Profile.xcconfig","buck-out/gen/submodules/RMIntro/RMIntro-Release.xcconfig","buck-out/gen/submodules/RadialStatusNode/RadialStatusNode-Debug.xcconfig","buck-out/gen/submodules/RadialStatusNode/RadialStatusNode-Profile.xcconfig","buck-out/gen/submodules/RadialStatusNode/RadialStatusNode-Release.xcconfig","buck-out/gen/submodules/RaiseToListen/RaiseToListen-Debug.xcconfig","buck-out/gen/submodules/RaiseToListen/RaiseToListen-Profile.xcconfig","buck-out/gen/submodules/RaiseToListen/RaiseToListen-Release.xcconfig","buck-out/gen/submodules/ReactionSelectionNode/ReactionSelectionNode-Debug.xcconfig","buck-out/gen/submodules/ReactionSelectionNode/ReactionSelectionNode-Profile.xcconfig","buck-out/gen/submodules/ReactionSelectionNode/ReactionSelectionNode-Release.xcconfig","buck-out/gen/submodules/SSignalKit/SSignalKit/SSignalKit-Debug.xcconfig","buck-out/gen/submodules/SSignalKit/SSignalKit/SSignalKit-Profile.xcconfig","buck-out/gen/submodules/SSignalKit/SSignalKit/SSignalKit-Release.xcconfig","buck-out/gen/submodules/SSignalKit/SwiftSignalKit/SwiftSignalKit#shared-Debug.xcconfig","buck-out/gen/submodules/SSignalKit/SwiftSignalKit/SwiftSignalKit#shared-Profile.xcconfig","buck-out/gen/submodules/SSignalKit/SwiftSignalKit/SwiftSignalKit#shared-Release.xcconfig","buck-out/gen/submodules/SaveToCameraRoll/SaveToCameraRoll-Debug.xcconfig","buck-out/gen/submodules/SaveToCameraRoll/SaveToCameraRoll-Profile.xcconfig","buck-out/gen/submodules/SaveToCameraRoll/SaveToCameraRoll-Release.xcconfig","buck-out/gen/submodules/ScreenCaptureDetection/ScreenCaptureDetection-Debug.xcconfig","buck-out/gen/submodules/ScreenCaptureDetection/ScreenCaptureDetection-Profile.xcconfig","buck-out/gen/submodules/ScreenCaptureDetection/ScreenCaptureDetection-Release.xcconfig","buck-out/gen/submodules/SearchBarNode/SearchBarNode-Debug.xcconfig","buck-out/gen/submodules/SearchBarNode/SearchBarNode-Profile.xcconfig","buck-out/gen/submodules/SearchBarNode/SearchBarNode-Release.xcconfig","buck-out/gen/submodules/SearchUI/SearchUI-Debug.xcconfig","buck-out/gen/submodules/SearchUI/SearchUI-Profile.xcconfig","buck-out/gen/submodules/SearchUI/SearchUI-Release.xcconfig","buck-out/gen/submodules/SegmentedControlNode/SegmentedControlNode-Debug.xcconfig","buck-out/gen/submodules/SegmentedControlNode/SegmentedControlNode-Profile.xcconfig","buck-out/gen/submodules/SegmentedControlNode/SegmentedControlNode-Release.xcconfig","buck-out/gen/submodules/SelectablePeerNode/SelectablePeerNode-Debug.xcconfig","buck-out/gen/submodules/SelectablePeerNode/SelectablePeerNode-Profile.xcconfig","buck-out/gen/submodules/SelectablePeerNode/SelectablePeerNode-Release.xcconfig","buck-out/gen/submodules/SettingsUI/SettingsUI-Debug.xcconfig","buck-out/gen/submodules/SettingsUI/SettingsUI-Profile.xcconfig","buck-out/gen/submodules/SettingsUI/SettingsUI-Release.xcconfig","buck-out/gen/submodules/ShareController/ShareController-Debug.xcconfig","buck-out/gen/submodules/ShareController/ShareController-Profile.xcconfig","buck-out/gen/submodules/ShareController/ShareController-Release.xcconfig","buck-out/gen/submodules/ShareItems/ShareItems-Debug.xcconfig","buck-out/gen/submodules/ShareItems/ShareItems-Profile.xcconfig","buck-out/gen/submodules/ShareItems/ShareItems-Release.xcconfig","buck-out/gen/submodules/SinglePhoneInputNode/SinglePhoneInputNode-Debug.xcconfig","buck-out/gen/submodules/SinglePhoneInputNode/SinglePhoneInputNode-Profile.xcconfig","buck-out/gen/submodules/SinglePhoneInputNode/SinglePhoneInputNode-Release.xcconfig","buck-out/gen/submodules/SolidRoundedButtonNode/SolidRoundedButtonNode-Debug.xcconfig","buck-out/gen/submodules/SolidRoundedButtonNode/SolidRoundedButtonNode-Profile.xcconfig","buck-out/gen/submodules/SolidRoundedButtonNode/SolidRoundedButtonNode-Release.xcconfig","buck-out/gen/submodules/StickerPackPreviewUI/StickerPackPreviewUI-Debug.xcconfig","buck-out/gen/submodules/StickerPackPreviewUI/StickerPackPreviewUI-Profile.xcconfig","buck-out/gen/submodules/StickerPackPreviewUI/StickerPackPreviewUI-Release.xcconfig","buck-out/gen/submodules/StickerResources/StickerResources-Debug.xcconfig","buck-out/gen/submodules/StickerResources/StickerResources-Profile.xcconfig","buck-out/gen/submodules/StickerResources/StickerResources-Release.xcconfig","buck-out/gen/submodules/Stripe/Stripe-Debug.xcconfig","buck-out/gen/submodules/Stripe/Stripe-Profile.xcconfig","buck-out/gen/submodules/Stripe/Stripe-Release.xcconfig","buck-out/gen/submodules/SwipeToDismissGesture/SwipeToDismissGesture-Debug.xcconfig","buck-out/gen/submodules/SwipeToDismissGesture/SwipeToDismissGesture-Profile.xcconfig","buck-out/gen/submodules/SwipeToDismissGesture/SwipeToDismissGesture-Release.xcconfig","buck-out/gen/submodules/SwitchNode/SwitchNode-Debug.xcconfig","buck-out/gen/submodules/SwitchNode/SwitchNode-Profile.xcconfig","buck-out/gen/submodules/SwitchNode/SwitchNode-Release.xcconfig","buck-out/gen/submodules/TelegramApi/TelegramApi-Debug.xcconfig","buck-out/gen/submodules/TelegramApi/TelegramApi-Profile.xcconfig","buck-out/gen/submodules/TelegramApi/TelegramApi-Release.xcconfig","buck-out/gen/submodules/TelegramAudio/TelegramAudio-Debug.xcconfig","buck-out/gen/submodules/TelegramAudio/TelegramAudio-Profile.xcconfig","buck-out/gen/submodules/TelegramAudio/TelegramAudio-Release.xcconfig","buck-out/gen/submodules/TelegramBaseController/TelegramBaseController-Debug.xcconfig","buck-out/gen/submodules/TelegramBaseController/TelegramBaseController-Profile.xcconfig","buck-out/gen/submodules/TelegramBaseController/TelegramBaseController-Release.xcconfig","buck-out/gen/submodules/TelegramCallsUI/TelegramCallsUI-Debug.xcconfig","buck-out/gen/submodules/TelegramCallsUI/TelegramCallsUI-Profile.xcconfig","buck-out/gen/submodules/TelegramCallsUI/TelegramCallsUI-Release.xcconfig","buck-out/gen/submodules/TelegramCore/TelegramCore#shared-Debug.xcconfig","buck-out/gen/submodules/TelegramCore/TelegramCore#shared-Profile.xcconfig","buck-out/gen/submodules/TelegramCore/TelegramCore#shared-Release.xcconfig","buck-out/gen/submodules/TelegramNotices/TelegramNotices-Debug.xcconfig","buck-out/gen/submodules/TelegramNotices/TelegramNotices-Profile.xcconfig","buck-out/gen/submodules/TelegramNotices/TelegramNotices-Release.xcconfig","buck-out/gen/submodules/TelegramPermissions/TelegramPermissions-Debug.xcconfig","buck-out/gen/submodules/TelegramPermissions/TelegramPermissions-Profile.xcconfig","buck-out/gen/submodules/TelegramPermissions/TelegramPermissions-Release.xcconfig","buck-out/gen/submodules/TelegramPermissionsUI/TelegramPermissionsUI-Debug.xcconfig","buck-out/gen/submodules/TelegramPermissionsUI/TelegramPermissionsUI-Profile.xcconfig","buck-out/gen/submodules/TelegramPermissionsUI/TelegramPermissionsUI-Release.xcconfig","buck-out/gen/submodules/TelegramPresentationData/TelegramPresentationData-Debug.xcconfig","buck-out/gen/submodules/TelegramPresentationData/TelegramPresentationData-Profile.xcconfig","buck-out/gen/submodules/TelegramPresentationData/TelegramPresentationData-Release.xcconfig","buck-out/gen/submodules/TelegramStringFormatting/TelegramStringFormatting-Debug.xcconfig","buck-out/gen/submodules/TelegramStringFormatting/TelegramStringFormatting-Profile.xcconfig","buck-out/gen/submodules/TelegramStringFormatting/TelegramStringFormatting-Release.xcconfig","buck-out/gen/submodules/TelegramUI/TelegramUI#shared-Debug.xcconfig","buck-out/gen/submodules/TelegramUI/TelegramUI#shared-Profile.xcconfig","buck-out/gen/submodules/TelegramUI/TelegramUI#shared-Release.xcconfig","buck-out/gen/submodules/TelegramUIPreferences/TelegramUIPreferences-Debug.xcconfig","buck-out/gen/submodules/TelegramUIPreferences/TelegramUIPreferences-Profile.xcconfig","buck-out/gen/submodules/TelegramUIPreferences/TelegramUIPreferences-Release.xcconfig","buck-out/gen/submodules/TelegramUniversalVideoContent/TelegramUniversalVideoContent-Debug.xcconfig","buck-out/gen/submodules/TelegramUniversalVideoContent/TelegramUniversalVideoContent-Profile.xcconfig","buck-out/gen/submodules/TelegramUniversalVideoContent/TelegramUniversalVideoContent-Release.xcconfig","buck-out/gen/submodules/TelegramUpdateUI/TelegramUpdateUI-Debug.xcconfig","buck-out/gen/submodules/TelegramUpdateUI/TelegramUpdateUI-Profile.xcconfig","buck-out/gen/submodules/TelegramUpdateUI/TelegramUpdateUI-Release.xcconfig","buck-out/gen/submodules/TelegramVoip/TelegramVoip-Debug.xcconfig","buck-out/gen/submodules/TelegramVoip/TelegramVoip-Profile.xcconfig","buck-out/gen/submodules/TelegramVoip/TelegramVoip-Release.xcconfig","buck-out/gen/submodules/TemporaryCachedPeerDataManager/TemporaryCachedPeerDataManager-Debug.xcconfig","buck-out/gen/submodules/TemporaryCachedPeerDataManager/TemporaryCachedPeerDataManager-Profile.xcconfig","buck-out/gen/submodules/TemporaryCachedPeerDataManager/TemporaryCachedPeerDataManager-Release.xcconfig","buck-out/gen/submodules/TextFormat/TextFormat-Debug.xcconfig","buck-out/gen/submodules/TextFormat/TextFormat-Profile.xcconfig","buck-out/gen/submodules/TextFormat/TextFormat-Release.xcconfig","buck-out/gen/submodules/TextSelectionNode/TextSelectionNode-Debug.xcconfig","buck-out/gen/submodules/TextSelectionNode/TextSelectionNode-Profile.xcconfig","buck-out/gen/submodules/TextSelectionNode/TextSelectionNode-Release.xcconfig","buck-out/gen/submodules/TinyThumbnail/TinyThumbnail-Debug.xcconfig","buck-out/gen/submodules/TinyThumbnail/TinyThumbnail-Profile.xcconfig","buck-out/gen/submodules/TinyThumbnail/TinyThumbnail-Release.xcconfig","buck-out/gen/submodules/TouchDownGesture/TouchDownGesture-Debug.xcconfig","buck-out/gen/submodules/TouchDownGesture/TouchDownGesture-Profile.xcconfig","buck-out/gen/submodules/TouchDownGesture/TouchDownGesture-Release.xcconfig","buck-out/gen/submodules/Tuples/Tuples-Debug.xcconfig","buck-out/gen/submodules/Tuples/Tuples-Profile.xcconfig","buck-out/gen/submodules/Tuples/Tuples-Release.xcconfig","buck-out/gen/submodules/UndoUI/UndoUI-Debug.xcconfig","buck-out/gen/submodules/UndoUI/UndoUI-Profile.xcconfig","buck-out/gen/submodules/UndoUI/UndoUI-Release.xcconfig","buck-out/gen/submodules/UrlEscaping/UrlEscaping-Debug.xcconfig","buck-out/gen/submodules/UrlEscaping/UrlEscaping-Profile.xcconfig","buck-out/gen/submodules/UrlEscaping/UrlEscaping-Release.xcconfig","buck-out/gen/submodules/UrlHandling/UrlHandling-Debug.xcconfig","buck-out/gen/submodules/UrlHandling/UrlHandling-Profile.xcconfig","buck-out/gen/submodules/UrlHandling/UrlHandling-Release.xcconfig","buck-out/gen/submodules/WalletUI/WalletUI-Debug.xcconfig","buck-out/gen/submodules/WalletUI/WalletUI-Profile.xcconfig","buck-out/gen/submodules/WalletUI/WalletUI-Release.xcconfig","buck-out/gen/submodules/WallpaperResources/WallpaperResources-Debug.xcconfig","buck-out/gen/submodules/WallpaperResources/WallpaperResources-Profile.xcconfig","buck-out/gen/submodules/WallpaperResources/WallpaperResources-Release.xcconfig","buck-out/gen/submodules/WatchBridge/WatchBridge-Debug.xcconfig","buck-out/gen/submodules/WatchBridge/WatchBridge-Profile.xcconfig","buck-out/gen/submodules/WatchBridge/WatchBridge-Release.xcconfig","buck-out/gen/submodules/WatchBridgeAudio/WatchBridgeAudio-Debug.xcconfig","buck-out/gen/submodules/WatchBridgeAudio/WatchBridgeAudio-Profile.xcconfig","buck-out/gen/submodules/WatchBridgeAudio/WatchBridgeAudio-Release.xcconfig","buck-out/gen/submodules/WatchCommon/Host/WatchCommon-Debug.xcconfig","buck-out/gen/submodules/WatchCommon/Host/WatchCommon-Profile.xcconfig","buck-out/gen/submodules/WatchCommon/Host/WatchCommon-Release.xcconfig","buck-out/gen/submodules/WebP/WebPImage-Debug.xcconfig","buck-out/gen/submodules/WebP/WebPImage-Profile.xcconfig","buck-out/gen/submodules/WebP/WebPImage-Release.xcconfig","buck-out/gen/submodules/WebP/WebP_lib-Debug.xcconfig","buck-out/gen/submodules/WebP/WebP_lib-Profile.xcconfig","buck-out/gen/submodules/WebP/WebP_lib-Release.xcconfig","buck-out/gen/submodules/WebSearchUI/WebSearchUI-Debug.xcconfig","buck-out/gen/submodules/WebSearchUI/WebSearchUI-Profile.xcconfig","buck-out/gen/submodules/WebSearchUI/WebSearchUI-Release.xcconfig","buck-out/gen/submodules/WebUI/WebUI-Debug.xcconfig","buck-out/gen/submodules/WebUI/WebUI-Profile.xcconfig","buck-out/gen/submodules/WebUI/WebUI-Release.xcconfig","buck-out/gen/submodules/WebsiteType/WebsiteType-Debug.xcconfig","buck-out/gen/submodules/WebsiteType/WebsiteType-Profile.xcconfig","buck-out/gen/submodules/WebsiteType/WebsiteType-Release.xcconfig","buck-out/gen/submodules/YuvConversion/YuvConversion-Debug.xcconfig","buck-out/gen/submodules/YuvConversion/YuvConversion-Profile.xcconfig","buck-out/gen/submodules/YuvConversion/YuvConversion-Release.xcconfig","buck-out/gen/submodules/libphonenumber/libphonenumber-Debug.xcconfig","buck-out/gen/submodules/libphonenumber/libphonenumber-Profile.xcconfig","buck-out/gen/submodules/libphonenumber/libphonenumber-Release.xcconfig","buck-out/gen/submodules/libtgvoip/libtgvoip-Debug.xcconfig","buck-out/gen/submodules/libtgvoip/libtgvoip-Profile.xcconfig","buck-out/gen/submodules/libtgvoip/libtgvoip-Release.xcconfig","buck-out/gen/submodules/lottie-ios/Lottie-Debug.xcconfig","buck-out/gen/submodules/lottie-ios/Lottie-Profile.xcconfig","buck-out/gen/submodules/lottie-ios/Lottie-Release.xcconfig","buck-out/gen/submodules/openssl/openssl-Debug.xcconfig","buck-out/gen/submodules/openssl/openssl-Profile.xcconfig","buck-out/gen/submodules/openssl/openssl-Release.xcconfig","buck-out/gen/submodules/rlottie/RLottieBinding-Debug.xcconfig","buck-out/gen/submodules/rlottie/RLottieBinding-Profile.xcconfig","buck-out/gen/submodules/rlottie/RLottieBinding-Release.xcconfig","buck-out/gen/submodules/sqlcipher/sqlcipher-Debug.xcconfig","buck-out/gen/submodules/sqlcipher/sqlcipher-Profile.xcconfig","buck-out/gen/submodules/sqlcipher/sqlcipher-Release.xcconfig","buck-out/gen/submodules/ton/ton-Debug.xcconfig","buck-out/gen/submodules/ton/ton-Profile.xcconfig","buck-out/gen/submodules/ton/ton-Release.xcconfig"],"copy-in-xcode":[]}
\ No newline at end of file
diff --git a/Telegram_Buck.xcworkspace/contents.xcworkspacedata b/Telegram_Buck.xcworkspace/contents.xcworkspacedata
index 3e61562224..b5bb934e6d 100644
--- a/Telegram_Buck.xcworkspace/contents.xcworkspacedata
+++ b/Telegram_Buck.xcworkspace/contents.xcworkspacedata
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/Telegram_Buck.xcworkspace/xcshareddata/xcschemes/Telegram_Buck.xcscheme b/Telegram_Buck.xcworkspace/xcshareddata/xcschemes/Telegram_Buck.xcscheme
index 3a3c953561..480010c721 100644
--- a/Telegram_Buck.xcworkspace/xcshareddata/xcschemes/Telegram_Buck.xcscheme
+++ b/Telegram_Buck.xcworkspace/xcshareddata/xcschemes/Telegram_Buck.xcscheme
@@ -73,7 +73,7 @@
BlueprintIdentifier = "E66DC04EB4B57B8200000000"
BuildableName = "libopenssl.a"
BlueprintName = "openssl"
- ReferencedContainer = "container:submodules/MtProtoKit/MtProtoKit.xcodeproj">
+ ReferencedContainer = "container:submodules/openssl/openssl.xcodeproj">
+ ReferencedContainer = "container:submodules/ton/ton.xcodeproj">
"$TEMP_PATH/temp.plist" && /usr/libexec/PlistBuddy -x -c 'Print:Entitlements' "$TEMP_PATH/temp.plist" > "$PROFILE_ENTITLEMENTS_PATH"
-
- for KEY in "${REMOVE_ENTITLEMENT_KEYS[@]}"; do
- /usr/libexec/PlistBuddy -c "Delete $KEY" "$PROFILE_ENTITLEMENTS_PATH" 2>/dev/null
- done
-
- ENTITLEMENTS_VAR=PACKAGE_ENTITLEMENTS_$ITEM
- if [ ! -z "${!ENTITLEMENTS_VAR}" ]; then
- if [ ! -f "${!ENTITLEMENTS_VAR}" ]; then
- echo "${!ENTITLEMENTS_VAR} does not exist"
- exit 1
- fi
-
- for KEY in "${COPY_ENTITLEMENT_KEYS[@]}"; do
- VALUE=$(PlistBuddy -c "Print :$KEY" "${!ENTITLEMENTS_VAR}")
- echo "$VALUE"
- exit 0
- done
- fi
- declare ENTITLEMENTS_PATH_$ITEM="$PROFILE_ENTITLEMENTS_PATH"
- fi
- done
-done
-
-for ITEM in $APP_ITEMS_WITH_PROVISIONING_PROFILE; do
- PROFILE_PATH_VAR=PROFILE_PATH_$ITEM
- if [ -z "${!PROFILE_PATH_VAR}" ]; then
- echo "Provisioning profile for $ITEM was not found"
- exit 1
- fi
-done
-
-for ITEM in $APP_ITEMS_WITH_ENTITLEMENTS; do
- ENTITLEMENTS_VAR=PACKAGE_ENTITLEMENTS_$ITEM
- if [ -z "${!ENTITLEMENTS_VAR}" ]; then
- echo "$ENTITLEMENTS_VAR is not set"
- exit 1
- fi
- if [ ! -f "${!ENTITLEMENTS_VAR}" ]; then
- echo "${!ENTITLEMENTS_VAR} does not exist"
- exit 1
- fi
-done
-
-if [ -z "$COMMON_IDENTITY_HASH" ]; then
- echo "Failed to determine signing identity"
- exit 1
-fi
-
-for DEPENDENCY in $(${BUCK} query "kind('apple_library', deps('//:Telegram#$PLATFORM_FLAVORS', 1))" "$@"); do
- DEPENDENCY_PATH=$(echo "$DEPENDENCY" | sed -e "s#^//##" | sed -e "s#:#/#")
- DEPENDENCY_NAME=$(echo "$DEPENDENCY" | sed -e "s/#.*//" | sed -e "s/^.*\://")
- DYLIB_PATH="buck-out/gen/$DEPENDENCY_PATH/lib$DEPENDENCY_NAME.dylib"
- TARGET_DYLIB_PATH="$FRAMEWORKS_DIR/lib$DEPENDENCY_NAME.dylib"
- cp "$DYLIB_PATH" "$TARGET_DYLIB_PATH"
- DSYM_PATH="buck-out/gen/$(echo "$DEPENDENCY" | sed -e "s/#/#apple-dsym,/" | sed -e "s#^//##" | sed -e "s#:#/#").dSYM"
- cp -r "$DSYM_PATH" "$DSYMS_DIR/"
-done
-
-APP_BINARY_DSYM_PATH="buck-out/gen/Telegram#dwarf-and-dsym,$PLATFORM_FLAVORS,no-include-frameworks/Telegram.app.dSYM"
-cp -r "$APP_BINARY_DSYM_PATH" "$DSYMS_DIR/"
-
-EXTENSIONS="Share Widget Intents NotificationContent NotificationService"
-for EXTENSION in $EXTENSIONS; do
- EXTENSION_DSYM_PATH="buck-out/gen/${EXTENSION}Extension#dwarf-and-dsym,$PLATFORM_FLAVORS,no-include-frameworks/${EXTENSION}Extension.appex.dSYM"
- cp -r "$EXTENSION_DSYM_PATH" "$DSYMS_DIR/"
-done
-
-WATCH_EXTENSION_DSYM_PATH="buck-out/gen/WatchAppExtension#dwarf-and-dsym,no-include-frameworks,watchos-arm64_32,watchos-armv7k/WatchAppExtension.appex.dSYM"
-cp -r "$WATCH_EXTENSION_DSYM_PATH" "$DSYMS_DIR/"
-
-for LIB in $(ls "$FRAMEWORKS_DIR"/*.dylib); do
- strip -S -T "$LIB"
-done
-
-xcrun swift-stdlib-tool --scan-folder "$IPA_PATH.original.unpacked/Payload/Telegram.app" --scan-folder "$IPA_PATH.original.unpacked/Payload/Telegram.app/Frameworks" --scan-folder "$IPA_PATH.original.unpacked/Payload/Telegram.app/PlugIns" --strip-bitcode --platform iphoneos --copy --destination "$IPA_PATH.original.unpacked/SwiftSupport/iphoneos"
-
-cp "$IPA_PATH.original.unpacked/SwiftSupport/iphoneos/"*.dylib "$FRAMEWORKS_DIR/"
-
-REMOVE_ARCHS="armv7s arm64e"
-
-for framework in "$FRAMEWORKS_DIR"/*; do
- if [[ "$framework" == *.framework || "$framework" == *.dylib ]]; then
- codesign --remove-signature "$framework"
- for ARCH in $REMOVE_ARCHS; do
- lipo -remove "$ARCH" "$framework" -o "$framework" || true
- done
- xcrun bitcode_strip -r "$framework" -o "$framework"
- strip -S -T "$framework"
- /usr/bin/codesign ${VERBOSE} ${KEYCHAIN_FLAG} -f -s "$COMMON_IDENTITY_HASH" "$framework"
- fi
-done
-
-PLUGINS="Share Widget Intents NotificationService NotificationContent"
-for PLUGIN in $PLUGINS; do
- PLUGIN_PATH="$APP_PATH/PlugIns/${PLUGIN}Extension.appex"
- if [ ! -d "$PLUGIN_PATH" ]; then
- echo "Directory at $PLUGIN_PATH does not exist"
- exit 1
- fi
- PROFILE_PATH_VAR="PROFILE_PATH_EXTENSION_$PLUGIN"
- if [ -z "${!PROFILE_PATH_VAR}" ]; then
- echo "$PROFILE_PATH_VAR is not defined"
- exit 1
- fi
- if [ ! -f "${!PROFILE_PATH_VAR}" ]; then
- echo "${!PROFILE_PATH_VAR} does not exist"
- exit 1
- fi
- ENTITLEMENTS_PATH_VAR="ENTITLEMENTS_PATH_EXTENSION_$PLUGIN"
- if [ -z "${!ENTITLEMENTS_PATH_VAR}" ]; then
- echo "$ENTITLEMENTS_PATH_VAR is not defined"
- exit 1
- fi
- if [ ! -f "${!ENTITLEMENTS_PATH_VAR}" ]; then
- echo "${!ENTITLEMENTS_PATH_VAR} does not exist"
- exit 1
- fi
- cp "${!PROFILE_PATH_VAR}" "$PLUGIN_PATH/embedded.mobileprovision"
- /usr/bin/codesign ${VERBOSE} -f -s "$COMMON_IDENTITY_HASH" --entitlements "${!ENTITLEMENTS_PATH_VAR}" "$PLUGIN_PATH"
-done
-
-WATCH_APP_PATH="$APP_PATH/Watch/WatchApp.app"
-WATCH_EXTENSION_PATH="$WATCH_APP_PATH/PlugIns/WatchAppExtension.appex"
-
-WATCH_EXTENSION_PROFILE_PATH_VAR="PROFILE_PATH_WATCH_EXTENSION"
-if [ -z "${!WATCH_EXTENSION_PROFILE_PATH_VAR}" ]; then
- echo "$WATCH_EXTENSION_PROFILE_PATH_VAR is not defined"
- exit 1
-fi
-if [ ! -f "${!WATCH_EXTENSION_PROFILE_PATH_VAR}" ]; then
- echo "${!WATCH_EXTENSION_PROFILE_PATH_VAR} does not exist"
- exit 1
-fi
-WATCH_EXTENSION_ENTITLEMENTS_PATH_VAR="ENTITLEMENTS_PATH_WATCH_EXTENSION"
-if [ -z "${!WATCH_EXTENSION_ENTITLEMENTS_PATH_VAR}" ]; then
- echo "$WATCH_EXTENSION_ENTITLEMENTS_PATH_VAR is not defined"
- exit 1
-fi
-if [ ! -f "${!WATCH_EXTENSION_ENTITLEMENTS_PATH_VAR}" ]; then
- echo "${!WATCH_EXTENSION_ENTITLEMENTS_PATH_VAR} does not exist"
- exit 1
-fi
-
-cp "${!WATCH_EXTENSION_PROFILE_PATH_VAR}" "$WATCH_EXTENSION_PATH/embedded.mobileprovision"
-/usr/bin/codesign ${VERBOSE} -f -s "$COMMON_IDENTITY_HASH" --entitlements "${!WATCH_EXTENSION_ENTITLEMENTS_PATH_VAR}" "$WATCH_EXTENSION_PATH"
-
-WATCH_APP_PROFILE_PATH_VAR="PROFILE_PATH_WATCH_APP"
-if [ -z "${!WATCH_APP_PROFILE_PATH_VAR}" ]; then
- echo "$WATCH_APP_PROFILE_PATH_VAR is not defined"
- exit 1
-fi
-if [ ! -f "${!WATCH_APP_PROFILE_PATH_VAR}" ]; then
- echo "${!WATCH_APP_PROFILE_PATH_VAR} does not exist"
- exit 1
-fi
-WATCH_APP_ENTITLEMENTS_PATH_VAR="ENTITLEMENTS_PATH_WATCH_APP"
-if [ -z "${!WATCH_APP_ENTITLEMENTS_PATH_VAR}" ]; then
- echo "$WATCH_APP_ENTITLEMENTS_PATH_VAR is not defined"
- exit 1
-fi
-if [ ! -f "${!WATCH_APP_ENTITLEMENTS_PATH_VAR}" ]; then
- echo "${!WATCH_APP_ENTITLEMENTS_PATH_VAR} does not exist"
- exit 1
-fi
-
-cp "${!WATCH_APP_PROFILE_PATH_VAR}" "$WATCH_APP_PATH/embedded.mobileprovision"
-/usr/bin/codesign ${VERBOSE} -f -s "$COMMON_IDENTITY_HASH" --entitlements "${!WATCH_APP_ENTITLEMENTS_PATH_VAR}" "$WATCH_APP_PATH"
-
-APP_PROFILE_PATH_VAR="PROFILE_PATH_APP"
-if [ -z "${!APP_PROFILE_PATH_VAR}" ]; then
- echo "$APP_PROFILE_PATH_VAR is not defined"
- exit 1
-fi
-if [ ! -f "${!APP_PROFILE_PATH_VAR}" ]; then
- echo "${!APP_PROFILE_PATH_VAR} does not exist"
- exit 1
-fi
-APP_ENTITLEMENTS_PATH_VAR="ENTITLEMENTS_PATH_APP"
-if [ -z "${!APP_ENTITLEMENTS_PATH_VAR}" ]; then
- echo "$APP_ENTITLEMENTS_PATH_VAR is not defined"
- exit 1
-fi
-if [ ! -f "${!APP_ENTITLEMENTS_PATH_VAR}" ]; then
- echo "${!APP_ENTITLEMENTS_PATH_VAR} does not exist"
- exit 1
-fi
-
-cp "${!APP_PROFILE_PATH_VAR}" "$APP_PATH/embedded.mobileprovision"
-/usr/bin/codesign ${VERBOSE} -f -s "$COMMON_IDENTITY_HASH" --entitlements "${!APP_ENTITLEMENTS_PATH_VAR}" "$APP_PATH"
-
-DIR=$(pwd)
-
-cd "$UNPACKED_PATH"
-if [ "$PACKAGE_METHOD" == "appstore" ]; then
- zip -r "../${APP_NAME}_signed.ipa" Payload SwiftSupport WatchKitSupport2
-elif [ "$PACKAGE_METHOD" == "enterprise" ]; then
- zip -r "../${APP_NAME}_signed.ipa" Payload
-fi
-cd "$DIR"
-
-cd "$BUILD_PATH"
-zip -r "$DSYMS_FOLDER_NAME.zip" "$DSYMS_FOLDER_NAME"
-
-cd "$DIR"
diff --git a/submodules/MtProtoKit/BUCK b/submodules/MtProtoKit/BUCK
index 9e36c8dd13..450f4d878c 100644
--- a/submodules/MtProtoKit/BUCK
+++ b/submodules/MtProtoKit/BUCK
@@ -1,71 +1,4 @@
-load("//Config:buck_rule_macros.bzl", "static_library", "framework", "glob_map", "glob_sub_map", "merge_maps")
-
-genrule(
- name = "openssl_libs",
- srcs = [
- "openssl/iOS/libcrypto.a",
- ],
- bash = "mkdir -p $OUT; cp $SRCS $OUT/",
- out = "openssl_libs",
- visibility = ["PUBLIC"]
-)
-
-apple_library(
- name = "openssl",
- visibility = [
- "//submodules/MtProtoKit:MtProtoKit"
- ],
- header_namespace = "openssl",
- exported_headers = glob([
- "openssl/**/*.h",
- ]),
- exported_linker_flags = [
- "-lcrypto",
- "-L$(location :openssl_libs)",
- ],
-)
-
-ton_lib_names = [
- "adnllite",
- "crc32c",
- "keys",
- "lite-client-common",
- "tdactor",
- "tddb",
- "tdnet",
- "tdutils",
- "tl-lite-utils",
- "tl-utils",
- "tl_api",
- "tl_lite_api",
- "tl_tonlib_api",
- "ton_block",
- "ton_crypto",
- "tonlib",
-]
-
-ton_lib_flags = ["-l" + name for name in ton_lib_names]
-
-genrule(
- name = "ton_libs",
- srcs = glob([
- "TON/iOS/lib/*.a",
- ]),
- bash = "mkdir -p $OUT; cp $SRCS $OUT/",
- out = "ton_libs",
- visibility = ["PUBLIC"]
-)
-
-apple_library(
- name = "ton",
- visibility = [
- "//submodules/MtProtoKit:MtProtoKit"
- ],
- exported_headers = [],
- exported_linker_flags = [
- "-L$(location :ton_libs)",
- ] + ton_lib_flags,
-)
+load("//Config:buck_rule_macros.bzl", "static_library", "framework", "glob_map", "merge_maps")
framework(
name = "MtProtoKit",
@@ -85,9 +18,6 @@ framework(
"thirdparty/AsyncSocket/*.h",
"TON/*.h",
])),
- glob_sub_map("TON/iOS/include/", glob([
- "TON/iOS/include/**/*.h",
- ])),
]),
exported_headers = [
"MtProtoKit/MTTime.h",
@@ -153,8 +83,8 @@ framework(
],
visibility = ["PUBLIC"],
deps = [
- ":openssl",
- ":ton",
+ "//submodules/openssl:openssl",
+ "//submodules/ton:ton",
],
frameworks = [
"$SDKROOT/System/Library/Frameworks/Foundation.framework",
diff --git a/submodules/MtProtoKit/MTPKCS.m b/submodules/MtProtoKit/MTPKCS.m
index 8fc6143692..00f59887b9 100644
--- a/submodules/MtProtoKit/MTPKCS.m
+++ b/submodules/MtProtoKit/MTPKCS.m
@@ -51,7 +51,11 @@
return nil;
}
- result = [[MTPKCS alloc] initWithName:[NSString stringWithUTF8String:cert->name] data:[NSData dataWithBytes:cert->cert_info->key->public_key->data length:cert->cert_info->key->public_key->length]];
+ X509_NAME *name = X509_get_subject_name(cert);
+ EVP_PKEY *publicKey = X509_get_pubkey(cert);
+
+ assert(false);
+ //result = [[MTPKCS alloc] initWithName:[NSString stringWithUTF8String:cert->name] data:[NSData dataWithBytes:cert->cert_info->key->public_key->data length:cert->cert_info->key->public_key->length]];
return result;
}
diff --git a/submodules/MtProtoKit/MTProtoKit/MTEncryption.m b/submodules/MtProtoKit/MTProtoKit/MTEncryption.m
index 3bf73680c7..4e778873f9 100644
--- a/submodules/MtProtoKit/MTProtoKit/MTEncryption.m
+++ b/submodules/MtProtoKit/MTProtoKit/MTEncryption.m
@@ -10,6 +10,7 @@
#include
#include
+#include
#import "MTAes.h"
#import "MTRsa.h"
@@ -800,17 +801,20 @@ uint64_t MTRsaFingerprint(NSString *key) {
BIO_write(keyBio, keyData.bytes, (int)keyData.length);
RSA *rsaKey = PEM_read_bio_RSAPublicKey(keyBio, NULL, NULL, NULL);
- int nBytes = BN_num_bytes(rsaKey->n);
- int eBytes = BN_num_bytes(rsaKey->e);
+ BIGNUM *rsaKeyN = RSA_get0_n(rsaKey);
+ BIGNUM *rsaKeyE = RSA_get0_e(rsaKey);
+
+ int nBytes = BN_num_bytes(rsaKeyN);
+ int eBytes = BN_num_bytes(rsaKeyE);
MTBuffer *buffer = [[MTBuffer alloc] init];
NSMutableData *nData = [[NSMutableData alloc] initWithLength:nBytes];
- BN_bn2bin(rsaKey->n, nData.mutableBytes);
+ BN_bn2bin(rsaKeyN, nData.mutableBytes);
[buffer appendTLBytes:nData];
NSMutableData *eData = [[NSMutableData alloc] initWithLength:eBytes];
- BN_bn2bin(rsaKey->e, eData.mutableBytes);
+ BN_bn2bin(rsaKeyE, eData.mutableBytes);
[buffer appendTLBytes:eData];
NSData *sha1Data = MTSha1(buffer.data);
@@ -877,32 +881,33 @@ static NSData *decrypt_TL_data(unsigned char buffer[256]) {
return nil;
}
- BIGNUM x, y;
+ BIGNUM *x = BN_new();
+ BIGNUM *y = BN_new();
BN_CTX *bnContext = BN_CTX_new();
uint8_t *bytes = buffer;
- BN_init(&x);
- BN_init(&y);
- BN_bin2bn(bytes, 256, &x);
+ BN_bin2bn(bytes, 256, x);
+
+ BIGNUM *rsaKeyN = RSA_get0_n(rsaKey);
+ BIGNUM *rsaKeyE = RSA_get0_e(rsaKey);
NSData *result = nil;
- if (BN_mod_exp(&y, &x, rsaKey->e, rsaKey->n, bnContext) == 1) {
- unsigned l = 256 - BN_num_bytes(&y);
+ if (BN_mod_exp(y, x, rsaKeyE, rsaKeyN, bnContext) == 1) {
+ unsigned l = 256 - BN_num_bytes(y);
memset(bytes, 0, l);
- if (BN_bn2bin(&y, bytes + l) == 256 - l) {
+ if (BN_bn2bin(y, bytes + l) == 256 - l) {
AES_KEY aeskey;
unsigned char iv[16];
memcpy(iv, bytes + 16, 16);
AES_set_decrypt_key(bytes, 256, &aeskey);
AES_cbc_encrypt(bytes + 32, bytes + 32, 256 - 32, &aeskey, iv, AES_DECRYPT);
- EVP_MD_CTX ctx;
+ EVP_MD_CTX *ctx = EVP_MD_CTX_new();
unsigned char sha256_out[32];
unsigned olen = 0;
- EVP_MD_CTX_init(&ctx);
- EVP_DigestInit_ex(&ctx, EVP_sha256(), NULL);
- EVP_DigestUpdate(&ctx, bytes + 32, 256 - 32 - 16);
- EVP_DigestFinal_ex(&ctx, sha256_out, &olen);
- EVP_MD_CTX_cleanup(&ctx);
+ EVP_DigestInit_ex(ctx, EVP_sha256(), NULL);
+ EVP_DigestUpdate(ctx, bytes + 32, 256 - 32 - 16);
+ EVP_DigestFinal_ex(ctx, sha256_out, &olen);
+ EVP_MD_CTX_free(ctx);
if (olen == 32) {
if (memcmp(bytes + 256 - 16, sha256_out, 16) == 0) {
unsigned data_len = *(unsigned *) (bytes + 32);
@@ -921,8 +926,8 @@ static NSData *decrypt_TL_data(unsigned char buffer[256]) {
}
}
}
- BN_free(&x);
- BN_free(&y);
+ BN_free(x);
+ BN_free(y);
RSA_free(rsaKey);
BIO_free(keyBio);
BN_CTX_free(bnContext);
diff --git a/submodules/MtProtoKit/TON/iOS/include/td/utils/config.h b/submodules/MtProtoKit/TON/iOS/include/td/utils/config.h
deleted file mode 100644
index bb671cfa26..0000000000
--- a/submodules/MtProtoKit/TON/iOS/include/td/utils/config.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#pragma once
-
-#define TD_HAVE_OPENSSL 1
-#define TD_HAVE_ZLIB 1
-#define TD_HAVE_CRC32C 1
-#define TD_HAVE_COROUTINES 0
-#define TD_HAVE_ABSL 0
-#define TD_HAVE_GETOPT 1
-#define TD_FD_DEBUG 0
diff --git a/submodules/MtProtoKit/TON/iOS/lib/libadnllite.a b/submodules/MtProtoKit/TON/iOS/lib/libadnllite.a
deleted file mode 100644
index 41072ac124..0000000000
Binary files a/submodules/MtProtoKit/TON/iOS/lib/libadnllite.a and /dev/null differ
diff --git a/submodules/MtProtoKit/TON/iOS/lib/libcrc32c.a b/submodules/MtProtoKit/TON/iOS/lib/libcrc32c.a
deleted file mode 100644
index c19afc4fb8..0000000000
Binary files a/submodules/MtProtoKit/TON/iOS/lib/libcrc32c.a and /dev/null differ
diff --git a/submodules/MtProtoKit/TON/iOS/lib/libkeys.a b/submodules/MtProtoKit/TON/iOS/lib/libkeys.a
deleted file mode 100644
index 1e04be7bd7..0000000000
Binary files a/submodules/MtProtoKit/TON/iOS/lib/libkeys.a and /dev/null differ
diff --git a/submodules/MtProtoKit/TON/iOS/lib/liblite-client-common.a b/submodules/MtProtoKit/TON/iOS/lib/liblite-client-common.a
deleted file mode 100644
index d249337c8f..0000000000
Binary files a/submodules/MtProtoKit/TON/iOS/lib/liblite-client-common.a and /dev/null differ
diff --git a/submodules/MtProtoKit/TON/iOS/lib/libtdactor.a b/submodules/MtProtoKit/TON/iOS/lib/libtdactor.a
deleted file mode 100644
index 6433e04a3d..0000000000
Binary files a/submodules/MtProtoKit/TON/iOS/lib/libtdactor.a and /dev/null differ
diff --git a/submodules/MtProtoKit/TON/iOS/lib/libtddb.a b/submodules/MtProtoKit/TON/iOS/lib/libtddb.a
deleted file mode 100644
index 6e2af6bafe..0000000000
Binary files a/submodules/MtProtoKit/TON/iOS/lib/libtddb.a and /dev/null differ
diff --git a/submodules/MtProtoKit/TON/iOS/lib/libtdnet.a b/submodules/MtProtoKit/TON/iOS/lib/libtdnet.a
deleted file mode 100644
index 5bc5dbce83..0000000000
Binary files a/submodules/MtProtoKit/TON/iOS/lib/libtdnet.a and /dev/null differ
diff --git a/submodules/MtProtoKit/TON/iOS/lib/libtdutils.a b/submodules/MtProtoKit/TON/iOS/lib/libtdutils.a
deleted file mode 100644
index 8ff7e1f9b7..0000000000
Binary files a/submodules/MtProtoKit/TON/iOS/lib/libtdutils.a and /dev/null differ
diff --git a/submodules/MtProtoKit/TON/iOS/lib/libtl-lite-utils.a b/submodules/MtProtoKit/TON/iOS/lib/libtl-lite-utils.a
deleted file mode 100644
index 30559a49fa..0000000000
Binary files a/submodules/MtProtoKit/TON/iOS/lib/libtl-lite-utils.a and /dev/null differ
diff --git a/submodules/MtProtoKit/TON/iOS/lib/libtl-utils.a b/submodules/MtProtoKit/TON/iOS/lib/libtl-utils.a
deleted file mode 100644
index ccda28c8b0..0000000000
Binary files a/submodules/MtProtoKit/TON/iOS/lib/libtl-utils.a and /dev/null differ
diff --git a/submodules/MtProtoKit/TON/iOS/lib/libtl_api.a b/submodules/MtProtoKit/TON/iOS/lib/libtl_api.a
deleted file mode 100644
index 302099ebe6..0000000000
Binary files a/submodules/MtProtoKit/TON/iOS/lib/libtl_api.a and /dev/null differ
diff --git a/submodules/MtProtoKit/TON/iOS/lib/libtl_lite_api.a b/submodules/MtProtoKit/TON/iOS/lib/libtl_lite_api.a
deleted file mode 100644
index 22160af5f3..0000000000
Binary files a/submodules/MtProtoKit/TON/iOS/lib/libtl_lite_api.a and /dev/null differ
diff --git a/submodules/MtProtoKit/TON/iOS/lib/libtl_tonlib_api.a b/submodules/MtProtoKit/TON/iOS/lib/libtl_tonlib_api.a
deleted file mode 100644
index 0e600a0910..0000000000
Binary files a/submodules/MtProtoKit/TON/iOS/lib/libtl_tonlib_api.a and /dev/null differ
diff --git a/submodules/MtProtoKit/TON/iOS/lib/libton_block.a b/submodules/MtProtoKit/TON/iOS/lib/libton_block.a
deleted file mode 100644
index 79b137413d..0000000000
Binary files a/submodules/MtProtoKit/TON/iOS/lib/libton_block.a and /dev/null differ
diff --git a/submodules/MtProtoKit/TON/iOS/lib/libton_crypto.a b/submodules/MtProtoKit/TON/iOS/lib/libton_crypto.a
deleted file mode 100644
index ac3f27ad14..0000000000
Binary files a/submodules/MtProtoKit/TON/iOS/lib/libton_crypto.a and /dev/null differ
diff --git a/submodules/MtProtoKit/TON/iOS/lib/libtonlib.a b/submodules/MtProtoKit/TON/iOS/lib/libtonlib.a
deleted file mode 100644
index cda1c5a30d..0000000000
Binary files a/submodules/MtProtoKit/TON/iOS/lib/libtonlib.a and /dev/null differ
diff --git a/submodules/ffmpeg/BUCK b/submodules/ffmpeg/BUCK
index 82f747f3b8..aed1b5364a 100644
--- a/submodules/ffmpeg/BUCK
+++ b/submodules/ffmpeg/BUCK
@@ -106,7 +106,7 @@ ffmpeg_header_paths = [
"libswresample/swresample.h",
]
-library_archs = "arm64 armv7 x86_64"# if native.read_config("custom", "mode") == "project" else "arm64 armv7"
+library_archs = "arm64 armv7 x86_64"
genrule(
name = "libffmpeg_build",
diff --git a/submodules/openssl/BUCK b/submodules/openssl/BUCK
new file mode 100644
index 0000000000..8e26f2d2fa
--- /dev/null
+++ b/submodules/openssl/BUCK
@@ -0,0 +1,160 @@
+load("//Config:buck_rule_macros.bzl", "static_library", "gen_header_targets")
+
+openssl_headers = [
+ "aes.h",
+ "asn1.h",
+ "asn1_mac.h",
+ "asn1err.h",
+ "asn1t.h",
+ "async.h",
+ "asyncerr.h",
+ "bio.h",
+ "bioerr.h",
+ "blowfish.h",
+ "bn.h",
+ "bnerr.h",
+ "buffer.h",
+ "buffererr.h",
+ "camellia.h",
+ "cast.h",
+ "cmac.h",
+ "cms.h",
+ "cmserr.h",
+ "comp.h",
+ "comperr.h",
+ "conf.h",
+ "conf_api.h",
+ "conferr.h",
+ "crypto.h",
+ "cryptoerr.h",
+ "ct.h",
+ "cterr.h",
+ "des.h",
+ "dh.h",
+ "dherr.h",
+ "dsa.h",
+ "dsaerr.h",
+ "dtls1.h",
+ "e_os2.h",
+ "ebcdic.h",
+ "ec.h",
+ "ecdh.h",
+ "ecdsa.h",
+ "ecerr.h",
+ "engine.h",
+ "engineerr.h",
+ "err.h",
+ "evp.h",
+ "evperr.h",
+ "hmac.h",
+ "idea.h",
+ "kdf.h",
+ "kdferr.h",
+ "lhash.h",
+ "md2.h",
+ "md4.h",
+ "md5.h",
+ "mdc2.h",
+ "modes.h",
+ "obj_mac.h",
+ "objects.h",
+ "objectserr.h",
+ "ocsp.h",
+ "ocsperr.h",
+ "opensslconf.h",
+ "opensslv.h",
+ "ossl_typ.h",
+ "pem.h",
+ "pem2.h",
+ "pemerr.h",
+ "pkcs12.h",
+ "pkcs12err.h",
+ "pkcs7.h",
+ "pkcs7err.h",
+ "rand.h",
+ "rand_drbg.h",
+ "randerr.h",
+ "rc2.h",
+ "rc4.h",
+ "rc5.h",
+ "ripemd.h",
+ "rsa.h",
+ "rsaerr.h",
+ "safestack.h",
+ "seed.h",
+ "sha.h",
+ "srp.h",
+ "srtp.h",
+ "ssl.h",
+ "ssl2.h",
+ "ssl3.h",
+ "sslerr.h",
+ "stack.h",
+ "store.h",
+ "storeerr.h",
+ "symhacks.h",
+ "tls1.h",
+ "ts.h",
+ "tserr.h",
+ "txt_db.h",
+ "ui.h",
+ "uierr.h",
+ "whrlpool.h",
+ "x509.h",
+ "x509_vfy.h",
+ "x509err.h",
+ "x509v3.h",
+ "x509v3err.h",
+]
+
+openssl_header_paths = ["openssl/" + header for header in openssl_headers]
+
+archs = ["arm64", "armv7", "x86_64"]
+
+rules = [
+ genrule(
+ name = "openssl_build_" + arch,
+ srcs = glob([
+ "build-openssl.sh",
+ "*.tar.gz",
+ "*.patch",
+ ]),
+ bash = "sh $SRCDIR/build-openssl.sh $OUT $SRCDIR " + arch,
+ out = "openssl_" + arch,
+ visibility = [
+ "//submodules/openssl:...",
+ ]
+ ) for arch in archs
+]
+
+genrule(
+ name = "openssl_build_merged",
+ srcs = [
+ "pack-openssl.sh",
+ ],
+ bash = "sh $SRCDIR/pack-openssl.sh $OUT $(location :openssl_build_arm64)/out/include " + " ".join(["$(location :openssl_build_" + arch + ")/out/lib/libcrypto.a" for arch in archs]),
+ out = "openssl",
+ visibility = [
+ "PUBLIC",
+ ]
+)
+
+openssl_header_targets = gen_header_targets(openssl_header_paths, "openssl_header_", "", "openssl_build_arm64", "out/include")
+
+apple_library(
+ name = "openssl",
+ visibility = [
+ "PUBLIC",
+ ],
+ header_namespace = "openssl",
+ exported_headers = openssl_header_targets,
+ linker_flags = [
+ "-L$(location :openssl_build_merged)/lib",
+ "-lcrypto",
+ ],
+ exported_linker_flags = [
+ "-L$(location :openssl_build_merged)/lib",
+ "-lcrypto",
+ ],
+ deps = [":openssl_build_" + arch for arch in ["arm64"]],
+)
diff --git a/submodules/openssl/build-openssl.sh b/submodules/openssl/build-openssl.sh
new file mode 100644
index 0000000000..f2b2c487c4
--- /dev/null
+++ b/submodules/openssl/build-openssl.sh
@@ -0,0 +1,195 @@
+#!/bin/bash
+
+OUT_DIR="$1"
+SRC_DIR="$2"
+ARCH="$3"
+
+if [ "$ARCH" != "arm64" ] && [ "$ARCH" != "armv7" ] && [ "$ARCH" != "x86_64" ]; then
+ echo "Invalid architecture $ARCH"
+ exit 1
+fi
+
+if [ -z "$OUT_DIR" ]; then
+ echo "Usage: sh build-openssl.sh OUT_DIR SRC_DIR ARCH"
+ exit 1
+fi
+
+if [ -z "$SRC_DIR" ]; then
+ echo "Usage: sh build-openssl.sh OUT_DIR SRC_DIR ARCH"
+ exit 1
+fi
+
+if [ ! -d "$SRC_DIR" ]; then
+ echo "$SRC_DIR does not exist"
+ exit 1
+fi
+
+mkdir -p "$OUT_DIR"
+
+TMP_DIR="$OUT_DIR/build"
+rm -rf "$TMP_DIR"
+mkdir -p "$TMP_DIR"
+
+CROSS_TOP_SIM="`xcode-select --print-path`/Platforms/iPhoneSimulator.platform/Developer"
+CROSS_SDK_SIM="iPhoneSimulator.sdk"
+
+CROSS_TOP_IOS="`xcode-select --print-path`/Platforms/iPhoneOS.platform/Developer"
+CROSS_SDK_IOS="iPhoneOS.sdk"
+
+SOURCE_DIR="$OUT_DIR/openssl-1.1.1d"
+SOURCE_ARCHIVE="$SRC_DIR/openssl-1.1.1d.tar.gz"
+
+rm -rf "$SOURCE_DIR"
+
+tar -xzf "$SOURCE_ARCHIVE" --directory "$OUT_DIR"
+
+export CROSS_COMPILE=`xcode-select --print-path`/Toolchains/XcodeDefault.xctoolchain/usr/bin/
+
+function build_for ()
+{
+ DIR="$(pwd)"
+ cd "$SOURCE_DIR"
+
+ PLATFORM="$1"
+ ARCH="$2"
+ CROSS_TOP_ENV="CROSS_TOP_$3"
+ CROSS_SDK_ENV="CROSS_SDK_$3"
+
+ make clean
+
+ export CROSS_TOP="${!CROSS_TOP_ENV}"
+ export CROSS_SDK="${!CROSS_SDK_ENV}"
+
+ MINIMAL_FLAGS=(\
+ "no-afalgeng" \
+ "no-aria" \
+ "no-asan" \
+ "no-async" \
+ "no-autoalginit" \
+ "no-autoerrinit" \
+ "no-autoload-config" \
+ "no-bf" \
+ "no-blake2" \
+ "no-buildtest-c++" \
+ "no-camellia" \
+ "no-capieng" \
+ "no-cast" \
+ "no-chacha" \
+ "no-cmac" \
+ "no-cms" \
+ "no-comp" \
+ "no-crypto-mdebug" \
+ "no-crypto-mdebug-backtrace" \
+ "no-ct" \
+ "no-deprecated" \
+ "no-des" \
+ "no-devcryptoeng" \
+ "no-dgram" \
+ "no-dh" \
+ "no-dsa" \
+ "no-dtls" \
+ "no-dynamic-engine" \
+ "no-ec" \
+ "no-ec2m" \
+ "no-ecdh" \
+ "no-ecdsa" \
+ "no-ec_nistp_64_gcc_128" \
+ "no-egd" \
+ "no-engine" \
+ "no-err" \
+ "no-external-tests" \
+ "no-filenames" \
+ "no-fuzz-libfuzzer" \
+ "no-fuzz-afl" \
+ "no-gost" \
+ "no-heartbeats" \
+ "no-idea" \
+ "no-makedepend" \
+ "no-md2" \
+ "no-md4" \
+ "no-mdc2" \
+ "no-msan" \
+ "no-multiblock" \
+ "no-nextprotoneg" \
+ "no-pinshared" \
+ "no-ocb" \
+ "no-ocsp" \
+ "no-pic" \
+ "no-poly1305" \
+ "no-posix-io" \
+ "no-psk" \
+ "no-rc2" \
+ "no-rc4" \
+ "no-rc5" \
+ "no-rfc3779" \
+ "no-rmd160" \
+ "no-scrypt" \
+ "no-sctp" \
+ "no-shared" \
+ "no-siphash" \
+ "no-sm2" \
+ "no-sm3" \
+ "no-sm4" \
+ "no-sock" \
+ "no-srp" \
+ "no-srtp" \
+ "no-sse2" \
+ "no-ssl" \
+ "no-ssl-trace" \
+ "no-static-engine" \
+ "no-stdio" \
+ "no-tests" \
+ "no-tls" \
+ "no-ts" \
+ "no-ubsan" \
+ "no-ui-console" \
+ "no-unit-test" \
+ "no-whirlpool" \
+ "no-weak-ssl-ciphers" \
+ "no-zlib" \
+ "no-zlib-dynamic" \
+ )
+
+ DEFAULT_FLAGS=(\
+ "no-asm" \
+ "no-ssl3" \
+ "no-comp" \
+ "no-hw" \
+ "no-engine" \
+ "no-async" \
+ )
+
+ ADDITIONAL_FLAGS=$DEFAULT_FLAGS
+
+ ./Configure $PLATFORM "-arch $ARCH" ${ADDITIONAL_FLAGS[@]} --prefix=${TMP_DIR}/${ARCH} || exit 1
+
+ make && make install_sw || exit 2
+ unset CROSS_TOP
+ unset CROSS_SDK
+
+ cd "$DIR"
+}
+
+patch "$SOURCE_DIR/Configurations/10-main.conf" < patch-conf.patch || exit 1
+
+if [ "$ARCH" == "x86_64" ]; then
+ build_for ios64sim-cross x86_64 SIM || exit 2
+elif [ "$ARCH" == "armv7" ]; then
+ build_for ios-cross armv7 IOS || exit 4
+elif [ "$ARCH" == "arm64" ]; then
+ build_for ios64-cross arm64 IOS || exit 5
+else
+ echo "Invalid architecture $ARCH"
+ exit 1
+fi
+
+cp -r "${TMP_DIR}/$ARCH/include" "${TMP_DIR}/"
+patch -p3 "${TMP_DIR}/include/openssl/opensslconf.h" < patch-include.patch
+
+DFT_DIST_DIR="$OUT_DIR/out"
+rm -rf "$DFT_DIST_DIR"
+mkdir -p "$DFT_DIST_DIR"
+
+DIST_DIR="${DIST_DIR:-$DFT_DIST_DIR}"
+mkdir -p "${DIST_DIR}"
+cp -r "${TMP_DIR}/include" "${TMP_DIR}/$ARCH/lib" "${DIST_DIR}"
\ No newline at end of file
diff --git a/submodules/openssl/openssl-1.1.1d.tar.gz b/submodules/openssl/openssl-1.1.1d.tar.gz
new file mode 100644
index 0000000000..216017a51b
Binary files /dev/null and b/submodules/openssl/openssl-1.1.1d.tar.gz differ
diff --git a/submodules/openssl/openssl.xcodeproj/project.pbxproj b/submodules/openssl/openssl.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000..d8fb540584
--- /dev/null
+++ b/submodules/openssl/openssl.xcodeproj/project.pbxproj
@@ -0,0 +1,3393 @@
+
+
+
+
+ archiveVersion
+ 1
+ classes
+
+
+ objectVersion
+ 46
+ objects
+
+ 1DD70E29F2B988F300000000
+
+ isa
+ PBXFileReference
+ name
+ openssl-Debug.xcconfig
+ path
+ ../../buck-out/gen/submodules/openssl/openssl-Debug.xcconfig
+ sourceTree
+ SOURCE_ROOT
+ explicitFileType
+ text.xcconfig
+
+ 1DD70E290F9DAF9D00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl-Profile.xcconfig
+ path
+ ../../buck-out/gen/submodules/openssl/openssl-Profile.xcconfig
+ sourceTree
+ SOURCE_ROOT
+ explicitFileType
+ text.xcconfig
+
+ 1DD70E2983345AFF00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl-Release.xcconfig
+ path
+ ../../buck-out/gen/submodules/openssl/openssl-Release.xcconfig
+ sourceTree
+ SOURCE_ROOT
+ explicitFileType
+ text.xcconfig
+
+ B401C9792F7F325000000000
+
+ isa
+ PBXGroup
+ name
+ Buck (Do Not Modify)
+ sourceTree
+ ]]>
+ children
+
+ 1DD70E29F2B988F300000000
+ 1DD70E290F9DAF9D00000000
+ 1DD70E2983345AFF00000000
+
+
+ B401C979B781F65D00000000
+
+ isa
+ PBXGroup
+ name
+ Configurations
+ sourceTree
+ ]]>
+ children
+
+ B401C9792F7F325000000000
+
+
+ 1DD70E2927456D0000000000
+
+ isa
+ PBXFileReference
+ name
+ build-openssl.sh
+ path
+ build-openssl.sh
+ sourceTree
+ SOURCE_ROOT
+ explicitFileType
+ text.script.sh
+
+ 1DD70E29454E291200000000
+
+ isa
+ PBXFileReference
+ name
+ openssl-1.1.1d.tar.gz
+ path
+ openssl-1.1.1d.tar.gz
+ sourceTree
+ SOURCE_ROOT
+ explicitFileType
+ archive.gzip
+
+ 1DD70E29D077687500000000
+
+ isa
+ PBXFileReference
+ name
+ pack-openssl.sh
+ path
+ pack-openssl.sh
+ sourceTree
+ SOURCE_ROOT
+ explicitFileType
+ text.script.sh
+
+ 1DD70E296AE49FA300000000
+
+ isa
+ PBXFileReference
+ name
+ patch-conf.patch
+ path
+ patch-conf.patch
+ sourceTree
+ SOURCE_ROOT
+
+ 1DD70E29C3BAB6BD00000000
+
+ isa
+ PBXFileReference
+ name
+ patch-include.patch
+ path
+ patch-include.patch
+ sourceTree
+ SOURCE_ROOT
+
+ B401C979048F8EF000000000
+
+ isa
+ PBXGroup
+ name
+ Other
+ sourceTree
+ ]]>
+ children
+
+ 1DD70E2927456D0000000000
+ 1DD70E29454E291200000000
+ 1DD70E29D077687500000000
+ 1DD70E296AE49FA300000000
+ 1DD70E29C3BAB6BD00000000
+
+
+ 1DD70E2932210C1000000000
+
+ isa
+ PBXFileReference
+ name
+ libopenssl.a
+ path
+ libopenssl.a
+ sourceTree
+ BUILT_PRODUCTS_DIR
+ explicitFileType
+ archive.ar
+
+ B401C979C806358400000000
+
+ isa
+ PBXGroup
+ name
+ Products
+ sourceTree
+ ]]>
+ children
+
+ 1DD70E2932210C1000000000
+
+
+ 1DD70E29001F47FB00000000
+
+ isa
+ PBXFileReference
+ name
+ BUCK
+ path
+ BUCK
+ sourceTree
+ SOURCE_ROOT
+ explicitFileType
+ text.script.python
+
+ 1DD70E29A7C744B800000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_aes.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_aes.h/openssl_header_openssl_sub_aes.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A7C744B800000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_aes.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_aes.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A7C744B800000000
+
+
+ 1DD70E2951E45A2000000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_asn1.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_asn1.h/openssl_header_openssl_sub_asn1.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C97951E45A2000000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_asn1.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_asn1.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E2951E45A2000000000
+
+
+ 1DD70E2909FBC7B000000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_asn1_mac.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_asn1_mac.h/openssl_header_openssl_sub_asn1_mac.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C97909FBC7B000000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_asn1_mac.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_asn1_mac.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E2909FBC7B000000000
+
+
+ 1DD70E29DFA13C3900000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_asn1err.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_asn1err.h/openssl_header_openssl_sub_asn1err.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979DFA13C3900000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_asn1err.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_asn1err.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29DFA13C3900000000
+
+
+ 1DD70E29EAA7EA0800000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_asn1t.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_asn1t.h/openssl_header_openssl_sub_asn1t.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979EAA7EA0800000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_asn1t.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_asn1t.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29EAA7EA0800000000
+
+
+ 1DD70E29EB5E676500000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_async.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_async.h/openssl_header_openssl_sub_async.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979EB5E676500000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_async.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_async.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29EB5E676500000000
+
+
+ 1DD70E2921EF6CD400000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_asyncerr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_asyncerr.h/openssl_header_openssl_sub_asyncerr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C97921EF6CD400000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_asyncerr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_asyncerr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E2921EF6CD400000000
+
+
+ 1DD70E29A7D71EB100000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_bio.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_bio.h/openssl_header_openssl_sub_bio.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A7D71EB100000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_bio.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_bio.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A7D71EB100000000
+
+
+ 1DD70E29C5C9E20800000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_bioerr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_bioerr.h/openssl_header_openssl_sub_bioerr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979C5C9E20800000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_bioerr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_bioerr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29C5C9E20800000000
+
+
+ 1DD70E29DAFD603500000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_blowfish.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_blowfish.h/openssl_header_openssl_sub_blowfish.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979DAFD603500000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_blowfish.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_blowfish.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29DAFD603500000000
+
+
+ 1DD70E29BB177FB700000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_bn.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_bn.h/openssl_header_openssl_sub_bn.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979BB177FB700000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_bn.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_bn.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29BB177FB700000000
+
+
+ 1DD70E2916A49B4200000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_bnerr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_bnerr.h/openssl_header_openssl_sub_bnerr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C97916A49B4200000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_bnerr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_bnerr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E2916A49B4200000000
+
+
+ 1DD70E2931413A2B00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_buffer.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_buffer.h/openssl_header_openssl_sub_buffer.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C97931413A2B00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_buffer.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_buffer.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E2931413A2B00000000
+
+
+ 1DD70E29D89D5C4E00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_buffererr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_buffererr.h/openssl_header_openssl_sub_buffererr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979D89D5C4E00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_buffererr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_buffererr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29D89D5C4E00000000
+
+
+ 1DD70E29F2C63C3900000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_camellia.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_camellia.h/openssl_header_openssl_sub_camellia.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979F2C63C3900000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_camellia.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_camellia.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29F2C63C3900000000
+
+
+ 1DD70E295453A5AA00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_cast.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_cast.h/openssl_header_openssl_sub_cast.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9795453A5AA00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_cast.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_cast.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E295453A5AA00000000
+
+
+ 1DD70E2954F4513700000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_cmac.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_cmac.h/openssl_header_openssl_sub_cmac.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C97954F4513700000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_cmac.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_cmac.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E2954F4513700000000
+
+
+ 1DD70E29A7E716B200000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_cms.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_cms.h/openssl_header_openssl_sub_cms.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A7E716B200000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_cms.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_cms.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A7E716B200000000
+
+
+ 1DD70E2908175E6700000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_cmserr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_cmserr.h/openssl_header_openssl_sub_cmserr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C97908175E6700000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_cmserr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_cmserr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E2908175E6700000000
+
+
+ 1DD70E295516257A00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_comp.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_comp.h/openssl_header_openssl_sub_comp.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9795516257A00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_comp.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_comp.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E295516257A00000000
+
+
+ 1DD70E299F407A9F00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_comperr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_comperr.h/openssl_header_openssl_sub_comperr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9799F407A9F00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_comperr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_comperr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E299F407A9F00000000
+
+
+ 1DD70E295516744F00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_conf.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_conf.h/openssl_header_openssl_sub_conf.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9795516744F00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_conf.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_conf.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E295516744F00000000
+
+
+ 1DD70E299485006A00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_conf_api.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_conf_api.h/openssl_header_openssl_sub_conf_api.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9799485006A00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_conf_api.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_conf_api.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E299485006A00000000
+
+
+ 1DD70E29C3163FAA00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_conferr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_conferr.h/openssl_header_openssl_sub_conferr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979C3163FAA00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_conferr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_conferr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29C3163FAA00000000
+
+
+ 1DD70E291B6F7A6C00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_crypto.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_crypto.h/openssl_header_openssl_sub_crypto.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9791B6F7A6C00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_crypto.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_crypto.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E291B6F7A6C00000000
+
+
+ 1DD70E29B4E4A86D00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_cryptoerr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_cryptoerr.h/openssl_header_openssl_sub_cryptoerr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979B4E4A86D00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_cryptoerr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_cryptoerr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29B4E4A86D00000000
+
+
+ 1DD70E29BB180A9C00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_ct.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ct.h/openssl_header_openssl_sub_ct.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979BB180A9C00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_ct.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ct.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29BB180A9C00000000
+
+
+ 1DD70E2955C7EA3D00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_cterr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_cterr.h/openssl_header_openssl_sub_cterr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C97955C7EA3D00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_cterr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_cterr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E2955C7EA3D00000000
+
+
+ 1DD70E29A7F18B3B00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_des.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_des.h/openssl_header_openssl_sub_des.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A7F18B3B00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_des.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_des.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A7F18B3B00000000
+
+
+ 1DD70E29BB1851EF00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_dh.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_dh.h/openssl_header_openssl_sub_dh.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979BB1851EF00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_dh.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_dh.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29BB1851EF00000000
+
+
+ 1DD70E297633FE0A00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_dherr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_dherr.h/openssl_header_openssl_sub_dherr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9797633FE0A00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_dherr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_dherr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E297633FE0A00000000
+
+
+ 1DD70E29A7F7A4DB00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_dsa.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_dsa.h/openssl_header_openssl_sub_dsa.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A7F7A4DB00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_dsa.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_dsa.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A7F7A4DB00000000
+
+
+ 1DD70E298EA6B39E00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_dsaerr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_dsaerr.h/openssl_header_openssl_sub_dsaerr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9798EA6B39E00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_dsaerr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_dsaerr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E298EA6B39E00000000
+
+
+ 1DD70E298B104A6300000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_dtls1.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_dtls1.h/openssl_header_openssl_sub_dtls1.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9798B104A6300000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_dtls1.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_dtls1.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E298B104A6300000000
+
+
+ 1DD70E299C4B0ADD00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_e_os2.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_e_os2.h/openssl_header_openssl_sub_e_os2.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9799C4B0ADD00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_e_os2.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_e_os2.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E299C4B0ADD00000000
+
+
+ 1DD70E2976953B4300000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_ebcdic.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ebcdic.h/openssl_header_openssl_sub_ebcdic.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C97976953B4300000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_ebcdic.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ebcdic.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E2976953B4300000000
+
+
+ 1DD70E29BB18B38900000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_ec.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ec.h/openssl_header_openssl_sub_ec.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979BB18B38900000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_ec.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ec.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29BB18B38900000000
+
+
+ 1DD70E2957D2874D00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_ecdh.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ecdh.h/openssl_header_openssl_sub_ecdh.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C97957D2874D00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_ecdh.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ecdh.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E2957D2874D00000000
+
+
+ 1DD70E29A2841B3D00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_ecdsa.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ecdsa.h/openssl_header_openssl_sub_ecdsa.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A2841B3D00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_ecdsa.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ecdsa.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A2841B3D00000000
+
+
+ 1DD70E29A291FE3000000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_ecerr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ecerr.h/openssl_header_openssl_sub_ecerr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A291FE3000000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_ecerr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ecerr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A291FE3000000000
+
+
+ 1DD70E29F87C27AD00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_engine.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_engine.h/openssl_header_openssl_sub_engine.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979F87C27AD00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_engine.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_engine.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29F87C27AD00000000
+
+
+ 1DD70E297B1A678C00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_engineerr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_engineerr.h/openssl_header_openssl_sub_engineerr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9797B1A678C00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_engineerr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_engineerr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E297B1A678C00000000
+
+
+ 1DD70E29A80587CE00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_err.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_err.h/openssl_header_openssl_sub_err.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A80587CE00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_err.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_err.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A80587CE00000000
+
+
+ 1DD70E29A80751C800000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_evp.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_evp.h/openssl_header_openssl_sub_evp.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A80751C800000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_evp.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_evp.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A80751C800000000
+
+
+ 1DD70E29AED3439100000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_evperr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_evperr.h/openssl_header_openssl_sub_evperr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979AED3439100000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_evperr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_evperr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29AED3439100000000
+
+
+ 1DD70E295D7C8C5200000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_hmac.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_hmac.h/openssl_header_openssl_sub_hmac.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9795D7C8C5200000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_hmac.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_hmac.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E295D7C8C5200000000
+
+
+ 1DD70E295EB45B6200000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_idea.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_idea.h/openssl_header_openssl_sub_idea.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9795EB45B6200000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_idea.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_idea.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E295EB45B6200000000
+
+
+ 1DD70E29A8538A9600000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_kdf.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_kdf.h/openssl_header_openssl_sub_kdf.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A8538A9600000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_kdf.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_kdf.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A8538A9600000000
+
+
+ 1DD70E2954D9B00300000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_kdferr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_kdferr.h/openssl_header_openssl_sub_kdferr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C97954D9B00300000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_kdferr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_kdferr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E2954D9B00300000000
+
+
+ 1DD70E291D2DC8E300000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_lhash.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_lhash.h/openssl_header_openssl_sub_lhash.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9791D2DC8E300000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_lhash.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_lhash.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E291D2DC8E300000000
+
+
+ 1DD70E29A86EF66400000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_md2.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_md2.h/openssl_header_openssl_sub_md2.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A86EF66400000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_md2.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_md2.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A86EF66400000000
+
+
+ 1DD70E29A86EFDE600000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_md4.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_md4.h/openssl_header_openssl_sub_md4.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A86EFDE600000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_md4.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_md4.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A86EFDE600000000
+
+
+ 1DD70E29A86F01A700000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_md5.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_md5.h/openssl_header_openssl_sub_md5.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A86F01A700000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_md5.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_md5.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A86F01A700000000
+
+
+ 1DD70E29658624B100000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_mdc2.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_mdc2.h/openssl_header_openssl_sub_mdc2.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979658624B100000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_mdc2.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_mdc2.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29658624B100000000
+
+
+ 1DD70E295E2A031900000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_modes.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_modes.h/openssl_header_openssl_sub_modes.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9795E2A031900000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_modes.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_modes.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E295E2A031900000000
+
+
+ 1DD70E2990BA1C7000000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_obj_mac.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_obj_mac.h/openssl_header_openssl_sub_obj_mac.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C97990BA1C7000000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_obj_mac.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_obj_mac.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E2990BA1C7000000000
+
+
+ 1DD70E299A73243D00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_objects.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_objects.h/openssl_header_openssl_sub_objects.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9799A73243D00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_objects.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_objects.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E299A73243D00000000
+
+
+ 1DD70E29803360FC00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_objectserr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_objectserr.h/openssl_header_openssl_sub_objectserr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979803360FC00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_objectserr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_objectserr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29803360FC00000000
+
+
+ 1DD70E2968E9ED1C00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_ocsp.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ocsp.h/openssl_header_openssl_sub_ocsp.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C97968E9ED1C00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_ocsp.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ocsp.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E2968E9ED1C00000000
+
+
+ 1DD70E29F14CF7BD00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_ocsperr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ocsperr.h/openssl_header_openssl_sub_ocsperr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979F14CF7BD00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_ocsperr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ocsperr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29F14CF7BD00000000
+
+
+ 1DD70E2906926CCF00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_opensslconf.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_opensslconf.h/openssl_header_openssl_sub_opensslconf.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C97906926CCF00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_opensslconf.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_opensslconf.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E2906926CCF00000000
+
+
+ 1DD70E29BF9EF5DF00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_opensslv.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_opensslv.h/openssl_header_openssl_sub_opensslv.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979BF9EF5DF00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_opensslv.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_opensslv.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29BF9EF5DF00000000
+
+
+ 1DD70E299EE33DF400000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_ossl_typ.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ossl_typ.h/openssl_header_openssl_sub_ossl_typ.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9799EE33DF400000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_ossl_typ.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ossl_typ.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E299EE33DF400000000
+
+
+ 1DD70E29A89A8EC100000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_pem.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_pem.h/openssl_header_openssl_sub_pem.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A89A8EC100000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_pem.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_pem.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A89A8EC100000000
+
+
+ 1DD70E296AB751C500000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_pem2.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_pem2.h/openssl_header_openssl_sub_pem2.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9796AB751C500000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_pem2.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_pem2.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E296AB751C500000000
+
+
+ 1DD70E299D17B7F800000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_pemerr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_pemerr.h/openssl_header_openssl_sub_pemerr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9799D17B7F800000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_pemerr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_pemerr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E299D17B7F800000000
+
+
+ 1DD70E29CA1371F700000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_pkcs12.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_pkcs12.h/openssl_header_openssl_sub_pkcs12.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979CA1371F700000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_pkcs12.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_pkcs12.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29CA1371F700000000
+
+
+ 1DD70E29CFE8810200000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_pkcs12err.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_pkcs12err.h/openssl_header_openssl_sub_pkcs12err.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979CFE8810200000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_pkcs12err.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_pkcs12err.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29CFE8810200000000
+
+
+ 1DD70E29F600B6D500000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_pkcs7.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_pkcs7.h/openssl_header_openssl_sub_pkcs7.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979F600B6D500000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_pkcs7.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_pkcs7.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29F600B6D500000000
+
+
+ 1DD70E29A029A76400000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_pkcs7err.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_pkcs7err.h/openssl_header_openssl_sub_pkcs7err.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A029A76400000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_pkcs7err.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_pkcs7err.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A029A76400000000
+
+
+ 1DD70E296DE9D51000000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_rand.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_rand.h/openssl_header_openssl_sub_rand.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9796DE9D51000000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_rand.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_rand.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E296DE9D51000000000
+
+
+ 1DD70E298EF3565600000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_rand_drbg.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_rand_drbg.h/openssl_header_openssl_sub_rand_drbg.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9798EF3565600000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_rand_drbg.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_rand_drbg.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E298EF3565600000000
+
+
+ 1DD70E29C15E9B4900000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_randerr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_randerr.h/openssl_header_openssl_sub_randerr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979C15E9B4900000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_randerr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_randerr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29C15E9B4900000000
+
+
+ 1DD70E29A8B4F78A00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_rc2.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_rc2.h/openssl_header_openssl_sub_rc2.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A8B4F78A00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_rc2.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_rc2.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A8B4F78A00000000
+
+
+ 1DD70E29A8B4FF0C00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_rc4.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_rc4.h/openssl_header_openssl_sub_rc4.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A8B4FF0C00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_rc4.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_rc4.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A8B4FF0C00000000
+
+
+ 1DD70E29A8B502CD00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_rc5.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_rc5.h/openssl_header_openssl_sub_rc5.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A8B502CD00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_rc5.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_rc5.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A8B502CD00000000
+
+
+ 1DD70E29458F0E2E00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_ripemd.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ripemd.h/openssl_header_openssl_sub_ripemd.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979458F0E2E00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_ripemd.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ripemd.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29458F0E2E00000000
+
+
+ 1DD70E29A8BCEDE900000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_rsa.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_rsa.h/openssl_header_openssl_sub_rsa.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A8BCEDE900000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_rsa.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_rsa.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A8BCEDE900000000
+
+
+ 1DD70E293CF727D000000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_rsaerr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_rsaerr.h/openssl_header_openssl_sub_rsaerr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9793CF727D000000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_rsaerr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_rsaerr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E293CF727D000000000
+
+
+ 1DD70E2925F0DCC400000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_safestack.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_safestack.h/openssl_header_openssl_sub_safestack.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C97925F0DCC400000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_safestack.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_safestack.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E2925F0DCC400000000
+
+
+ 1DD70E296FD2F45C00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_seed.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_seed.h/openssl_header_openssl_sub_seed.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9796FD2F45C00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_seed.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_seed.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E296FD2F45C00000000
+
+
+ 1DD70E29A8C6055500000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_sha.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_sha.h/openssl_header_openssl_sub_sha.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A8C6055500000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_sha.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_sha.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A8C6055500000000
+
+
+ 1DD70E29A8CAC95A00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_srp.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_srp.h/openssl_header_openssl_sub_srp.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A8CAC95A00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_srp.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_srp.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A8CAC95A00000000
+
+
+ 1DD70E297091248600000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_srtp.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_srtp.h/openssl_header_openssl_sub_srtp.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9797091248600000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_srtp.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_srtp.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E297091248600000000
+
+
+ 1DD70E29A8CB2EB500000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_ssl.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ssl.h/openssl_header_openssl_sub_ssl.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A8CB2EB500000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_ssl.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ssl.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A8CB2EB500000000
+
+
+ 1DD70E29709AB05100000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_ssl2.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ssl2.h/openssl_header_openssl_sub_ssl2.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979709AB05100000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_ssl2.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ssl2.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29709AB05100000000
+
+
+ 1DD70E29709AB41200000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_ssl3.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ssl3.h/openssl_header_openssl_sub_ssl3.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979709AB41200000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_ssl3.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ssl3.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29709AB41200000000
+
+
+ 1DD70E29B79DA38400000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_sslerr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_sslerr.h/openssl_header_openssl_sub_sslerr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979B79DA38400000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_sslerr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_sslerr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29B79DA38400000000
+
+
+ 1DD70E29A3EC547100000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_stack.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_stack.h/openssl_header_openssl_sub_stack.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A3EC547100000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_stack.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_stack.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A3EC547100000000
+
+
+ 1DD70E29A4B8588A00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_store.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_store.h/openssl_header_openssl_sub_store.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A4B8588A00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_store.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_store.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A4B8588A00000000
+
+
+ 1DD70E29AB94AD8F00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_storeerr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_storeerr.h/openssl_header_openssl_sub_storeerr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979AB94AD8F00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_storeerr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_storeerr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29AB94AD8F00000000
+
+
+ 1DD70E29A93771F600000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_symhacks.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_symhacks.h/openssl_header_openssl_sub_symhacks.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A93771F600000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_symhacks.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_symhacks.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A93771F600000000
+
+
+ 1DD70E2971F00F4100000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_tls1.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_tls1.h/openssl_header_openssl_sub_tls1.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C97971F00F4100000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_tls1.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_tls1.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E2971F00F4100000000
+
+
+ 1DD70E29BB1FC12A00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_ts.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ts.h/openssl_header_openssl_sub_ts.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979BB1FC12A00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_ts.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ts.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29BB1FC12A00000000
+
+
+ 1DD70E29D75D00EF00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_tserr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_tserr.h/openssl_header_openssl_sub_tserr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979D75D00EF00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_tserr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_tserr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29D75D00EF00000000
+
+
+ 1DD70E293549975800000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_txt_db.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_txt_db.h/openssl_header_openssl_sub_txt_db.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9793549975800000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_txt_db.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_txt_db.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E293549975800000000
+
+
+ 1DD70E29BB200FFF00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_ui.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ui.h/openssl_header_openssl_sub_ui.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979BB200FFF00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_ui.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_ui.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29BB200FFF00000000
+
+
+ 1DD70E29FB32C5FA00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_uierr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_uierr.h/openssl_header_openssl_sub_uierr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979FB32C5FA00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_uierr.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_uierr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29FB32C5FA00000000
+
+
+ 1DD70E299714275200000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_whrlpool.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_whrlpool.h/openssl_header_openssl_sub_whrlpool.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9799714275200000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_whrlpool.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_whrlpool.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E299714275200000000
+
+
+ 1DD70E29759E0E3100000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_x509.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_x509.h/openssl_header_openssl_sub_x509.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979759E0E3100000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_x509.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_x509.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29759E0E3100000000
+
+
+ 1DD70E29932C773B00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_x509_vfy.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_x509_vfy.h/openssl_header_openssl_sub_x509_vfy.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979932C773B00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_x509_vfy.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_x509_vfy.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29932C773B00000000
+
+
+ 1DD70E294722C28800000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_x509err.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_x509err.h/openssl_header_openssl_sub_x509err.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9794722C28800000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_x509err.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_x509err.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E294722C28800000000
+
+
+ 1DD70E2986733FAE00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_x509v3.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_x509v3.h/openssl_header_openssl_sub_x509v3.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C97986733FAE00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_x509v3.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_x509v3.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E2986733FAE00000000
+
+
+ 1DD70E2920ACC3EB00000000
+
+ isa
+ PBXFileReference
+ name
+ openssl_header_openssl_sub_x509v3err.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_x509v3err.h/openssl_header_openssl_sub_x509v3err.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C97920ACC3EB00000000
+
+ isa
+ PBXGroup
+ name
+ openssl_header_openssl_sub_x509v3err.h
+ path
+ ../../buck-out/gen/submodules/openssl/openssl_header_openssl_sub_x509v3err.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E2920ACC3EB00000000
+
+
+ B401C979EAB5339800000000
+
+ isa
+ PBXGroup
+ name
+ Sources
+ sourceTree
+ ]]>
+ children
+
+ B401C979A7C744B800000000
+ B401C97951E45A2000000000
+ B401C97909FBC7B000000000
+ B401C979DFA13C3900000000
+ B401C979EAA7EA0800000000
+ B401C979EB5E676500000000
+ B401C97921EF6CD400000000
+ B401C979A7D71EB100000000
+ B401C979C5C9E20800000000
+ B401C979DAFD603500000000
+ B401C979BB177FB700000000
+ B401C97916A49B4200000000
+ B401C97931413A2B00000000
+ B401C979D89D5C4E00000000
+ B401C979F2C63C3900000000
+ B401C9795453A5AA00000000
+ B401C97954F4513700000000
+ B401C979A7E716B200000000
+ B401C97908175E6700000000
+ B401C9795516257A00000000
+ B401C9799F407A9F00000000
+ B401C9795516744F00000000
+ B401C9799485006A00000000
+ B401C979C3163FAA00000000
+ B401C9791B6F7A6C00000000
+ B401C979B4E4A86D00000000
+ B401C979BB180A9C00000000
+ B401C97955C7EA3D00000000
+ B401C979A7F18B3B00000000
+ B401C979BB1851EF00000000
+ B401C9797633FE0A00000000
+ B401C979A7F7A4DB00000000
+ B401C9798EA6B39E00000000
+ B401C9798B104A6300000000
+ B401C9799C4B0ADD00000000
+ B401C97976953B4300000000
+ B401C979BB18B38900000000
+ B401C97957D2874D00000000
+ B401C979A2841B3D00000000
+ B401C979A291FE3000000000
+ B401C979F87C27AD00000000
+ B401C9797B1A678C00000000
+ B401C979A80587CE00000000
+ B401C979A80751C800000000
+ B401C979AED3439100000000
+ B401C9795D7C8C5200000000
+ B401C9795EB45B6200000000
+ B401C979A8538A9600000000
+ B401C97954D9B00300000000
+ B401C9791D2DC8E300000000
+ B401C979A86EF66400000000
+ B401C979A86EFDE600000000
+ B401C979A86F01A700000000
+ B401C979658624B100000000
+ B401C9795E2A031900000000
+ B401C97990BA1C7000000000
+ B401C9799A73243D00000000
+ B401C979803360FC00000000
+ B401C97968E9ED1C00000000
+ B401C979F14CF7BD00000000
+ B401C97906926CCF00000000
+ B401C979BF9EF5DF00000000
+ B401C9799EE33DF400000000
+ B401C979A89A8EC100000000
+ B401C9796AB751C500000000
+ B401C9799D17B7F800000000
+ B401C979CA1371F700000000
+ B401C979CFE8810200000000
+ B401C979F600B6D500000000
+ B401C979A029A76400000000
+ B401C9796DE9D51000000000
+ B401C9798EF3565600000000
+ B401C979C15E9B4900000000
+ B401C979A8B4F78A00000000
+ B401C979A8B4FF0C00000000
+ B401C979A8B502CD00000000
+ B401C979458F0E2E00000000
+ B401C979A8BCEDE900000000
+ B401C9793CF727D000000000
+ B401C97925F0DCC400000000
+ B401C9796FD2F45C00000000
+ B401C979A8C6055500000000
+ B401C979A8CAC95A00000000
+ B401C9797091248600000000
+ B401C979A8CB2EB500000000
+ B401C979709AB05100000000
+ B401C979709AB41200000000
+ B401C979B79DA38400000000
+ B401C979A3EC547100000000
+ B401C979A4B8588A00000000
+ B401C979AB94AD8F00000000
+ B401C979A93771F600000000
+ B401C97971F00F4100000000
+ B401C979BB1FC12A00000000
+ B401C979D75D00EF00000000
+ B401C9793549975800000000
+ B401C979BB200FFF00000000
+ B401C979FB32C5FA00000000
+ B401C9799714275200000000
+ B401C979759E0E3100000000
+ B401C979932C773B00000000
+ B401C9794722C28800000000
+ B401C97986733FAE00000000
+ B401C97920ACC3EB00000000
+
+
+ B401C979B4B57B8200000000
+
+ isa
+ PBXGroup
+ name
+ openssl
+ sourceTree
+ ]]>
+ children
+
+ 1DD70E29001F47FB00000000
+ B401C979EAB5339800000000
+
+
+ B401C979EFB6AC4600000000
+
+ isa
+ PBXGroup
+ name
+ mainGroup
+ sourceTree
+ ]]>
+ children
+
+ B401C979B781F65D00000000
+ B401C979048F8EF000000000
+ B401C979C806358400000000
+ B401C979B4B57B8200000000
+
+
+ 4952437303EDA63300000000
+
+ isa
+ XCBuildConfiguration
+ name
+ Debug
+ buildSettings
+
+
+ baseConfigurationReference
+ 1DD70E29F2B988F300000000
+
+ 4952437350C7218900000000
+
+ isa
+ XCBuildConfiguration
+ name
+ Profile
+ buildSettings
+
+
+ baseConfigurationReference
+ 1DD70E290F9DAF9D00000000
+
+ 49524373A439BFE700000000
+
+ isa
+ XCBuildConfiguration
+ name
+ Release
+ buildSettings
+
+
+ baseConfigurationReference
+ 1DD70E2983345AFF00000000
+
+ 218C37090000000000000000
+
+ isa
+ XCConfigurationList
+ buildConfigurations
+
+ 4952437303EDA63300000000
+ 4952437350C7218900000000
+ 49524373A439BFE700000000
+
+ defaultConfigurationIsVisible
+
+
+ E66DC04EB4B57B8200000000
+
+ isa
+ PBXNativeTarget
+ name
+ openssl
+ productName
+ openssl
+ productReference
+ 1DD70E2932210C1000000000
+ productType
+ com.apple.product-type.library.static
+ dependencies
+
+
+ buildPhases
+
+
+ buildConfigurationList
+ 218C37090000000000000000
+
+ 4952437303EDA63300000001
+
+ isa
+ XCBuildConfiguration
+ name
+ Debug
+ buildSettings
+
+
+
+ 4952437350C7218900000001
+
+ isa
+ XCBuildConfiguration
+ name
+ Profile
+ buildSettings
+
+
+
+ 49524373A439BFE700000001
+
+ isa
+ XCBuildConfiguration
+ name
+ Release
+ buildSettings
+
+
+
+ 218C37090000000000000001
+
+ isa
+ XCConfigurationList
+ buildConfigurations
+
+ 4952437303EDA63300000001
+ 4952437350C7218900000001
+ 49524373A439BFE700000001
+
+ defaultConfigurationIsVisible
+
+
+ 96C84793B4B57B8200000000
+
+ isa
+ PBXProject
+ mainGroup
+ B401C979EFB6AC4600000000
+ targets
+
+ E66DC04EB4B57B8200000000
+
+ buildConfigurationList
+ 218C37090000000000000001
+ compatibilityVersion
+ Xcode 3.2
+ attributes
+
+ LastUpgradeCheck
+ 9999
+
+
+
+ rootObject
+ 96C84793B4B57B8200000000
+
+
\ No newline at end of file
diff --git a/submodules/openssl/openssl.xcodeproj/xcshareddata/xcschemes/openssl.xcscheme b/submodules/openssl/openssl.xcodeproj/xcshareddata/xcschemes/openssl.xcscheme
new file mode 100644
index 0000000000..df0794edce
--- /dev/null
+++ b/submodules/openssl/openssl.xcodeproj/xcshareddata/xcschemes/openssl.xcscheme
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/submodules/openssl/pack-openssl.sh b/submodules/openssl/pack-openssl.sh
new file mode 100644
index 0000000000..5b1c632dd2
--- /dev/null
+++ b/submodules/openssl/pack-openssl.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+set -e
+set -x
+
+OUT_DIR="$1"
+INCLUDE_DIR="$2"
+shift
+shift
+LIBS="$@"
+
+mkdir -p "$OUT_DIR/lib"
+
+/usr/bin/lipo $LIBS -output "$OUT_DIR/lib/libcrypto.a" -create
+cp -r "$INCLUDE_DIR" "$OUT_DIR/"
+
diff --git a/submodules/openssl/patch-conf.patch b/submodules/openssl/patch-conf.patch
new file mode 100644
index 0000000000..385a800c7a
--- /dev/null
+++ b/submodules/openssl/patch-conf.patch
@@ -0,0 +1,17 @@
+diff --git a/Configurations/10-main.conf b/Configurations/10-main.conf
+--- a/Configurations/10-main.conf
++++ b/Configurations/10-main.conf
+@@ -1640,6 +1640,13 @@ my %targets = (
+ sys_id => "VXWORKS",
+ lflags => add("-r"),
+ },
++ "ios64sim-cross" => {
++ inherit_from => [ "darwin-common", asm("no_asm") ],
++ cflags => add("-arch x86_64 -DOPENSSL_NO_ASM -mios-version-min=8.0.0 -isysroot \$(CROSS_TOP)/SDKs/\$(CROSS_SDK) -fno-common"),
++ sys_id => "iOS",
++ bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR",
++ perlasm_scheme => "ios64",
++ },
+ "vxworks-simlinux" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "ccpentium",
diff --git a/submodules/openssl/patch-include.patch b/submodules/openssl/patch-include.patch
new file mode 100644
index 0000000000..3b177feac6
--- /dev/null
+++ b/submodules/openssl/patch-include.patch
@@ -0,0 +1,28 @@
+--- armv7s/include/openssl/opensslconf.h 2017-01-08 02:25:43.000000000 -0800
++++ arm64/include/openssl/opensslconf.h 2017-01-08 03:44:44.000000000 -0800
+@@ -158,11 +158,21 @@
+ * The following are cipher-specific, but are part of the public API.
+ */
+ #if !defined(OPENSSL_SYS_UEFI)
+-# define BN_LLONG
++# ifdef __LP64__
++# undef BN_LLONG
++# else
++# define BN_LLONG
++# endif
+ /* Only one for the following should be defined */
+-# undef SIXTY_FOUR_BIT_LONG
+-# undef SIXTY_FOUR_BIT
+-# define THIRTY_TWO_BIT
++# ifdef __LP64__
++# define SIXTY_FOUR_BIT_LONG
++# undef SIXTY_FOUR_BIT
++# undef THIRTY_TWO_BIT
++# else
++# undef SIXTY_FOUR_BIT_LONG
++# undef SIXTY_FOUR_BIT
++# define THIRTY_TWO_BIT
++# endif
+ #endif
+
+ #define RC4_INT unsigned char
diff --git a/submodules/ton/BUCK b/submodules/ton/BUCK
new file mode 100644
index 0000000000..9ddff5e11f
--- /dev/null
+++ b/submodules/ton/BUCK
@@ -0,0 +1,73 @@
+load("//Config:buck_rule_macros.bzl", "static_library", "gen_header_targets")
+
+ton_header_paths = [
+ "auto/tl/tonlib_api.h",
+ "tl/TlObject.h",
+ "tonlib/tonlib_client_json.h",
+ "tonlib/tonlibjson_export.h",
+ "tonlib/Client.h",
+ "td/utils/Slice-decl.h",
+ "td/utils/config.h",
+ "td/utils/SharedSlice.h",
+ "td/utils/Slice.h",
+ "td/utils/int_types.h",
+ "td/utils/common.h",
+ "td/utils/check.h",
+ "td/utils/unique_ptr.h",
+ "td/utils/port/platform.h",
+]
+
+ton_lib_names = [
+ "adnllite",
+ "crc32c",
+ "keys",
+ "lite-client-common",
+ "tdactor",
+ "tddb",
+ "tdnet",
+ "tdutils",
+ "tl-lite-utils",
+ "tl-utils",
+ "tl_api",
+ "tl_lite_api",
+ "tl_tonlib_api",
+ "ton_block",
+ "ton_crypto",
+ "tonlib",
+]
+
+ton_lib_flags = ["-l" + name for name in ton_lib_names]
+
+genrule(
+ name = "ton_build",
+ srcs = [
+ "build-ton.sh",
+ "tonlib-src",
+ "iOS.cmake"
+ ],
+ bash = "sh $SRCDIR/build-ton.sh $OUT $SRCDIR $(location //submodules/openssl:openssl_build_merged)",
+ out = "ton",
+ visibility = [
+ "//submodules/ton:...",
+ ]
+)
+
+ton_header_targets = gen_header_targets(ton_header_paths, "ton_header_", "", "ton_build", "build/out/include")
+
+apple_library(
+ name = "ton",
+ visibility = [
+ "PUBLIC",
+ ],
+ exported_headers = ton_header_targets,
+ linker_flags = [
+ "-L$(location :ton_build)/build/out/lib",
+ ] + ton_lib_flags,
+ exported_linker_flags = [
+ "-L$(location :ton_build)/build/out/lib",
+ "-lcrypto",
+ ] + ton_lib_flags,
+ deps = [
+ ":ton_build"
+ ],
+)
diff --git a/submodules/ton/build-ton.sh b/submodules/ton/build-ton.sh
new file mode 100755
index 0000000000..1de7b17d9d
--- /dev/null
+++ b/submodules/ton/build-ton.sh
@@ -0,0 +1,76 @@
+#/bin/sh
+
+set -x
+set -e
+
+OUT_DIR="$1"
+SOURCE_DIR="$2"
+openssl_base_path="$3"
+
+if [ -z "$openssl_base_path" ]; then
+ echo "Usage: sh build-ton.sh path/to/openssl"
+ exit 1
+fi
+
+if [ ! -d "$openssl_base_path" ]; then
+ echo "$openssl_base_path not found"
+ exit 1
+fi
+
+ARCHIVE_PATH="$SOURCE_DIR/tonlib.zip"
+td_path="$SOURCE_DIR/tonlib-src"
+TOOLCHAIN="$SOURCE_DIR/iOS.cmake"
+
+mkdir -p "$OUT_DIR"
+mkdir -p "$OUT_DIR/build"
+cd "$OUT_DIR/build"
+
+platforms="iOS"
+for platform in $platforms; do
+ openssl_path="$openssl_base_path"
+ echo "OpenSSL path = ${openssl_path}"
+ openssl_crypto_library="${openssl_path}/lib/libcrypto.a"
+ openssl_ssl_library="${openssl_path}/lib/libssl.a"
+ options="$options -DOPENSSL_FOUND=1"
+ options="$options -DOPENSSL_CRYPTO_LIBRARY=${openssl_crypto_library}"
+ options="$options -DOPENSSL_INCLUDE_DIR=${openssl_path}/include"
+ options="$options -DOPENSSL_LIBRARIES=${openssl_crypto_library}"
+ options="$options -DCMAKE_BUILD_TYPE=Release"
+ if [[ $skip_build = "" ]]; then
+ simulators="0 1"
+ else
+ simulators=""
+ fi
+ for simulator in $simulators;
+ do
+ build="build-${platform}"
+ install="install-${platform}"
+ if [[ $simulator = "1" ]]; then
+ build="${build}-simulator"
+ install="${install}-simulator"
+ ios_platform="SIMULATOR"
+ else
+ ios_platform="OS"
+ fi
+ echo "Platform = ${platform} Simulator = ${simulator}"
+ echo $ios_platform
+ rm -rf $build
+ mkdir -p $build
+ mkdir -p $install
+ cd $build
+ cmake $td_path $options -DCMAKE_TOOLCHAIN_FILE="$TOOLCHAIN" -DIOS_PLATFORM=${ios_platform} -DTON_ARCH= -DCMAKE_INSTALL_PREFIX=../${install}
+ CORE_COUNT=`sysctl -n hw.logicalcpu`
+ make -j$CORE_COUNT install || exit
+ cd ..
+ done
+ mkdir -p $platform
+
+ mkdir -p "out"
+ cp -r "install-iOS/include" "out/"
+ mkdir -p "out/lib"
+
+ for f in install-iOS/lib/*.a; do
+ lib_name=$(basename "$f")
+ lipo -create "install-iOS/lib/$lib_name" "install-iOS-simulator/lib/$lib_name" -o "out/lib/$lib_name"
+ done
+done
diff --git a/submodules/ton/iOS.cmake b/submodules/ton/iOS.cmake
new file mode 100644
index 0000000000..cc344484e3
--- /dev/null
+++ b/submodules/ton/iOS.cmake
@@ -0,0 +1,250 @@
+# This file is based off of the Platform/Darwin.cmake and Platform/UnixPaths.cmake
+# files which are included with CMake 2.8.4
+# It has been altered for iOS development
+
+# Options:
+#
+# IOS_PLATFORM = OS (default) or SIMULATOR
+# This decides if SDKS will be selected from the iPhoneOS.platform or iPhoneSimulator.platform folders
+# OS - the default, used to build for iPhone and iPad physical devices, which have an arm arch.
+# SIMULATOR - used to build for the Simulator platforms, which have an x86 arch.
+#
+# CMAKE_IOS_DEVELOPER_ROOT = automatic(default) or /path/to/platform/Developer folder
+# By default this location is automatcially chosen based on the IOS_PLATFORM value above.
+# If set manually, it will override the default location and force the user of a particular Developer Platform
+#
+# CMAKE_IOS_SDK_ROOT = automatic(default) or /path/to/platform/Developer/SDKs/SDK folder
+# By default this location is automatcially chosen based on the CMAKE_IOS_DEVELOPER_ROOT value.
+# In this case it will always be the most up-to-date SDK found in the CMAKE_IOS_DEVELOPER_ROOT path.
+# If set manually, this will force the use of a specific SDK version
+
+# Macros:
+#
+# set_xcode_property (TARGET XCODE_PROPERTY XCODE_VALUE)
+# A convenience macro for setting xcode specific properties on targets
+# example: set_xcode_property (myioslib IPHONEOS_DEPLOYMENT_TARGET "3.1")
+#
+# find_host_package (PROGRAM ARGS)
+# A macro used to find executable programs on the host system, not within the iOS environment.
+# Thanks to the android-cmake project for providing the command
+
+# Standard settings
+set (CMAKE_SYSTEM_NAME Darwin)
+set (CMAKE_SYSTEM_VERSION 1)
+set (UNIX True)
+set (APPLE True)
+set (IOS True)
+
+# Required as of cmake 2.8.10
+set (CMAKE_OSX_DEPLOYMENT_TARGET "" CACHE STRING "Force unset of the deployment target for iOS" FORCE)
+
+# Determine the cmake host system version so we know where to find the iOS SDKs
+find_program (CMAKE_UNAME uname /bin /usr/bin /usr/local/bin)
+if (CMAKE_UNAME)
+ exec_program(uname ARGS -r OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_VERSION)
+ string (REGEX REPLACE "^([0-9]+)\\.([0-9]+).*$" "\\1" DARWIN_MAJOR_VERSION "${CMAKE_HOST_SYSTEM_VERSION}")
+endif (CMAKE_UNAME)
+
+# Force the compilers to gcc for iOS
+set (CMAKE_C_COMPILER /usr/bin/gcc)
+set (CMAKE_CXX_COMPILER /usr/bin/g++)
+set(CMAKE_AR ar CACHE FILEPATH "" FORCE)
+set(CMAKE_RANLIB ranlib CACHE FILEPATH "" FORCE)
+set(PKG_CONFIG_EXECUTABLE pkg-config CACHE FILEPATH "" FORCE)
+
+# Setup iOS platform unless specified manually with IOS_PLATFORM
+if (NOT DEFINED IOS_PLATFORM)
+ set (IOS_PLATFORM "OS")
+endif (NOT DEFINED IOS_PLATFORM)
+set (IOS_PLATFORM ${IOS_PLATFORM} CACHE STRING "Type of iOS Platform")
+
+# Check the platform selection and setup for developer root
+if (${IOS_PLATFORM} STREQUAL "OS")
+ set (IOS_PLATFORM_LOCATION "iPhoneOS.platform")
+ set (XCODE_IOS_PLATFORM iphoneos)
+
+ # This causes the installers to properly locate the output libraries
+ set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphoneos")
+
+ set (APPLE_IOS True)
+elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR")
+ set (SIMULATOR_FLAG true)
+ set (IOS_PLATFORM_LOCATION "iPhoneSimulator.platform")
+ set (XCODE_IOS_PLATFORM iphonesimulator)
+
+ # This causes the installers to properly locate the output libraries
+ set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphonesimulator")
+
+ set (APPLE_IOS True)
+elseif (${IOS_PLATFORM} STREQUAL "WATCHOS")
+ set (IOS_PLATFORM_LOCATION "WatchOS.platform")
+ set (XCODE_IOS_PLATFORM watchos)
+
+ # This causes the installers to properly locate the output libraries
+ set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-watchos")
+
+ set (APPLE_WATCH True)
+elseif (${IOS_PLATFORM} STREQUAL "WATCHSIMULATOR")
+ set (SIMULATOR_FLAG true)
+ set (IOS_PLATFORM_LOCATION "WatchSimulator.platform")
+ set (XCODE_IOS_PLATFORM watchsimulator)
+
+ # This causes the installers to properly locate the output libraries
+ set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-watchsimulator")
+
+ set (APPLE_WATCH True)
+elseif (${IOS_PLATFORM} STREQUAL "TVOS")
+ set (IOS_PLATFORM_LOCATION "AppleTvOS.platform")
+ set (XCODE_IOS_PLATFORM tvos)
+
+ # This causes the installers to properly locate the output libraries
+ set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-appletvos")
+
+ set (APPLE_TV True)
+elseif (${IOS_PLATFORM} STREQUAL "TVSIMULATOR")
+ set (SIMULATOR_FLAG true)
+ set (IOS_PLATFORM_LOCATION "AppleTvSimulator.platform")
+ set (XCODE_IOS_PLATFORM tvsimulator)
+
+ # This causes the installers to properly locate the output libraries
+ set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-tvsimulator")
+
+ set (APPLE_TV True)
+else (${IOS_PLATFORM} STREQUAL "OS")
+ message (FATAL_ERROR "Unsupported IOS_PLATFORM value selected. Please choose OS, SIMULATOR, or WATCHOS.")
+endif ()
+
+# All iOS/Darwin specific settings - some may be redundant
+set (CMAKE_SHARED_LIBRARY_PREFIX "lib")
+set (CMAKE_SHARED_LIBRARY_SUFFIX ".dylib")
+set (CMAKE_SHARED_MODULE_PREFIX "lib")
+set (CMAKE_SHARED_MODULE_SUFFIX ".so")
+set (CMAKE_MODULE_EXISTS 1)
+set (CMAKE_DL_LIBS "")
+
+set (CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ")
+set (CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ")
+set (CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}")
+set (CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}")
+
+if (IOS_DEPLOYMENT_TARGET)
+ set (XCODE_IOS_PLATFORM_VERSION_FLAGS "-m${XCODE_IOS_PLATFORM}-version-min=${IOS_DEPLOYMENT_TARGET}")
+endif()
+
+set (CMAKE_SHARED_LINKER_FLAGS_INIT "-fapplication-extension")
+#if (NOT SIMULATOR_FLAG)
+# set (BITCODE "-fembed-bitcode")
+#endif()
+set (CMAKE_C_FLAGS_INIT "${XCODE_IOS_PLATFORM_VERSION_FLAGS} ${BITCODE}")
+# Hidden visibilty is required for cxx on iOS
+set (CMAKE_CXX_FLAGS_INIT "${XCODE_IOS_PLATFORM_VERSION_FLAGS} ${BITCODE} -fvisibility-inlines-hidden")
+
+set (CMAKE_C_LINK_FLAGS "${XCODE_IOS_PLATFORM_VERSION_FLAGS} -fapplication-extension -Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}")
+set (CMAKE_CXX_LINK_FLAGS "${XCODE_IOS_PLATFORM_VERSION_FLAGS} -fapplication-extension -Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}")
+
+set (CMAKE_PLATFORM_HAS_INSTALLNAME 1)
+set (CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -headerpad_max_install_names")
+set (CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -headerpad_max_install_names")
+set (CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,")
+set (CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,")
+set (CMAKE_FIND_LIBRARY_SUFFIXES ".dylib" ".so" ".a")
+
+# hack: if a new cmake (which uses CMAKE_INSTALL_NAME_TOOL) runs on an old build tree
+# (where install_name_tool was hardcoded) and where CMAKE_INSTALL_NAME_TOOL isn't in the cache
+# and still cmake didn't fail in CMakeFindBinUtils.cmake (because it isn't rerun)
+# hardcode CMAKE_INSTALL_NAME_TOOL here to install_name_tool, so it behaves as it did before, Alex
+if (NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
+ find_program(CMAKE_INSTALL_NAME_TOOL install_name_tool)
+endif (NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
+
+# Setup iOS deployment target
+set (IOS_DEPLOYMENT_TARGET ${IOS_DEPLOYMENT_TARGET} CACHE STRING "Minimum iOS version")
+
+# Setup iOS developer location unless specified manually with CMAKE_IOS_DEVELOPER_ROOT
+# Note Xcode 4.3 changed the installation location, choose the most recent one available
+exec_program(/usr/bin/xcode-select ARGS -print-path OUTPUT_VARIABLE CMAKE_XCODE_DEVELOPER_DIR)
+set (XCODE_POST_43_ROOT "${CMAKE_XCODE_DEVELOPER_DIR}/Platforms/${IOS_PLATFORM_LOCATION}/Developer")
+set (XCODE_PRE_43_ROOT "/Developer/Platforms/${IOS_PLATFORM_LOCATION}/Developer")
+if (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT)
+ if (EXISTS ${XCODE_POST_43_ROOT})
+ set (CMAKE_IOS_DEVELOPER_ROOT ${XCODE_POST_43_ROOT})
+ elseif(EXISTS ${XCODE_PRE_43_ROOT})
+ set (CMAKE_IOS_DEVELOPER_ROOT ${XCODE_PRE_43_ROOT})
+ endif (EXISTS ${XCODE_POST_43_ROOT})
+endif (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT)
+set (CMAKE_IOS_DEVELOPER_ROOT ${CMAKE_IOS_DEVELOPER_ROOT} CACHE PATH "Location of iOS Platform")
+
+# Find and use the most recent iOS sdk unless specified manually with CMAKE_IOS_SDK_ROOT
+if (NOT DEFINED CMAKE_IOS_SDK_ROOT)
+ file (GLOB _CMAKE_IOS_SDKS "${CMAKE_IOS_DEVELOPER_ROOT}/SDKs/*")
+ if (_CMAKE_IOS_SDKS)
+ list (SORT _CMAKE_IOS_SDKS)
+ list (REVERSE _CMAKE_IOS_SDKS)
+ list (GET _CMAKE_IOS_SDKS 0 CMAKE_IOS_SDK_ROOT)
+ else (_CMAKE_IOS_SDKS)
+ message (FATAL_ERROR "No iOS SDK's found in default search path ${CMAKE_IOS_DEVELOPER_ROOT}. Manually set CMAKE_IOS_SDK_ROOT or install the iOS SDK.")
+ endif (_CMAKE_IOS_SDKS)
+ message (STATUS "Toolchain using default iOS SDK: ${CMAKE_IOS_SDK_ROOT}")
+endif (NOT DEFINED CMAKE_IOS_SDK_ROOT)
+set (CMAKE_IOS_SDK_ROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Location of the selected iOS SDK")
+
+# Set the sysroot default to the most recent SDK
+set (CMAKE_OSX_SYSROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Sysroot used for iOS support")
+
+# set the architecture for iOS
+if (IOS_PLATFORM STREQUAL "OS")
+ set (IOS_ARCH "armv7;arm64")
+elseif (IOS_PLATFORM STREQUAL "SIMULATOR")
+ set (IOS_ARCH "x86_64")
+elseif (IOS_PLATFORM STREQUAL "WATCHOS")
+ set (IOS_ARCH "armv7k")
+elseif (IOS_PLATFORM STREQUAL "WATCHSIMULATOR")
+ set (IOS_ARCH "i386")
+elseif (IOS_PLATFORM STREQUAL "TVOS")
+ set (IOS_ARCH "arm64")
+elseif (IOS_PLATFORM STREQUAL "TVSIMULATOR")
+ set (IOS_ARCH "x86_64")
+else()
+ message (WARNING "Unknown IOS_PLATFORM=<${IOS_PLATFORM}>")
+endif()
+message (STATUS ${IOS_ARCH})
+
+set (CMAKE_OSX_ARCHITECTURES ${IOS_ARCH} CACHE STRING "Build architecture for iOS")
+
+# Set the find root to the iOS developer roots and to user defined paths
+set (CMAKE_FIND_ROOT_PATH ${CMAKE_IOS_DEVELOPER_ROOT} ${CMAKE_IOS_SDK_ROOT} ${CMAKE_PREFIX_PATH} CACHE STRING "iOS find search path root")
+
+# default to searching for frameworks first
+set (CMAKE_FIND_FRAMEWORK FIRST)
+
+# set up the default search directories for frameworks
+set (CMAKE_SYSTEM_FRAMEWORK_PATH
+ ${CMAKE_IOS_SDK_ROOT}/System/Library/Frameworks
+ ${CMAKE_IOS_SDK_ROOT}/System/Library/PrivateFrameworks
+ ${CMAKE_IOS_SDK_ROOT}/Developer/Library/Frameworks
+)
+
+# only search the iOS sdks, not the remainder of the host filesystem
+set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
+set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+
+# This little macro lets you set any Xcode specific property
+macro (set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE)
+ set_property (TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} ${XCODE_VALUE})
+endmacro (set_xcode_property)
+
+# This macro lets you find executable programs on the host system
+macro (find_host_package)
+ set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+ set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
+ set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
+ set (IOS FALSE)
+
+ find_package(${ARGN})
+
+ set (IOS TRUE)
+ set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
+ set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+ set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+endmacro (find_host_package)
diff --git a/submodules/ton/ton.xcodeproj/project.pbxproj b/submodules/ton/ton.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000..d3aa5e630a
--- /dev/null
+++ b/submodules/ton/ton.xcodeproj/project.pbxproj
@@ -0,0 +1,755 @@
+
+
+
+
+ archiveVersion
+ 1
+ classes
+
+
+ objectVersion
+ 46
+ objects
+
+ 1DD70E299ED0C70200000000
+
+ isa
+ PBXFileReference
+ name
+ ton-Debug.xcconfig
+ path
+ ../../buck-out/gen/submodules/ton/ton-Debug.xcconfig
+ sourceTree
+ SOURCE_ROOT
+ explicitFileType
+ text.xcconfig
+
+ 1DD70E2912DDA5EC00000000
+
+ isa
+ PBXFileReference
+ name
+ ton-Profile.xcconfig
+ path
+ ../../buck-out/gen/submodules/ton/ton-Profile.xcconfig
+ sourceTree
+ SOURCE_ROOT
+ explicitFileType
+ text.xcconfig
+
+ 1DD70E298674514E00000000
+
+ isa
+ PBXFileReference
+ name
+ ton-Release.xcconfig
+ path
+ ../../buck-out/gen/submodules/ton/ton-Release.xcconfig
+ sourceTree
+ SOURCE_ROOT
+ explicitFileType
+ text.xcconfig
+
+ B401C9792F7F325000000000
+
+ isa
+ PBXGroup
+ name
+ Buck (Do Not Modify)
+ sourceTree
+ ]]>
+ children
+
+ 1DD70E299ED0C70200000000
+ 1DD70E2912DDA5EC00000000
+ 1DD70E298674514E00000000
+
+
+ B401C979B781F65D00000000
+
+ isa
+ PBXGroup
+ name
+ Configurations
+ sourceTree
+ ]]>
+ children
+
+ B401C9792F7F325000000000
+
+
+ 1DD70E296A34410F00000000
+
+ isa
+ PBXFileReference
+ name
+ build-ton.sh
+ path
+ build-ton.sh
+ sourceTree
+ SOURCE_ROOT
+ explicitFileType
+ text.script.sh
+
+ 1DD70E2959589FB000000000
+
+ isa
+ PBXFileReference
+ name
+ iOS.cmake
+ path
+ iOS.cmake
+ sourceTree
+ SOURCE_ROOT
+
+ 1DD70E29A77DB5E900000000
+
+ isa
+ PBXFileReference
+ name
+ tonlib-src
+ path
+ tonlib-src
+ sourceTree
+ SOURCE_ROOT
+
+ B401C979048F8EF000000000
+
+ isa
+ PBXGroup
+ name
+ Other
+ sourceTree
+ ]]>
+ children
+
+ 1DD70E296A34410F00000000
+ 1DD70E2959589FB000000000
+ 1DD70E29A77DB5E900000000
+
+
+ 1DD70E29333EE72100000000
+
+ isa
+ PBXFileReference
+ name
+ libton.a
+ path
+ libton.a
+ sourceTree
+ BUILT_PRODUCTS_DIR
+ explicitFileType
+ archive.ar
+
+ B401C979C806358400000000
+
+ isa
+ PBXGroup
+ name
+ Products
+ sourceTree
+ ]]>
+ children
+
+ 1DD70E29333EE72100000000
+
+
+ 1DD70E29001F47FB00000000
+
+ isa
+ PBXFileReference
+ name
+ BUCK
+ path
+ BUCK
+ sourceTree
+ SOURCE_ROOT
+ explicitFileType
+ text.script.python
+
+ 1DD70E29B9FF426400000000
+
+ isa
+ PBXFileReference
+ name
+ ton_header_auto_sub_tl_sub_tonlib_api.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_auto_sub_tl_sub_tonlib_api.h/ton_header_auto_sub_tl_sub_tonlib_api.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979B9FF426400000000
+
+ isa
+ PBXGroup
+ name
+ ton_header_auto_sub_tl_sub_tonlib_api.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_auto_sub_tl_sub_tonlib_api.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29B9FF426400000000
+
+
+ 1DD70E29813112B200000000
+
+ isa
+ PBXFileReference
+ name
+ ton_header_td_sub_utils_sub_SharedSlice.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_td_sub_utils_sub_SharedSlice.h/ton_header_td_sub_utils_sub_SharedSlice.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979813112B200000000
+
+ isa
+ PBXGroup
+ name
+ ton_header_td_sub_utils_sub_SharedSlice.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_td_sub_utils_sub_SharedSlice.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29813112B200000000
+
+
+ 1DD70E29D7A0B39400000000
+
+ isa
+ PBXFileReference
+ name
+ ton_header_td_sub_utils_sub_Slice-decl.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_td_sub_utils_sub_Slice-decl.h/ton_header_td_sub_utils_sub_Slice-decl.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979D7A0B39400000000
+
+ isa
+ PBXGroup
+ name
+ ton_header_td_sub_utils_sub_Slice-decl.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_td_sub_utils_sub_Slice-decl.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29D7A0B39400000000
+
+
+ 1DD70E29EFAB671700000000
+
+ isa
+ PBXFileReference
+ name
+ ton_header_td_sub_utils_sub_Slice.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_td_sub_utils_sub_Slice.h/ton_header_td_sub_utils_sub_Slice.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979EFAB671700000000
+
+ isa
+ PBXGroup
+ name
+ ton_header_td_sub_utils_sub_Slice.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_td_sub_utils_sub_Slice.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29EFAB671700000000
+
+
+ 1DD70E293703712D00000000
+
+ isa
+ PBXFileReference
+ name
+ ton_header_td_sub_utils_sub_check.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_td_sub_utils_sub_check.h/ton_header_td_sub_utils_sub_check.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9793703712D00000000
+
+ isa
+ PBXGroup
+ name
+ ton_header_td_sub_utils_sub_check.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_td_sub_utils_sub_check.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E293703712D00000000
+
+
+ 1DD70E2929ECBE5A00000000
+
+ isa
+ PBXFileReference
+ name
+ ton_header_td_sub_utils_sub_common.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_td_sub_utils_sub_common.h/ton_header_td_sub_utils_sub_common.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C97929ECBE5A00000000
+
+ isa
+ PBXGroup
+ name
+ ton_header_td_sub_utils_sub_common.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_td_sub_utils_sub_common.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E2929ECBE5A00000000
+
+
+ 1DD70E292B3C1DF100000000
+
+ isa
+ PBXFileReference
+ name
+ ton_header_td_sub_utils_sub_config.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_td_sub_utils_sub_config.h/ton_header_td_sub_utils_sub_config.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9792B3C1DF100000000
+
+ isa
+ PBXGroup
+ name
+ ton_header_td_sub_utils_sub_config.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_td_sub_utils_sub_config.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E292B3C1DF100000000
+
+
+ 1DD70E29DCA39E8E00000000
+
+ isa
+ PBXFileReference
+ name
+ ton_header_td_sub_utils_sub_int_types.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_td_sub_utils_sub_int_types.h/ton_header_td_sub_utils_sub_int_types.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979DCA39E8E00000000
+
+ isa
+ PBXGroup
+ name
+ ton_header_td_sub_utils_sub_int_types.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_td_sub_utils_sub_int_types.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29DCA39E8E00000000
+
+
+ 1DD70E29E268B03500000000
+
+ isa
+ PBXFileReference
+ name
+ ton_header_td_sub_utils_sub_port_sub_platform.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_td_sub_utils_sub_port_sub_platform.h/ton_header_td_sub_utils_sub_port_sub_platform.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979E268B03500000000
+
+ isa
+ PBXGroup
+ name
+ ton_header_td_sub_utils_sub_port_sub_platform.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_td_sub_utils_sub_port_sub_platform.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29E268B03500000000
+
+
+ 1DD70E292B4A7E2F00000000
+
+ isa
+ PBXFileReference
+ name
+ ton_header_td_sub_utils_sub_unique_ptr.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_td_sub_utils_sub_unique_ptr.h/ton_header_td_sub_utils_sub_unique_ptr.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C9792B4A7E2F00000000
+
+ isa
+ PBXGroup
+ name
+ ton_header_td_sub_utils_sub_unique_ptr.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_td_sub_utils_sub_unique_ptr.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E292B4A7E2F00000000
+
+
+ 1DD70E29C030047100000000
+
+ isa
+ PBXFileReference
+ name
+ ton_header_tl_sub_TlObject.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_tl_sub_TlObject.h/ton_header_tl_sub_TlObject.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979C030047100000000
+
+ isa
+ PBXGroup
+ name
+ ton_header_tl_sub_TlObject.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_tl_sub_TlObject.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29C030047100000000
+
+
+ 1DD70E29525C76CB00000000
+
+ isa
+ PBXFileReference
+ name
+ ton_header_tonlib_sub_Client.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_tonlib_sub_Client.h/ton_header_tonlib_sub_Client.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979525C76CB00000000
+
+ isa
+ PBXGroup
+ name
+ ton_header_tonlib_sub_Client.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_tonlib_sub_Client.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29525C76CB00000000
+
+
+ 1DD70E29A95A054F00000000
+
+ isa
+ PBXFileReference
+ name
+ ton_header_tonlib_sub_tonlib_client_json.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_tonlib_sub_tonlib_client_json.h/ton_header_tonlib_sub_tonlib_client_json.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979A95A054F00000000
+
+ isa
+ PBXGroup
+ name
+ ton_header_tonlib_sub_tonlib_client_json.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_tonlib_sub_tonlib_client_json.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29A95A054F00000000
+
+
+ 1DD70E29F3A35BAD00000000
+
+ isa
+ PBXFileReference
+ name
+ ton_header_tonlib_sub_tonlibjson_export.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_tonlib_sub_tonlibjson_export.h/ton_header_tonlib_sub_tonlibjson_export.h
+ sourceTree
+ SOURCE_ROOT
+ lastKnownFileType
+ sourcecode.c.h
+
+ B401C979F3A35BAD00000000
+
+ isa
+ PBXGroup
+ name
+ ton_header_tonlib_sub_tonlibjson_export.h
+ path
+ ../../buck-out/gen/submodules/ton/ton_header_tonlib_sub_tonlibjson_export.h
+ sourceTree
+ SOURCE_ROOT
+ children
+
+ 1DD70E29F3A35BAD00000000
+
+
+ B401C979EAB5339800000000
+
+ isa
+ PBXGroup
+ name
+ Sources
+ sourceTree
+ ]]>
+ children
+
+ B401C979B9FF426400000000
+ B401C979813112B200000000
+ B401C979D7A0B39400000000
+ B401C979EFAB671700000000
+ B401C9793703712D00000000
+ B401C97929ECBE5A00000000
+ B401C9792B3C1DF100000000
+ B401C979DCA39E8E00000000
+ B401C979E268B03500000000
+ B401C9792B4A7E2F00000000
+ B401C979C030047100000000
+ B401C979525C76CB00000000
+ B401C979A95A054F00000000
+ B401C979F3A35BAD00000000
+
+
+ B401C9790001C15300000000
+
+ isa
+ PBXGroup
+ name
+ ton
+ sourceTree
+ ]]>
+ children
+
+ 1DD70E29001F47FB00000000
+ B401C979EAB5339800000000
+
+
+ B401C979EFB6AC4600000000
+
+ isa
+ PBXGroup
+ name
+ mainGroup
+ sourceTree
+ ]]>
+ children
+
+ B401C979B781F65D00000000
+ B401C979048F8EF000000000
+ B401C979C806358400000000
+ B401C9790001C15300000000
+
+
+ 4952437303EDA63300000000
+
+ isa
+ XCBuildConfiguration
+ name
+ Debug
+ buildSettings
+
+
+ baseConfigurationReference
+ 1DD70E299ED0C70200000000
+
+ 4952437350C7218900000000
+
+ isa
+ XCBuildConfiguration
+ name
+ Profile
+ buildSettings
+
+
+ baseConfigurationReference
+ 1DD70E2912DDA5EC00000000
+
+ 49524373A439BFE700000000
+
+ isa
+ XCBuildConfiguration
+ name
+ Release
+ buildSettings
+
+
+ baseConfigurationReference
+ 1DD70E298674514E00000000
+
+ 218C37090000000000000000
+
+ isa
+ XCConfigurationList
+ buildConfigurations
+
+ 4952437303EDA63300000000
+ 4952437350C7218900000000
+ 49524373A439BFE700000000
+
+ defaultConfigurationIsVisible
+
+
+ E66DC04E0001C15300000000
+
+ isa
+ PBXNativeTarget
+ name
+ ton
+ productName
+ ton
+ productReference
+ 1DD70E29333EE72100000000
+ productType
+ com.apple.product-type.library.static
+ dependencies
+
+
+ buildPhases
+
+
+ buildConfigurationList
+ 218C37090000000000000000
+
+ 4952437303EDA63300000001
+
+ isa
+ XCBuildConfiguration
+ name
+ Debug
+ buildSettings
+
+
+
+ 4952437350C7218900000001
+
+ isa
+ XCBuildConfiguration
+ name
+ Profile
+ buildSettings
+
+
+
+ 49524373A439BFE700000001
+
+ isa
+ XCBuildConfiguration
+ name
+ Release
+ buildSettings
+
+
+
+ 218C37090000000000000001
+
+ isa
+ XCConfigurationList
+ buildConfigurations
+
+ 4952437303EDA63300000001
+ 4952437350C7218900000001
+ 49524373A439BFE700000001
+
+ defaultConfigurationIsVisible
+
+
+ 96C847930001C15300000000
+
+ isa
+ PBXProject
+ mainGroup
+ B401C979EFB6AC4600000000
+ targets
+
+ E66DC04E0001C15300000000
+
+ buildConfigurationList
+ 218C37090000000000000001
+ compatibilityVersion
+ Xcode 3.2
+ attributes
+
+ LastUpgradeCheck
+ 9999
+
+
+
+ rootObject
+ 96C847930001C15300000000
+
+
\ No newline at end of file
diff --git a/submodules/ton/ton.xcodeproj/xcshareddata/xcschemes/ton.xcscheme b/submodules/ton/ton.xcodeproj/xcshareddata/xcschemes/ton.xcscheme
new file mode 100644
index 0000000000..3f9bd1e815
--- /dev/null
+++ b/submodules/ton/ton.xcodeproj/xcshareddata/xcschemes/ton.xcscheme
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/submodules/ton/tonlib-src/CMake/AddCXXCompilerFlag.cmake b/submodules/ton/tonlib-src/CMake/AddCXXCompilerFlag.cmake
new file mode 100644
index 0000000000..6fb615a1f7
--- /dev/null
+++ b/submodules/ton/tonlib-src/CMake/AddCXXCompilerFlag.cmake
@@ -0,0 +1,74 @@
+# - Adds a compiler flag if it is supported by the compiler
+#
+# This function checks that the supplied compiler flag is supported and then
+# adds it to the corresponding compiler flags
+#
+# add_cxx_compiler_flag( [])
+#
+# - Example
+#
+# include(AddCXXCompilerFlag)
+# add_cxx_compiler_flag(-Wall)
+# add_cxx_compiler_flag(-no-strict-aliasing RELEASE)
+# Requires CMake 2.6+
+
+if (__add_cxx_compiler_flag)
+ return()
+endif()
+set(__add_cxx_compiler_flag INCLUDED)
+
+include(CheckCXXCompilerFlag)
+
+function(mangle_compiler_flag FLAG OUTPUT)
+ string(TOUPPER "HAVE_CXX_FLAG_${FLAG}" SANITIZED_FLAG)
+ string(REPLACE "+" "X" SANITIZED_FLAG ${SANITIZED_FLAG})
+ string(REGEX REPLACE "[^A-Za-z_0-9]" "_" SANITIZED_FLAG ${SANITIZED_FLAG})
+ string(REGEX REPLACE "_+" "_" SANITIZED_FLAG ${SANITIZED_FLAG})
+ set(${OUTPUT} "${SANITIZED_FLAG}" PARENT_SCOPE)
+endfunction(mangle_compiler_flag)
+
+function(add_cxx_compiler_flag FLAG)
+ string(REPLACE "-Wno-" "-W" MAIN_FLAG ${FLAG})
+ mangle_compiler_flag("${MAIN_FLAG}" MANGLED_FLAG_NAME)
+ if (DEFINED CMAKE_REQUIRED_FLAGS)
+ set(OLD_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
+ set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${FLAG}")
+ else()
+ set(CMAKE_REQUIRED_FLAGS "${FLAG}")
+ endif()
+ check_cxx_compiler_flag("${MAIN_FLAG}" ${MANGLED_FLAG_NAME})
+ if (DEFINED OLD_CMAKE_REQUIRED_FLAGS)
+ set(CMAKE_REQUIRED_FLAGS "${OLD_CMAKE_REQUIRED_FLAGS}")
+ else()
+ unset(CMAKE_REQUIRED_FLAGS)
+ endif()
+ if (${MANGLED_FLAG_NAME})
+ set(VARIANT ${ARGV1})
+ if (ARGV1)
+ string(TOUPPER "_${VARIANT}" VARIANT)
+ endif()
+ set(CMAKE_CXX_FLAGS${VARIANT} "${CMAKE_CXX_FLAGS${VARIANT}} ${FLAG}" PARENT_SCOPE)
+ endif()
+endfunction()
+
+function(add_required_cxx_compiler_flag FLAG)
+ string(REPLACE "-Wno-" "-W" MAIN_FLAG ${FLAG})
+ mangle_compiler_flag("${MAIN_FLAG}" MANGLED_FLAG_NAME)
+ set(OLD_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
+ set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${FLAG}")
+ check_cxx_compiler_flag("${MAIN_FLAG}" ${MANGLED_FLAG_NAME})
+ set(CMAKE_REQUIRED_FLAGS "${OLD_CMAKE_REQUIRED_FLAGS}")
+ if (${MANGLED_FLAG_NAME})
+ set(VARIANT ${ARGV1})
+ if (ARGV1)
+ string(TOUPPER "_${VARIANT}" VARIANT)
+ endif()
+ set(CMAKE_CXX_FLAGS${VARIANT} "${CMAKE_CXX_FLAGS${VARIANT}} ${FLAG}" PARENT_SCOPE)
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${FLAG}" PARENT_SCOPE)
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${FLAG}" PARENT_SCOPE)
+ set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${FLAG}" PARENT_SCOPE)
+ set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${FLAG}" PARENT_SCOPE)
+ else()
+ message(FATAL_ERROR "Required flag '${FLAG}' is not supported by the compiler")
+ endif()
+endfunction()
diff --git a/submodules/ton/tonlib-src/CMake/FindJeMalloc.cmake b/submodules/ton/tonlib-src/CMake/FindJeMalloc.cmake
new file mode 100644
index 0000000000..7911f77c4c
--- /dev/null
+++ b/submodules/ton/tonlib-src/CMake/FindJeMalloc.cmake
@@ -0,0 +1,21 @@
+# - Find JeMalloc library
+# Find the native JeMalloc includes and library
+#
+# JEMALLOC_INCLUDE_DIR - where to find jemalloc.h, etc.
+# JEMALLOC_LIBRARIES - List of libraries when using jemalloc.
+# JEMALLOC_FOUND - True if jemalloc found.
+
+find_path(JEMALLOC_INCLUDE_DIR
+ NAMES jemalloc/jemalloc.h
+ HINTS ${JEMALLOC_ROOT_DIR}/include)
+
+find_library(JEMALLOC_LIBRARIES
+ NAMES jemalloc
+ HINTS ${JEMALLOC_ROOT_DIR}/lib)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(jemalloc DEFAULT_MSG JEMALLOC_LIBRARIES JEMALLOC_INCLUDE_DIR)
+
+mark_as_advanced(
+ JEMALLOC_LIBRARIES
+ JEMALLOC_INCLUDE_DIR)
diff --git a/submodules/ton/tonlib-src/CMake/FindMHD.cmake b/submodules/ton/tonlib-src/CMake/FindMHD.cmake
new file mode 100644
index 0000000000..822714a2c5
--- /dev/null
+++ b/submodules/ton/tonlib-src/CMake/FindMHD.cmake
@@ -0,0 +1,38 @@
+# - Try to find MHD
+# Once done this will define
+#
+# MHD_FOUND - system has MHD
+# MHD_INCLUDE_DIRS - the MHD include directory
+# MHD_LIBRARY - Link these to use MHD
+
+find_path(
+ MHD_INCLUDE_DIR
+ NAMES microhttpd.h
+ DOC "microhttpd include dir"
+)
+
+find_library(
+ MHD_LIBRARY
+ NAMES microhttpd microhttpd-10 libmicrohttpd libmicrohttpd-dll
+ DOC "microhttpd library"
+)
+
+set(MHD_INCLUDE_DIRS ${MHD_INCLUDE_DIR})
+set(MHD_LIBRARIES ${MHD_LIBRARY})
+
+# debug library on windows
+# same naming convention as in qt (appending debug library with d)
+# boost is using the same "hack" as us with "optimized" and "debug"
+# official MHD project actually uses _d suffix
+if (MSVC)
+ find_library(
+ MHD_LIBRARY_DEBUG
+ NAMES microhttpd_d microhttpd-10_d libmicrohttpd_d libmicrohttpd-dll_d
+ DOC "mhd debug library"
+ )
+ set(MHD_LIBRARIES optimized ${MHD_LIBRARIES} debug ${MHD_LIBRARY_DEBUG})
+endif()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(mhd DEFAULT_MSG MHD_INCLUDE_DIR MHD_LIBRARY)
+mark_as_advanced(MHD_INCLUDE_DIR MHD_LIBRARY)
diff --git a/submodules/ton/tonlib-src/CMake/FindReadline.cmake b/submodules/ton/tonlib-src/CMake/FindReadline.cmake
new file mode 100644
index 0000000000..3b1892cbc2
--- /dev/null
+++ b/submodules/ton/tonlib-src/CMake/FindReadline.cmake
@@ -0,0 +1,25 @@
+if (APPLE)
+ find_path(READLINE_INCLUDE_DIR readline/readline.h /usr/local/opt/readline/include /opt/local/include /opt/include /usr/local/include /usr/include NO_DEFAULT_PATH)
+endif()
+find_path(READLINE_INCLUDE_DIR readline/readline.h)
+
+if (APPLE)
+ find_library(READLINE_LIBRARY readline /usr/local/opt/readline/lib /opt/local/lib /opt/lib /usr/local/lib /usr/lib NO_DEFAULT_PATH)
+endif()
+find_library(READLINE_LIBRARY readline)
+
+if (READLINE_INCLUDE_DIR AND READLINE_LIBRARY AND NOT GNU_READLINE_FOUND)
+ set(CMAKE_REQUIRED_INCLUDES "${READLINE_INCLUDE_DIR}")
+ set(CMAKE_REQUIRED_LIBRARIES "${READLINE_LIBRARY}")
+ include(CheckCXXSourceCompiles)
+ unset(GNU_READLINE_FOUND CACHE)
+ check_cxx_source_compiles("#include \n#include \nint main() { rl_replace_line(\"\", 0); }" GNU_READLINE_FOUND)
+ if (NOT GNU_READLINE_FOUND)
+ unset(READLINE_INCLUDE_DIR CACHE)
+ unset(READLINE_LIBRARY CACHE)
+ endif()
+endif()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Readline DEFAULT_MSG READLINE_INCLUDE_DIR READLINE_LIBRARY)
+mark_as_advanced(READLINE_INCLUDE_DIR READLINE_LIBRARY)
diff --git a/submodules/ton/tonlib-src/CMake/UseLATEX.cmake b/submodules/ton/tonlib-src/CMake/UseLATEX.cmake
new file mode 100644
index 0000000000..5380522525
--- /dev/null
+++ b/submodules/ton/tonlib-src/CMake/UseLATEX.cmake
@@ -0,0 +1,1936 @@
+# File: UseLATEX.cmake
+# CMAKE commands to actually use the LaTeX compiler
+# Version: 2.4.6
+# Author: Kenneth Moreland
+#
+# Copyright 2004, 2015 Sandia Corporation.
+# Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive
+# license for use of this work by or on behalf of the U.S. Government.
+#
+# This software is released under the BSD 3-Clause License.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# 1. Redistributions of source code must retain the above copyright notice,
+# this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+# contributors may be used to endorse or promote products derived from this
+# software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+#
+# The following function is defined:
+#
+# add_latex_document(
+# [BIBFILES ]
+# [INPUTS ]
+# [IMAGE_DIRS]
+# [IMAGES]
+# [CONFIGURE]
+# [DEPENDS]
+# [MULTIBIB_NEWCITES]
+# [USE_BIBLATEX]
+# [USE_INDEX]
+# [INDEX_NAMES ]
+# [USE_GLOSSARY] [USE_NOMENCL]
+# [FORCE_PDF] [FORCE_DVI] [FORCE_HTML]
+# [TARGET_NAME]
+# [EXCLUDE_FROM_ALL]
+# [EXCLUDE_FROM_DEFAULTS])
+# Adds targets that compile . The latex output is placed
+# in LATEX_OUTPUT_PATH or CMAKE_CURRENT_BINARY_DIR if the former is
+# not set. The latex program is picky about where files are located,
+# so all input files are copied from the source directory to the
+# output directory. This includes the target tex file, any tex file
+# listed with the INPUTS option, the bibliography files listed with
+# the BIBFILES option, and any .cls, .bst, .clo, .sty, .ist, and .fd
+# files found in the current source directory. Images found in the
+# IMAGE_DIRS directories or listed by IMAGES are also copied to the
+# output directory and converted to an appropriate format if necessary.
+# Any tex files also listed with the CONFIGURE option are also processed
+# with the CMake CONFIGURE_FILE command (with the @ONLY flag). Any file
+# listed in CONFIGURE but not the target tex file or listed with INPUTS
+# has no effect. DEPENDS can be used to specify generated files that are
+# needed to compile the latex target.
+#
+# The following targets are made. The name prefix is based off of the
+# base name of the tex file unless TARGET_NAME is specified. If
+# TARGET_NAME is specified, then that name is used for the targets.
+#
+# name_dvi: Makes .dvi
+# name_pdf: Makes .pdf using pdflatex.
+# name_safepdf: Makes .pdf using ps2pdf. If using the
+# default program arguments, this will ensure all fonts
+# are embedded and no lossy compression has been
+# performed on images.
+# name_ps: Makes .ps
+# name_html: Makes .html
+# name_auxclean: Deletes .aux and other auxiliary files.
+# This is sometimes necessary if a LaTeX error occurs
+# and writes a bad aux file. Unlike the regular clean
+# target, it does not delete other input files, such as
+# converted images, to save time on the rebuild.
+#
+# Unless the EXCLUDE_FROM_ALL option is given, one of these targets
+# is added to the ALL target and built by default. Which target is
+# determined by the LATEX_DEFAULT_BUILD CMake variable. See the
+# documentation of that variable for more details.
+#
+# Unless the EXCLUDE_FROM_DEFAULTS option is given, all these targets
+# are added as dependencies to targets named dvi, pdf, safepdf, ps,
+# html, and auxclean, respectively.
+#
+# USE_BIBLATEX enables the use of biblatex/biber as an alternative to
+# bibtex. Bibtex remains the default if USE_BIBLATEX is not
+# specified.
+#
+# If the argument USE_INDEX is given, then commands to build an index
+# are made. If the argument INDEX_NAMES is given, an index file is
+# generated for each name in this list. See the LaTeX package multind
+# for more information about how to generate multiple indices.
+#
+# If the argument USE_GLOSSARY is given, then commands to
+# build a glossary are made. If the argument MULTIBIB_NEWCITES is
+# given, then additional bibtex calls are added to the build to
+# support the extra auxiliary files created with the \newcite command
+# in the multibib package.
+#
+# History:
+#
+# 2.4.6 Fix parse issue with older versions of CMake.
+#
+# 2.4.5 Fix issues with files and paths containing spaces.
+#
+# 2.4.4 Improve error reporting message when LaTeX fails.
+#
+# When LaTeX fails, delete the output file, which is invalid.
+#
+# Add warnings for "missing characters." These usually mean that a
+# non-ASCII character is in the document and will not be printed
+# correctly.
+#
+# 2.4.3 Check for warnings from the natbib package. When using natbib,
+# warnings for missing bibliography references look different. So
+# far, natbib seems to be quiet unless something is important, so
+# look for all natbib warnings. (We can change this later if
+# necessary.)
+#
+# 2.4.2 Fix an issue where new versions of ImageMagick expect the order of
+# options in command line execution of magick/convert. (See, for
+# example, http://www.imagemagick.org/Usage/basics/#why.)
+#
+# 2.4.1 Add ability to dump LaTeX log file when using batch mode. Batch
+# mode suppresses most output, often including error messages. To
+# make sure critical error messages get displayed, show the full log
+# on failures.
+#
+# 2.4.0 Remove "-r 600" from the default PDFTOPS_CONVERTER_FLAGS. The -r flag
+# is available from the Poppler version of pdftops, but not the Xpdf
+# version.
+#
+# Fix an issue with the flags for the different programs not being
+# properly separated.
+#
+# Fix an issue on windows where the = character is not allowed for
+# ps2pdf arguments.
+#
+# Change default arguments for latex and pdflatex commands. Makes the
+# output more quiet and prints out the file/line where errors occur.
+# (Thanks to Nikos Koukis.)
+#
+# After a LaTeX build, check the log file for warnings that are
+# indicative of problems with the build.
+#
+# Remove support for latex2html. Instead, use the htlatex program.
+# This is now part of TeX Live and most other distributions. It also
+# behaves much more like the other LaTeX programs. Also fixed some
+# nasty issues with the htlatex arguments.
+#
+# 2.3.2 Declare LaTeX input files as sources for targets so that they show
+# up in IDEs like QtCreator.
+#
+# Fix issue where main tex files in subdirectories were creating
+# invalid targets for building HTML. Just disable the HTML targets in
+# this case.
+#
+# 2.3.1 Support use of magick command instead of convert command for
+# ImageMagick 7.
+#
+# 2.3.0 Add USE_BIBLATEX option to support the biblatex package, which
+# requires using the program biber as a replacement for bibtex
+# (thanks to David Tracey).
+#
+# 2.2.1 Add STRINGS property to LATEX_DEFAULT_BUILD to make it easier to
+# select the default build in the CMake GUI.
+#
+# 2.2.0 Add TARGET_NAME option.
+#
+# 2.1.1 Support for finding bmp, ppm, and other image files.
+#
+# 2.1.0 Fix an error where the pdf target and others were defined multiple
+# times if UseLATEX.cmake was included multiple times.
+#
+# Added INDEX_NAMES option to support multiple indexes in a single
+# document from the multind package (thanks to Dan Lipsa).
+#
+# 2.0.0 First major revision of UseLATEX.cmake updates to more recent features
+# of CMake and some non-backward compatible changes.
+#
+# Changed all function and macro names to lower case. CMake's identifiers
+# are case insensitive, but the convention moved from all upper case to
+# all lower case somewhere around the release of CMake 2. (The original
+# version of UseLATEX.cmake predates that.)
+#
+# Remove condition matching in if statements. They are no longer necessary
+# and are even discouraged (because else clauses get confusing).
+#
+# Use "new" features available in CMake such as list and argument parsing.
+#
+# Remove some code that has been deprecated for a while.
+#
+# Mark variables for compiler and converter executables as advanced to
+# match the more conventional CMake behavior.
+#
+# Changed how default builds are specified and add the ability to force
+# a particular build.
+#
+# Made the base targets (pdf, dvi, etc.) global. add_latex_document
+# always mangles its target names and these base targets depend on
+# the targets with mangled names.
+#
+# 1.10.5 Fix for Window's convert check (thanks to Martin Baute).
+#
+# 1.10.4 Copy font files to binary directory for packages that come with
+# their own fonts.
+#
+# 1.10.3 Check for Windows version of convert being used instead of
+# ImageMagick's version (thanks to Martin Baute).
+#
+# 1.10.2 Use htlatex as a fallback when latex2html is not available (thanks
+# to Tomasz Grzegurzko).
+#
+# 1.10.1 Make convert program mandatory only if actually used (thanks to
+# Julien Schueller).
+#
+# 1.10.0 Added NO_DEFAULT and DEFAULT_PS options.
+# Fixed issue with cleaning files for LaTeX documents originating in
+# a subdirectory.
+#
+# 1.9.6 Fixed problem with LATEX_SMALL_IMAGES.
+# Strengthened check to make sure the output directory does not contain
+# the source files.
+#
+# 1.9.5 Add support for image types not directly supported by either latex
+# or pdflatex. (Thanks to Jorge Gerardo Pena Pastor for SVG support.)
+#
+# 1.9.4 Fix issues with filenames containing multiple periods.
+#
+# 1.9.3 Hide some variables that are now cached but should not show up in
+# the ccmake list of variables.
+#
+# 1.9.2 Changed MACRO declarations to FUNCTION declarations. The better
+# FUNCTION scoping will hopefully avoid some common but subtle bugs.
+# This implicitly increases the minimum CMake version to 4.6 (although
+# I honestly only test it with the latest 4.8 version).
+#
+# Since we are updating the minimum CMake version, I'm going to start
+# using the builtin LIST commands that are now available.
+#
+# Favor using pdftops from the Poppler package to convert from pdf to
+# eps. It does a much better job than ImageMagick or ghostscript.
+#
+# 1.9.1 Fixed typo that caused the LATEX_SMALL_IMAGES option to fail to
+# activate.
+#
+# 1.9.0 Add support for the multibib package (thanks to Antonio LaTorre).
+#
+# 1.8.2 Fix corner case when an argument name was also a variable containing
+# the text of an argument. In this case, the CMake IF was matching
+# the argument text with the contents of the variable with the same
+# argument name.
+#
+# 1.8.1 Fix problem where ps2pdf was not getting the appropriate arguments.
+#
+# 1.8.0 Add support for synctex.
+#
+# 1.7.7 Support calling xindy when making glossaries.
+#
+# Improved make clean support.
+#
+# 1.7.6 Add support for the nomencl package (thanks to Myles English).
+#
+# 1.7.5 Fix issue with bibfiles being copied two different ways, which causes
+# Problems with dependencies (thanks to Edwin van Leeuwen).
+#
+# 1.7.4 Added the DEFAULT_SAFEPDF option (thanks to Raymond Wan).
+#
+# Added warnings when image directories are not found (and were
+# probably not given relative to the source directory).
+#
+# 1.7.3 Fix some issues with interactions between makeglossaries and bibtex
+# (thanks to Mark de Wever).
+#
+# 1.7.2 Use ps2pdf to convert eps to pdf to get around the problem with
+# ImageMagick dropping the bounding box (thanks to Lukasz Lis).
+#
+# 1.7.1 Fixed some dependency issues.
+#
+# 1.7.0 Added DEPENDS options (thanks to Theodore Papadopoulo).
+#
+# 1.6.1 Ported the makeglossaries command to CMake and embedded the port
+# into UseLATEX.cmake.
+#
+# 1.6.0 Allow the use of the makeglossaries command. Thanks to Oystein
+# S. Haaland for the patch.
+#
+# 1.5.0 Allow any type of file in the INPUTS lists, not just tex file
+# (suggested by Eric Noulard). As a consequence, the ability to
+# specify tex files without the .tex extension is removed. The removed
+# function is of dubious value anyway.
+#
+# When copying input files, skip over any file that exists in the
+# binary directory but does not exist in the source directory with the
+# assumption that these files were added by some other mechanism. I
+# find this useful when creating large documents with multiple
+# chapters that I want to build separately (for speed) as I work on
+# them. I use the same boilerplate as the starting point for all
+# and just copy it with different configurations. This was what the
+# separate ADD_LATEX_DOCUMENT method was supposed to originally be for.
+# Since its external use is pretty much deprecated, I removed that
+# documentation.
+#
+# 1.4.1 Copy .sty files along with the other class and package files.
+#
+# 1.4.0 Added a MANGLE_TARGET_NAMES option that will mangle the target names.
+#
+# Fixed problem with copying bib files that became apparent with
+# CMake 2.4.
+#
+# 1.3.0 Added a LATEX_OUTPUT_PATH variable that allows you or the user to
+# specify where the built latex documents to go. This is especially
+# handy if you want to do in-source builds.
+#
+# Removed the ADD_LATEX_IMAGES macro and absorbed the functionality
+# into ADD_LATEX_DOCUMENT. The old interface was always kind of
+# clunky anyway since you had to specify the image directory in both
+# places. It also made supporting LATEX_OUTPUT_PATH problematic.
+#
+# Added support for jpeg files.
+#
+# 1.2.0 Changed the configuration options yet again. Removed the NO_CONFIGURE
+# Replaced it with a CONFIGURE option that lists input files for which
+# configure should be run.
+#
+# The pdf target no longer depends on the dvi target. This allows you
+# to build latex documents that require pdflatex. Also added an option
+# to make the pdf target the default one.
+#
+# 1.1.1 Added the NO_CONFIGURE option. The @ character can be used when
+# specifying table column separators. If two or more are used, then
+# will incorrectly substitute them.
+#
+# 1.1.0 Added ability include multiple bib files. Added ability to do copy
+# sub-tex files for multipart tex files.
+#
+# 1.0.0 If both ps and pdf type images exist, just copy the one that
+# matches the current render mode. Replaced a bunch of STRING
+# commands with GET_FILENAME_COMPONENT commands that were made to do
+# the desired function.
+#
+# 0.4.0 First version posted to CMake Wiki.
+#
+
+if(__USE_LATEX_INCLUDED)
+ return()
+endif()
+set(__USE_LATEX_INCLUDED TRUE)
+
+#############################################################################
+# Find the location of myself while originally executing. If you do this
+# inside of a macro, it will recode where the macro was invoked.
+#############################################################################
+set(LATEX_USE_LATEX_LOCATION ${CMAKE_CURRENT_LIST_FILE}
+ CACHE INTERNAL "Location of UseLATEX.cmake file." FORCE
+ )
+
+#############################################################################
+# Generic helper functions
+#############################################################################
+
+include(CMakeParseArguments)
+
+function(latex_list_contains var value)
+ set(input_list ${ARGN})
+ list(FIND input_list "${value}" index)
+ if(index GREATER -1)
+ set(${var} TRUE PARENT_SCOPE)
+ else()
+ set(${var} PARENT_SCOPE)
+ endif()
+endfunction(latex_list_contains)
+
+# Match the contents of a file to a regular expression.
+function(latex_file_match variable filename regexp default)
+ # The FILE STRINGS command would be a bit better, but I'm not totally sure
+ # the match will always be to a whole line, and I don't want to break things.
+ file(READ ${filename} file_contents)
+ string(REGEX MATCHALL "${regexp}"
+ match_result ${file_contents}
+ )
+ if(match_result)
+ set(${variable} "${match_result}" PARENT_SCOPE)
+ else()
+ set(${variable} "${default}" PARENT_SCOPE)
+ endif()
+endfunction(latex_file_match)
+
+# A version of GET_FILENAME_COMPONENT that treats extensions after the last
+# period rather than the first. To the best of my knowledge, all filenames
+# typically used by LaTeX, including image files, have small extensions
+# after the last dot.
+function(latex_get_filename_component varname filename type)
+ set(result)
+ if("${type}" STREQUAL "NAME_WE")
+ get_filename_component(name ${filename} NAME)
+ string(REGEX REPLACE "\\.[^.]*\$" "" result "${name}")
+ elseif("${type}" STREQUAL "EXT")
+ get_filename_component(name ${filename} NAME)
+ string(REGEX MATCH "\\.[^.]*\$" result "${name}")
+ else()
+ get_filename_component(result ${filename} ${type})
+ endif()
+ set(${varname} "${result}" PARENT_SCOPE)
+endfunction(latex_get_filename_component)
+
+#############################################################################
+# Functions that perform processing during a LaTeX build.
+#############################################################################
+function(latex_execute_latex)
+ if(NOT LATEX_TARGET)
+ message(SEND_ERROR "Need to define LATEX_TARGET")
+ endif()
+
+ if(NOT LATEX_WORKING_DIRECTORY)
+ message(SEND_ERROR "Need to define LATEX_WORKING_DIRECTORY")
+ endif()
+
+ if(NOT LATEX_FULL_COMMAND)
+ message(SEND_ERROR "Need to define LATEX_FULL_COMMAND")
+ endif()
+
+ if(NOT LATEX_OUTPUT_FILE)
+ message(SEND_ERROR "Need to define LATEX_OUTPUT_FILE")
+ endif()
+
+ set(full_command_original "${LATEX_FULL_COMMAND}")
+
+ # Chose the native method for parsing command arguments. Newer versions of
+ # CMake allow you to just use NATIVE_COMMAND.
+ if (CMAKE_VERSION VERSION_GREATER 3.8)
+ set(separate_arguments_mode NATIVE_COMMAND)
+ else()
+ if (WIN32)
+ set(separate_arguments_mode WINDOWS_COMMAND)
+ else()
+ set(separate_arguments_mode UNIX_COMMAND)
+ endif()
+ endif()
+
+ # Preps variables for use in execute_process.
+ # Even though we expect LATEX_WORKING_DIRECTORY to have a single "argument,"
+ # we also want to make sure that we strip out any escape characters that can
+ # foul up the WORKING_DIRECTORY argument.
+ separate_arguments(LATEX_FULL_COMMAND UNIX_COMMAND "${LATEX_FULL_COMMAND}")
+ separate_arguments(LATEX_WORKING_DIRECTORY UNIX_COMMAND "${LATEX_WORKING_DIRECTORY}")
+
+ execute_process(
+ COMMAND ${LATEX_FULL_COMMAND}
+ WORKING_DIRECTORY ${LATEX_WORKING_DIRECTORY}
+ RESULT_VARIABLE execute_result
+ )
+
+ if(NOT ${execute_result} EQUAL 0)
+ # LaTeX tends to write a file when a failure happens. Delete that file so
+ # that LaTeX will run again.
+ file(REMOVE "${LATEX_WORKING_DIRECTORY}/${LATEX_OUTPUT_FILE}")
+
+ message("\n\nLaTeX command failed")
+ message("${full_command_original}")
+ message("Log output:")
+ file(READ ${LATEX_WORKING_DIRECTORY}/${LATEX_TARGET}.log log_output)
+ message("${log_output}")
+ message(FATAL_ERROR
+ "Successfully executed LaTeX, but LaTeX returned an error.")
+ endif()
+endfunction(latex_execute_latex)
+
+function(latex_makeglossaries)
+ # This is really a bare bones port of the makeglossaries perl script into
+ # CMake scripting.
+ message("**************************** In makeglossaries")
+ if(NOT LATEX_TARGET)
+ message(SEND_ERROR "Need to define LATEX_TARGET")
+ endif()
+
+ set(aux_file ${LATEX_TARGET}.aux)
+
+ if(NOT EXISTS ${aux_file})
+ message(SEND_ERROR "${aux_file} does not exist. Run latex on your target file.")
+ endif()
+
+ latex_file_match(newglossary_lines ${aux_file}
+ "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}"
+ "@newglossary{main}{glg}{gls}{glo}"
+ )
+
+ latex_file_match(istfile_line ${aux_file}
+ "@istfilename[ \t]*{([^}]*)}"
+ "@istfilename{${LATEX_TARGET}.ist}"
+ )
+ string(REGEX REPLACE "@istfilename[ \t]*{([^}]*)}" "\\1"
+ istfile ${istfile_line}
+ )
+
+ string(REGEX MATCH ".*\\.xdy" use_xindy "${istfile}")
+ if(use_xindy)
+ message("*************** Using xindy")
+ if(NOT XINDY_COMPILER)
+ message(SEND_ERROR "Need to define XINDY_COMPILER")
+ endif()
+ else()
+ message("*************** Using makeindex")
+ if(NOT MAKEINDEX_COMPILER)
+ message(SEND_ERROR "Need to define MAKEINDEX_COMPILER")
+ endif()
+ endif()
+
+ foreach(newglossary ${newglossary_lines})
+ string(REGEX REPLACE
+ "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}"
+ "\\1" glossary_name ${newglossary}
+ )
+ string(REGEX REPLACE
+ "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}"
+ "${LATEX_TARGET}.\\2" glossary_log ${newglossary}
+ )
+ string(REGEX REPLACE
+ "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}"
+ "${LATEX_TARGET}.\\3" glossary_out ${newglossary}
+ )
+ string(REGEX REPLACE
+ "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}"
+ "${LATEX_TARGET}.\\4" glossary_in ${newglossary}
+ )
+
+ if(use_xindy)
+ latex_file_match(xdylanguage_line ${aux_file}
+ "@xdylanguage[ \t]*{${glossary_name}}{([^}]*)}"
+ "@xdylanguage{${glossary_name}}{english}"
+ )
+ string(REGEX REPLACE
+ "@xdylanguage[ \t]*{${glossary_name}}{([^}]*)}"
+ "\\1"
+ language
+ ${xdylanguage_line}
+ )
+ # What crazy person makes a LaTeX index generator that uses different
+ # identifiers for language than babel (or at least does not support
+ # the old ones)?
+ if(${language} STREQUAL "frenchb")
+ set(language "french")
+ elseif(${language} MATCHES "^n?germanb?$")
+ set(language "german")
+ elseif(${language} STREQUAL "magyar")
+ set(language "hungarian")
+ elseif(${language} STREQUAL "lsorbian")
+ set(language "lower-sorbian")
+ elseif(${language} STREQUAL "norsk")
+ set(language "norwegian")
+ elseif(${language} STREQUAL "portuges")
+ set(language "portuguese")
+ elseif(${language} STREQUAL "russianb")
+ set(language "russian")
+ elseif(${language} STREQUAL "slovene")
+ set(language "slovenian")
+ elseif(${language} STREQUAL "ukraineb")
+ set(language "ukrainian")
+ elseif(${language} STREQUAL "usorbian")
+ set(language "upper-sorbian")
+ endif()
+ if(language)
+ set(language_flags "-L ${language}")
+ else()
+ set(language_flags "")
+ endif()
+
+ latex_file_match(codepage_line ${aux_file}
+ "@gls@codepage[ \t]*{${glossary_name}}{([^}]*)}"
+ "@gls@codepage{${glossary_name}}{utf}"
+ )
+ string(REGEX REPLACE
+ "@gls@codepage[ \t]*{${glossary_name}}{([^}]*)}"
+ "\\1"
+ codepage
+ ${codepage_line}
+ )
+ if(codepage)
+ set(codepage_flags "-C ${codepage}")
+ else()
+ # Ideally, we would check that the language is compatible with the
+ # default codepage, but I'm hoping that distributions will be smart
+ # enough to specify their own codepage. I know, it's asking a lot.
+ set(codepage_flags "")
+ endif()
+
+ message("${XINDY_COMPILER} ${MAKEGLOSSARIES_COMPILER_ARGS} ${language_flags} ${codepage_flags} -I xindy -M ${glossary_name} -t ${glossary_log} -o ${glossary_out} ${glossary_in}"
+ )
+ exec_program(${XINDY_COMPILER}
+ ARGS ${MAKEGLOSSARIES_COMPILER_ARGS}
+ ${language_flags}
+ ${codepage_flags}
+ -I xindy
+ -M ${glossary_name}
+ -t ${glossary_log}
+ -o ${glossary_out}
+ ${glossary_in}
+ OUTPUT_VARIABLE xindy_output
+ )
+ message("${xindy_output}")
+
+ # So, it is possible (perhaps common?) for aux files to specify a
+ # language and codepage that are incompatible with each other. Check
+ # for that condition, and if it happens run again with the default
+ # codepage.
+ if("${xindy_output}" MATCHES "^Cannot locate xindy module for language (.+) in codepage (.+)\\.$")
+ message("*************** Retrying xindy with default codepage.")
+ exec_program(${XINDY_COMPILER}
+ ARGS ${MAKEGLOSSARIES_COMPILER_ARGS}
+ ${language_flags}
+ -I xindy
+ -M ${glossary_name}
+ -t ${glossary_log}
+ -o ${glossary_out}
+ ${glossary_in}
+ )
+ endif()
+
+ else()
+ message("${MAKEINDEX_COMPILER} ${MAKEGLOSSARIES_COMPILER_ARGS} -s ${istfile} -t ${glossary_log} -o ${glossary_out} ${glossary_in}")
+ exec_program(${MAKEINDEX_COMPILER} ARGS ${MAKEGLOSSARIES_COMPILER_ARGS}
+ -s ${istfile} -t ${glossary_log} -o ${glossary_out} ${glossary_in}
+ )
+ endif()
+
+ endforeach(newglossary)
+endfunction(latex_makeglossaries)
+
+function(latex_makenomenclature)
+ message("**************************** In makenomenclature")
+ if(NOT LATEX_TARGET)
+ message(SEND_ERROR "Need to define LATEX_TARGET")
+ endif()
+
+ if(NOT MAKEINDEX_COMPILER)
+ message(SEND_ERROR "Need to define MAKEINDEX_COMPILER")
+ endif()
+
+ set(nomencl_out ${LATEX_TARGET}.nls)
+ set(nomencl_in ${LATEX_TARGET}.nlo)
+
+ exec_program(${MAKEINDEX_COMPILER} ARGS ${MAKENOMENCLATURE_COMPILER_ARGS}
+ ${nomencl_in} -s "nomencl.ist" -o ${nomencl_out}
+ )
+endfunction(latex_makenomenclature)
+
+function(latex_correct_synctex)
+ message("**************************** In correct SyncTeX")
+ if(NOT LATEX_TARGET)
+ message(SEND_ERROR "Need to define LATEX_TARGET")
+ endif()
+
+ if(NOT GZIP)
+ message(SEND_ERROR "Need to define GZIP")
+ endif()
+
+ if(NOT LATEX_SOURCE_DIRECTORY)
+ message(SEND_ERROR "Need to define LATEX_SOURCE_DIRECTORY")
+ endif()
+
+ if(NOT LATEX_BINARY_DIRECTORY)
+ message(SEND_ERROR "Need to define LATEX_BINARY_DIRECTORY")
+ endif()
+
+ set(synctex_file ${LATEX_BINARY_DIRECTORY}/${LATEX_TARGET}.synctex)
+ set(synctex_file_gz ${synctex_file}.gz)
+
+ if(EXISTS ${synctex_file_gz})
+
+ message("Making backup of synctex file.")
+ configure_file(${synctex_file_gz} ${synctex_file}.bak.gz COPYONLY)
+
+ message("Uncompressing synctex file.")
+ exec_program(${GZIP}
+ ARGS --decompress ${synctex_file_gz}
+ )
+
+ message("Reading synctex file.")
+ file(READ ${synctex_file} synctex_data)
+
+ message("Replacing relative with absolute paths.")
+ string(REGEX REPLACE
+ "(Input:[0-9]+:)([^/\n][^\n]*)"
+ "\\1${LATEX_SOURCE_DIRECTORY}/\\2"
+ synctex_data
+ "${synctex_data}"
+ )
+
+ message("Writing synctex file.")
+ file(WRITE ${synctex_file} "${synctex_data}")
+
+ message("Compressing synctex file.")
+ exec_program(${GZIP}
+ ARGS ${synctex_file}
+ )
+
+ else()
+
+ message(SEND_ERROR "File ${synctex_file_gz} not found. Perhaps synctex is not supported by your LaTeX compiler.")
+
+ endif()
+
+endfunction(latex_correct_synctex)
+
+function(latex_check_important_warnings)
+ set(log_file ${LATEX_TARGET}.log)
+
+ message("\nChecking ${log_file} for important warnings.")
+ if(NOT LATEX_TARGET)
+ message(SEND_ERROR "Need to define LATEX_TARGET")
+ endif()
+
+ if(NOT EXISTS ${log_file})
+ message("Could not find log file: ${log_file}")
+ return()
+ endif()
+
+ set(found_error)
+
+ file(READ ${log_file} log)
+
+ # Check for undefined references
+ string(REGEX MATCHALL
+ "\n[^\n]*Reference[^\n]*undefined[^\n]*"
+ reference_warnings
+ "${log}")
+ if(reference_warnings)
+ set(found_error TRUE)
+ message("\nFound missing reference warnings.")
+ foreach(warning ${reference_warnings})
+ string(STRIP "${warning}" warning_no_newline)
+ message("${warning_no_newline}")
+ endforeach(warning)
+ endif()
+
+ # Check for natbib warnings
+ string(REGEX MATCHALL
+ "\nPackage natbib Warning:[^\n]*"
+ natbib_warnings
+ "${log}")
+ if(natbib_warnings)
+ set(found_error TRUE)
+ message("\nFound natbib package warnings.")
+ foreach(warning ${natbib_warnings})
+ string(STRIP "${warning}" warning_no_newline)
+ message("${warning_no_newline}")
+ endforeach(warning)
+ endif()
+
+ # Check for overfull
+ string(REGEX MATCHALL
+ "\nOverfull[^\n]*"
+ overfull_warnings
+ "${log}")
+ if(overfull_warnings)
+ set(found_error TRUE)
+ message("\nFound overfull warnings. These are indicative of layout errors.")
+ foreach(warning ${overfull_warnings})
+ string(STRIP "${warning}" warning_no_newline)
+ message("${warning_no_newline}")
+ endforeach(warning)
+ endif()
+
+ # Check for invalid characters
+ string(REGEX MATCHALL
+ "\nMissing character:[^\n]*"
+ invalid_character_warnings
+ "${log}")
+ if(invalid_character_warnings)
+ set(found_error TRUE)
+ message("\nFound invalid character warnings. These characters are likely not printed correctly.")
+ foreach(warning ${invalid_character_warnings})
+ string(STRIP "${warning}" warning_no_newline)
+ message("${warning_no_newline}")
+ endforeach(warning)
+ endif()
+
+ if(found_error)
+ latex_get_filename_component(log_file_path ${log_file} ABSOLUTE)
+ message("\nConsult ${log_file_path} for more information on LaTeX build.")
+ else()
+ message("No known important warnings found.")
+ endif(found_error)
+endfunction(latex_check_important_warnings)
+
+#############################################################################
+# Helper functions for establishing LaTeX build.
+#############################################################################
+
+function(latex_needit VAR NAME)
+ if(NOT ${VAR})
+ message(SEND_ERROR "I need the ${NAME} command.")
+ endif()
+endfunction(latex_needit)
+
+function(latex_wantit VAR NAME)
+ if(NOT ${VAR})
+ message(STATUS "I could not find the ${NAME} command.")
+ endif()
+endfunction(latex_wantit)
+
+function(latex_setup_variables)
+ set(LATEX_OUTPUT_PATH "${LATEX_OUTPUT_PATH}"
+ CACHE PATH "If non empty, specifies the location to place LaTeX output."
+ )
+
+ find_package(LATEX)
+
+ find_program(XINDY_COMPILER
+ NAME xindy
+ PATHS ${MIKTEX_BINARY_PATH} /usr/bin
+ )
+
+ find_package(UnixCommands)
+
+ find_program(PDFTOPS_CONVERTER
+ NAMES pdftops
+ DOC "The pdf to ps converter program from the Poppler package."
+ )
+
+ find_program(HTLATEX_COMPILER
+ NAMES htlatex
+ PATHS ${MIKTEX_BINARY_PATH}
+ /usr/bin
+ )
+
+ mark_as_advanced(
+ LATEX_COMPILER
+ PDFLATEX_COMPILER
+ BIBTEX_COMPILER
+ BIBER_COMPILER
+ MAKEINDEX_COMPILER
+ XINDY_COMPILER
+ DVIPS_CONVERTER
+ PS2PDF_CONVERTER
+ PDFTOPS_CONVERTER
+ LATEX2HTML_CONVERTER
+ HTLATEX_COMPILER
+ )
+
+ latex_needit(LATEX_COMPILER latex)
+ latex_wantit(PDFLATEX_COMPILER pdflatex)
+ latex_wantit(HTLATEX_COMPILER htlatex)
+ latex_needit(BIBTEX_COMPILER bibtex)
+ latex_wantit(BIBER_COMPILER biber)
+ latex_needit(MAKEINDEX_COMPILER makeindex)
+ latex_wantit(DVIPS_CONVERTER dvips)
+ latex_wantit(PS2PDF_CONVERTER ps2pdf)
+ latex_wantit(PDFTOPS_CONVERTER pdftops)
+
+ set(LATEX_COMPILER_FLAGS "-interaction=batchmode -file-line-error"
+ CACHE STRING "Flags passed to latex.")
+ set(PDFLATEX_COMPILER_FLAGS ${LATEX_COMPILER_FLAGS}
+ CACHE STRING "Flags passed to pdflatex.")
+ set(HTLATEX_COMPILER_TEX4HT_FLAGS "html"
+ CACHE STRING "Options for the tex4ht.sty and *.4ht style files.")
+ set(HTLATEX_COMPILER_TEX4HT_POSTPROCESSOR_FLAGS ""
+ CACHE STRING "Options for the text4ht postprocessor.")
+ set(HTLATEX_COMPILER_T4HT_POSTPROCESSOR_FLAGS ""
+ CACHE STRING "Options for the t4ht postprocessor.")
+ set(HTLATEX_COMPILER_LATEX_FLAGS ${LATEX_COMPILER_FLAGS}
+ CACHE STRING "Flags passed from htlatex to the LaTeX compiler.")
+ set(LATEX_SYNCTEX_FLAGS "-synctex=1"
+ CACHE STRING "latex/pdflatex flags used to create synctex file.")
+ set(BIBTEX_COMPILER_FLAGS ""
+ CACHE STRING "Flags passed to bibtex.")
+ set(BIBER_COMPILER_FLAGS ""
+ CACHE STRING "Flags passed to biber.")
+ set(MAKEINDEX_COMPILER_FLAGS ""
+ CACHE STRING "Flags passed to makeindex.")
+ set(MAKEGLOSSARIES_COMPILER_FLAGS ""
+ CACHE STRING "Flags passed to makeglossaries.")
+ set(MAKENOMENCLATURE_COMPILER_FLAGS ""
+ CACHE STRING "Flags passed to makenomenclature.")
+ set(DVIPS_CONVERTER_FLAGS "-Ppdf -G0 -t letter"
+ CACHE STRING "Flags passed to dvips.")
+ if(NOT WIN32)
+ set(PS2PDF_CONVERTER_FLAGS "-dMaxSubsetPct=100 -dCompatibilityLevel=1.3 -dSubsetFonts=true -dEmbedAllFonts=true -dAutoFilterColorImages=false -dAutoFilterGrayImages=false -dColorImageFilter=/FlateEncode -dGrayImageFilter=/FlateEncode -dMonoImageFilter=/FlateEncode"
+ CACHE STRING "Flags passed to ps2pdf.")
+ else()
+ # Most windows ports of ghostscript utilities use .bat files for ps2pdf
+ # commands. bat scripts interpret "=" as a special character and separate
+ # those arguments. To get around this, the ghostscript utilities also
+ # support using "#" in place of "=".
+ set(PS2PDF_CONVERTER_FLAGS "-dMaxSubsetPct#100 -dCompatibilityLevel#1.3 -dSubsetFonts#true -dEmbedAllFonts#true -dAutoFilterColorImages#false -dAutoFilterGrayImages#false -dColorImageFilter#/FlateEncode -dGrayImageFilter#/FlateEncode -dMonoImageFilter#/FlateEncode"
+ CACHE STRING "Flags passed to ps2pdf.")
+ endif()
+ set(PDFTOPS_CONVERTER_FLAGS ""
+ CACHE STRING "Flags passed to pdftops.")
+ mark_as_advanced(
+ LATEX_COMPILER_FLAGS
+ PDFLATEX_COMPILER_FLAGS
+ HTLATEX_COMPILER_TEX4HT_FLAGS
+ HTLATEX_COMPILER_TEX4HT_POSTPROCESSOR_FLAGS
+ HTLATEX_COMPILER_T4HT_POSTPROCESSOR_FLAGS
+ HTLATEX_COMPILER_LATEX_FLAGS
+ LATEX_SYNCTEX_FLAGS
+ BIBTEX_COMPILER_FLAGS
+ BIBER_COMPILER_FLAGS
+ MAKEINDEX_COMPILER_FLAGS
+ MAKEGLOSSARIES_COMPILER_FLAGS
+ MAKENOMENCLATURE_COMPILER_FLAGS
+ DVIPS_CONVERTER_FLAGS
+ PS2PDF_CONVERTER_FLAGS
+ PDFTOPS_CONVERTER_FLAGS
+ )
+
+ # Because it is easier to type, the flags variables are entered as
+ # space-separated strings much like you would in a shell. However, when
+ # using a CMake command to execute a program, it works better to hold the
+ # arguments in semicolon-separated lists (otherwise the whole string will
+ # be interpreted as a single argument). Use the separate_arguments to
+ # convert the space-separated strings to semicolon-separated lists.
+ separate_arguments(LATEX_COMPILER_FLAGS)
+ separate_arguments(PDFLATEX_COMPILER_FLAGS)
+ separate_arguments(HTLATEX_COMPILER_LATEX_FLAGS)
+ separate_arguments(LATEX_SYNCTEX_FLAGS)
+ separate_arguments(BIBTEX_COMPILER_FLAGS)
+ separate_arguments(BIBER_COMPILER_FLAGS)
+ separate_arguments(MAKEINDEX_COMPILER_FLAGS)
+ separate_arguments(MAKEGLOSSARIES_COMPILER_FLAGS)
+ separate_arguments(MAKENOMENCLATURE_COMPILER_FLAGS)
+ separate_arguments(DVIPS_CONVERTER_FLAGS)
+ separate_arguments(PS2PDF_CONVERTER_FLAGS)
+ separate_arguments(PDFTOPS_CONVERTER_FLAGS)
+
+ # Not quite done. When you call separate_arguments on a cache variable,
+ # the result is written to a local variable. That local variable goes
+ # away when this function returns (which is before any of them are used).
+ # So, copy these variables with local scope to cache variables with
+ # global scope.
+ set(LATEX_COMPILER_ARGS "${LATEX_COMPILER_FLAGS}" CACHE INTERNAL "")
+ set(PDFLATEX_COMPILER_ARGS "${PDFLATEX_COMPILER_FLAGS}" CACHE INTERNAL "")
+ set(HTLATEX_COMPILER_ARGS "${HTLATEX_COMPILER_LATEX_FLAGS}" CACHE INTERNAL "")
+ set(LATEX_SYNCTEX_ARGS "${LATEX_SYNCTEX_FLAGS}" CACHE INTERNAL "")
+ set(BIBTEX_COMPILER_ARGS "${BIBTEX_COMPILER_FLAGS}" CACHE INTERNAL "")
+ set(BIBER_COMPILER_ARGS "${BIBER_COMPILER_FLAGS}" CACHE INTERNAL "")
+ set(MAKEINDEX_COMPILER_ARGS "${MAKEINDEX_COMPILER_FLAGS}" CACHE INTERNAL "")
+ set(MAKEGLOSSARIES_COMPILER_ARGS "${MAKEGLOSSARIES_COMPILER_FLAGS}" CACHE INTERNAL "")
+ set(MAKENOMENCLATURE_COMPILER_ARGS "${MAKENOMENCLATURE_COMPILER_FLAGS}" CACHE INTERNAL "")
+ set(DVIPS_CONVERTER_ARGS "${DVIPS_CONVERTER_FLAGS}" CACHE INTERNAL "")
+ set(PS2PDF_CONVERTER_ARGS "${PS2PDF_CONVERTER_FLAGS}" CACHE INTERNAL "")
+ set(PDFTOPS_CONVERTER_ARGS "${PDFTOPS_CONVERTER_FLAGS}" CACHE INTERNAL "")
+
+ find_program(IMAGEMAGICK_CONVERT
+ NAMES magick convert
+ DOC "The convert program that comes with ImageMagick (available at http://www.imagemagick.org)."
+ )
+ mark_as_advanced(IMAGEMAGICK_CONVERT)
+
+ if(DEFINED ENV{LATEX_DEFAULT_BUILD})
+ set(default_build $ENV{LATEX_DEFAULT_BUILD})
+ else()
+ set(default_build pdf)
+ endif()
+
+ set(LATEX_DEFAULT_BUILD "${default_build}" CACHE STRING
+ "Choose the default type of LaTeX build. Valid options are pdf, dvi, ps, safepdf, html"
+ )
+ set_property(CACHE LATEX_DEFAULT_BUILD
+ PROPERTY STRINGS pdf dvi ps safepdf html
+ )
+
+ option(LATEX_USE_SYNCTEX
+ "If on, have LaTeX generate a synctex file, which WYSIWYG editors can use to correlate output files like dvi and pdf with the lines of LaTeX source that generates them. In addition to adding the LATEX_SYNCTEX_FLAGS to the command line, this option also adds build commands that \"corrects\" the resulting synctex file to point to the original LaTeX files rather than those generated by UseLATEX.cmake."
+ OFF
+ )
+
+ option(LATEX_SMALL_IMAGES
+ "If on, the raster images will be converted to 1/6 the original size. This is because papers usually require 600 dpi images whereas most monitors only require at most 96 dpi. Thus, smaller images make smaller files for web distribution and can make it faster to read dvi files."
+ OFF)
+ if(LATEX_SMALL_IMAGES)
+ set(LATEX_RASTER_SCALE 16 PARENT_SCOPE)
+ set(LATEX_OPPOSITE_RASTER_SCALE 100 PARENT_SCOPE)
+ else()
+ set(LATEX_RASTER_SCALE 100 PARENT_SCOPE)
+ set(LATEX_OPPOSITE_RASTER_SCALE 16 PARENT_SCOPE)
+ endif()
+
+ # Just holds extensions for known image types. They should all be lower case.
+ # For historical reasons, these are all declared in the global scope.
+ set(LATEX_DVI_VECTOR_IMAGE_EXTENSIONS .eps CACHE INTERNAL "")
+ set(LATEX_DVI_RASTER_IMAGE_EXTENSIONS CACHE INTERNAL "")
+ set(LATEX_DVI_IMAGE_EXTENSIONS
+ ${LATEX_DVI_VECTOR_IMAGE_EXTENSIONS}
+ ${LATEX_DVI_RASTER_IMAGE_EXTENSIONS}
+ CACHE INTERNAL ""
+ )
+
+ set(LATEX_PDF_VECTOR_IMAGE_EXTENSIONS .pdf CACHE INTERNAL "")
+ set(LATEX_PDF_RASTER_IMAGE_EXTENSIONS .jpeg .jpg .png CACHE INTERNAL "")
+ set(LATEX_PDF_IMAGE_EXTENSIONS
+ ${LATEX_PDF_VECTOR_IMAGE_EXTENSIONS}
+ ${LATEX_PDF_RASTER_IMAGE_EXTENSIONS}
+ CACHE INTERNAL ""
+ )
+
+ set(LATEX_OTHER_VECTOR_IMAGE_EXTENSIONS .ai .dot .svg CACHE INTERNAL "")
+ set(LATEX_OTHER_RASTER_IMAGE_EXTENSIONS
+ .bmp .bmp2 .bmp3 .dcm .dcx .ico .gif .pict .ppm .tif .tiff
+ CACHE INTERNAL "")
+ set(LATEX_OTHER_IMAGE_EXTENSIONS
+ ${LATEX_OTHER_VECTOR_IMAGE_EXTENSIONS}
+ ${LATEX_OTHER_RASTER_IMAGE_EXTENSIONS}
+ CACHE INTERNAL ""
+ )
+
+ set(LATEX_VECTOR_IMAGE_EXTENSIONS
+ ${LATEX_DVI_VECTOR_IMAGE_EXTENSIONS}
+ ${LATEX_PDF_VECTOR_IMAGE_EXTENSIONS}
+ ${LATEX_OTHER_VECTOR_IMAGE_EXTENSIONS}
+ CACHE INTERNAL ""
+ )
+ set(LATEX_RASTER_IMAGE_EXTENSIONS
+ ${LATEX_DVI_RASTER_IMAGE_EXTENSIONS}
+ ${LATEX_PDF_RASTER_IMAGE_EXTENSIONS}
+ ${LATEX_OTHER_RASTER_IMAGE_EXTENSIONS}
+ CACHE INTERNAL ""
+ )
+ set(LATEX_IMAGE_EXTENSIONS
+ ${LATEX_DVI_IMAGE_EXTENSIONS}
+ ${LATEX_PDF_IMAGE_EXTENSIONS}
+ ${LATEX_OTHER_IMAGE_EXTENSIONS}
+ CACHE INTERNAL ""
+ )
+endfunction(latex_setup_variables)
+
+function(latex_setup_targets)
+ if(NOT TARGET pdf)
+ add_custom_target(pdf)
+ endif()
+ if(NOT TARGET dvi)
+ add_custom_target(dvi)
+ endif()
+ if(NOT TARGET ps)
+ add_custom_target(ps)
+ endif()
+ if(NOT TARGET safepdf)
+ add_custom_target(safepdf)
+ endif()
+ if(NOT TARGET html)
+ add_custom_target(html)
+ endif()
+ if(NOT TARGET auxclean)
+ add_custom_target(auxclean)
+ endif()
+endfunction(latex_setup_targets)
+
+function(latex_get_output_path var)
+ set(latex_output_path)
+ if(LATEX_OUTPUT_PATH)
+ get_filename_component(
+ LATEX_OUTPUT_PATH_FULL "${LATEX_OUTPUT_PATH}" ABSOLUTE
+ )
+ if("${LATEX_OUTPUT_PATH_FULL}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
+ message(SEND_ERROR "You cannot set LATEX_OUTPUT_PATH to the same directory that contains LaTeX input files.")
+ else()
+ set(latex_output_path "${LATEX_OUTPUT_PATH_FULL}")
+ endif()
+ else()
+ if("${CMAKE_CURRENT_BINARY_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
+ message(SEND_ERROR "LaTeX files must be built out of source or you must set LATEX_OUTPUT_PATH.")
+ else()
+ set(latex_output_path "${CMAKE_CURRENT_BINARY_DIR}")
+ endif()
+ endif()
+ set(${var} ${latex_output_path} PARENT_SCOPE)
+endfunction(latex_get_output_path)
+
+function(latex_add_convert_command
+ output_path
+ input_path
+ output_extension
+ input_extension
+ flags
+ )
+ set(require_imagemagick_convert TRUE)
+ set(convert_flags "")
+ if(${input_extension} STREQUAL ".eps" AND ${output_extension} STREQUAL ".pdf")
+ # ImageMagick has broken eps to pdf conversion
+ # use ps2pdf instead
+ if(PS2PDF_CONVERTER)
+ set(require_imagemagick_convert FALSE)
+ set(converter ${PS2PDF_CONVERTER})
+ set(convert_flags -dEPSCrop ${PS2PDF_CONVERTER_ARGS})
+ else()
+ message(SEND_ERROR "Using postscript files with pdflatex requires ps2pdf for conversion.")
+ endif()
+ elseif(${input_extension} STREQUAL ".pdf" AND ${output_extension} STREQUAL ".eps")
+ # ImageMagick can also be sketchy on pdf to eps conversion. Not good with
+ # color spaces and tends to unnecessarily rasterize.
+ # use pdftops instead
+ if(PDFTOPS_CONVERTER)
+ set(require_imagemagick_convert FALSE)
+ set(converter ${PDFTOPS_CONVERTER})
+ set(convert_flags -eps ${PDFTOPS_CONVERTER_ARGS})
+ else()
+ message(STATUS "Consider getting pdftops from Poppler to convert PDF images to EPS images.")
+ set(convert_flags ${flags})
+ endif()
+ else()
+ set(convert_flags ${flags})
+ endif()
+
+ if(require_imagemagick_convert)
+ if(IMAGEMAGICK_CONVERT)
+ string(TOLOWER ${IMAGEMAGICK_CONVERT} IMAGEMAGICK_CONVERT_LOWERCASE)
+ if(${IMAGEMAGICK_CONVERT_LOWERCASE} MATCHES "system32[/\\\\]convert\\.exe")
+ message(SEND_ERROR "IMAGEMAGICK_CONVERT set to Window's convert.exe for changing file systems rather than ImageMagick's convert for changing image formats. Please make sure ImageMagick is installed (available at http://www.imagemagick.org). If you have a recent version of ImageMagick (7.0 or higher), use the magick program instead of convert for IMAGEMAGICK_CONVERT.")
+ else()
+ set(converter ${IMAGEMAGICK_CONVERT})
+ # ImageMagick requires a special order of arguments where resize and
+ # arguments of that nature must be placed after the input image path.
+ add_custom_command(OUTPUT ${output_path}
+ COMMAND ${converter}
+ ARGS ${input_path} ${convert_flags} ${output_path}
+ DEPENDS ${input_path}
+ )
+ endif()
+ else()
+ message(SEND_ERROR "Could not find convert program. Please download ImageMagick from http://www.imagemagick.org and install.")
+ endif()
+ else() # Not ImageMagick convert
+ add_custom_command(OUTPUT ${output_path}
+ COMMAND ${converter}
+ ARGS ${convert_flags} ${input_path} ${output_path}
+ DEPENDS ${input_path}
+ )
+ endif()
+endfunction(latex_add_convert_command)
+
+# Makes custom commands to convert a file to a particular type.
+function(latex_convert_image
+ output_files_var
+ input_file
+ output_extension
+ convert_flags
+ output_extensions
+ other_files
+ )
+ set(output_file_list)
+ set(input_dir ${CMAKE_CURRENT_SOURCE_DIR})
+ latex_get_output_path(output_dir)
+
+ latex_get_filename_component(extension "${input_file}" EXT)
+
+ # Check input filename for potential problems with LaTeX.
+ latex_get_filename_component(name "${input_file}" NAME_WE)
+ set(suggested_name "${name}")
+ if(suggested_name MATCHES ".*\\..*")
+ string(REPLACE "." "-" suggested_name "${suggested_name}")
+ endif()
+ if(suggested_name MATCHES ".* .*")
+ string(REPLACE " " "-" suggested_name "${suggested_name}")
+ endif()
+ if(NOT suggested_name STREQUAL name)
+ message(WARNING "Some LaTeX distributions have problems with image file names with multiple extensions or spaces. Consider changing ${name}${extension} to something like ${suggested_name}${extension}.")
+ endif()
+
+ string(REGEX REPLACE "\\.[^.]*\$" ${output_extension} output_file
+ "${input_file}")
+
+ latex_list_contains(is_type ${extension} ${output_extensions})
+ if(is_type)
+ if(convert_flags)
+ latex_add_convert_command(${output_dir}/${output_file}
+ ${input_dir}/${input_file} ${output_extension} ${extension}
+ "${convert_flags}")
+ set(output_file_list ${output_dir}/${output_file})
+ else()
+ # As a shortcut, we can just copy the file.
+ add_custom_command(OUTPUT ${output_dir}/${input_file}
+ COMMAND ${CMAKE_COMMAND}
+ ARGS -E copy ${input_dir}/${input_file} ${output_dir}/${input_file}
+ DEPENDS ${input_dir}/${input_file}
+ )
+ set(output_file_list ${output_dir}/${input_file})
+ endif()
+ else()
+ set(do_convert TRUE)
+ # Check to see if there is another input file of the appropriate type.
+ foreach(valid_extension ${output_extensions})
+ string(REGEX REPLACE "\\.[^.]*\$" ${output_extension} try_file
+ "${input_file}")
+ latex_list_contains(has_native_file "${try_file}" ${other_files})
+ if(has_native_file)
+ set(do_convert FALSE)
+ endif()
+ endforeach(valid_extension)
+
+ # If we still need to convert, do it.
+ if(do_convert)
+ latex_add_convert_command(${output_dir}/${output_file}
+ ${input_dir}/${input_file} ${output_extension} ${extension}
+ "${convert_flags}")
+ set(output_file_list ${output_dir}/${output_file})
+ endif()
+ endif()
+
+ set(${output_files_var} ${output_file_list} PARENT_SCOPE)
+endfunction(latex_convert_image)
+
+# Adds custom commands to process the given files for dvi and pdf builds.
+# Adds the output files to the given variables (does not replace).
+function(latex_process_images dvi_outputs_var pdf_outputs_var)
+ latex_get_output_path(output_dir)
+ set(dvi_outputs)
+ set(pdf_outputs)
+ foreach(file ${ARGN})
+ if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${file}")
+ latex_get_filename_component(extension "${file}" EXT)
+ set(convert_flags)
+
+ # Check to see if we need to downsample the image.
+ latex_list_contains(is_raster "${extension}"
+ ${LATEX_RASTER_IMAGE_EXTENSIONS})
+ if(LATEX_SMALL_IMAGES)
+ if(is_raster)
+ set(convert_flags -resize ${LATEX_RASTER_SCALE}%)
+ endif()
+ endif()
+
+ # Make sure the output directory exists.
+ latex_get_filename_component(path "${output_dir}/${file}" PATH)
+ make_directory("${path}")
+
+ # Do conversions for dvi.
+ latex_convert_image(output_files "${file}" .eps "${convert_flags}"
+ "${LATEX_DVI_IMAGE_EXTENSIONS}" "${ARGN}")
+ list(APPEND dvi_outputs ${output_files})
+
+ # Do conversions for pdf.
+ if(is_raster)
+ latex_convert_image(output_files "${file}" .png "${convert_flags}"
+ "${LATEX_PDF_IMAGE_EXTENSIONS}" "${ARGN}")
+ list(APPEND pdf_outputs ${output_files})
+ else()
+ latex_convert_image(output_files "${file}" .pdf "${convert_flags}"
+ "${LATEX_PDF_IMAGE_EXTENSIONS}" "${ARGN}")
+ list(APPEND pdf_outputs ${output_files})
+ endif()
+ else()
+ message(WARNING "Could not find file ${CMAKE_CURRENT_SOURCE_DIR}/${file}. Are you sure you gave relative paths to IMAGES?")
+ endif()
+ endforeach(file)
+
+ set(${dvi_outputs_var} ${dvi_outputs} PARENT_SCOPE)
+ set(${pdf_outputs_var} ${pdf_outputs} PARENT_SCOPE)
+endfunction(latex_process_images)
+
+function(latex_copy_globbed_files pattern dest)
+ file(GLOB file_list ${pattern})
+ foreach(in_file ${file_list})
+ latex_get_filename_component(out_file ${in_file} NAME)
+ configure_file(${in_file} ${dest}/${out_file} COPYONLY)
+ endforeach(in_file)
+endfunction(latex_copy_globbed_files)
+
+function(latex_copy_input_file file)
+ latex_get_output_path(output_dir)
+
+ if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${file})
+ latex_get_filename_component(path ${file} PATH)
+ file(MAKE_DIRECTORY ${output_dir}/${path})
+
+ latex_list_contains(use_config ${file} ${LATEX_CONFIGURE})
+ if(use_config)
+ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${file}
+ ${output_dir}/${file}
+ @ONLY
+ )
+ add_custom_command(OUTPUT ${output_dir}/${file}
+ COMMAND ${CMAKE_COMMAND}
+ ARGS ${CMAKE_BINARY_DIR}
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${file}
+ )
+ else()
+ add_custom_command(OUTPUT ${output_dir}/${file}
+ COMMAND ${CMAKE_COMMAND}
+ ARGS -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${file} ${output_dir}/${file}
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${file}
+ )
+ endif()
+ else()
+ if(EXISTS ${output_dir}/${file})
+ # Special case: output exists but input does not. Assume that it was
+ # created elsewhere and skip the input file copy.
+ else()
+ message("Could not find input file ${CMAKE_CURRENT_SOURCE_DIR}/${file}")
+ endif()
+ endif()
+endfunction(latex_copy_input_file)
+
+#############################################################################
+# Commands provided by the UseLATEX.cmake "package"
+#############################################################################
+
+function(latex_usage command message)
+ message(SEND_ERROR
+ "${message}\n Usage: ${command}(\n [BIBFILES ...]\n [INPUTS ...]\n [IMAGE_DIRS ...]\n [IMAGES \n [CONFIGURE ...]\n [DEPENDS ...]\n [MULTIBIB_NEWCITES] \n [USE_BIBLATEX] [USE_INDEX] [USE_GLOSSARY] [USE_NOMENCL]\n [FORCE_PDF] [FORCE_DVI] [FORCE_HTML]\n [TARGET_NAME] \n [EXCLUDE_FROM_ALL]\n [EXCLUDE_FROM_DEFAULTS])"
+ )
+endfunction(latex_usage command message)
+
+# Parses arguments to add_latex_document and ADD_LATEX_TARGETS and sets the
+# variables LATEX_TARGET, LATEX_IMAGE_DIR, LATEX_BIBFILES, LATEX_DEPENDS, and
+# LATEX_INPUTS.
+function(parse_add_latex_arguments command latex_main_input)
+ set(options
+ USE_BIBLATEX
+ USE_INDEX
+ USE_GLOSSARY
+ USE_NOMENCL
+ FORCE_PDF
+ FORCE_DVI
+ FORCE_HTML
+ EXCLUDE_FROM_ALL
+ EXCLUDE_FROM_DEFAULTS
+ # Deprecated options
+ USE_GLOSSARIES
+ DEFAULT_PDF
+ DEFAULT_SAFEPDF
+ DEFAULT_PS
+ NO_DEFAULT
+ MANGLE_TARGET_NAMES
+ )
+ set(oneValueArgs
+ TARGET_NAME
+ )
+ set(multiValueArgs
+ BIBFILES
+ MULTIBIB_NEWCITES
+ INPUTS
+ IMAGE_DIRS
+ IMAGES
+ CONFIGURE
+ DEPENDS
+ INDEX_NAMES
+ )
+ cmake_parse_arguments(
+ LATEX "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+ # Handle invalid and deprecated arguments
+ if(LATEX_UNPARSED_ARGUMENTS)
+ latex_usage(${command} "Invalid or deprecated arguments: ${LATEX_UNPARSED_ARGUMENTS}")
+ endif()
+ if(LATEX_USE_GLOSSARIES)
+ latex_usage(${command} "USE_GLOSSARIES option removed in version 1.6.1. Use USE_GLOSSARY instead.")
+ endif()
+ if(LATEX_DEFAULT_PDF)
+ latex_usage(${command} "DEFAULT_PDF option removed in version 2.0. Use FORCE_PDF option or LATEX_DEFAULT_BUILD CMake variable instead.")
+ endif()
+ if(LATEX_DEFAULT_SAFEPDF)
+ latex_usage(${command} "DEFAULT_SAFEPDF option removed in version 2.0. Use LATEX_DEFAULT_BUILD CMake variable instead.")
+ endif()
+ if(LATEX_DEFAULT_DVI)
+ latex_usage(${command} "DEFAULT_DVI option removed in version 2.0. Use FORCE_DVI option or LATEX_DEFAULT_BUILD CMake variable instead.")
+ endif()
+ if(LATEX_NO_DEFAULT)
+ latex_usage(${command} "NO_DEFAULT option removed in version 2.0. Use EXCLUDE_FROM_ALL instead.")
+ endif()
+ if(LATEX_MANGLE_TARGET_NAMES)
+ latex_usage(${command} "MANGLE_TARGET_NAMES option removed in version 2.0. All LaTeX targets use mangled names now.")
+ endif()
+
+ # Capture the first argument, which is the main LaTeX input.
+ latex_get_filename_component(latex_target ${latex_main_input} NAME_WE)
+ set(LATEX_MAIN_INPUT ${latex_main_input} PARENT_SCOPE)
+ set(LATEX_TARGET ${latex_target} PARENT_SCOPE)
+
+ # Propagate the result variables to the caller
+ foreach(arg_name ${options} ${oneValueArgs} ${multiValueArgs})
+ set(var_name LATEX_${arg_name})
+ set(${var_name} ${${var_name}} PARENT_SCOPE)
+ endforeach(arg_name)
+endfunction(parse_add_latex_arguments)
+
+function(add_latex_targets_internal)
+ latex_get_output_path(output_dir)
+
+ if(LATEX_USE_SYNCTEX)
+ set(synctex_flags ${LATEX_SYNCTEX_ARGS})
+ else()
+ set(synctex_flags)
+ endif()
+
+ # The commands to run LaTeX. They are repeated multiple times.
+ set(latex_build_command
+ ${LATEX_COMPILER} ${LATEX_COMPILER_ARGS} ${synctex_flags} ${LATEX_MAIN_INPUT}
+ )
+ if(LATEX_COMPILER_ARGS MATCHES ".*batchmode.*")
+ # Wrap command in script that dumps the log file on error. This makes sure
+ # errors can be seen.
+ set(latex_build_command
+ ${CMAKE_COMMAND}
+ -D LATEX_BUILD_COMMAND=execute_latex
+ -D LATEX_TARGET=${LATEX_TARGET}
+ -D LATEX_WORKING_DIRECTORY="${output_dir}"
+ -D LATEX_FULL_COMMAND="${latex_build_command}"
+ -D LATEX_OUTPUT_FILE="${LATEX_TARGET}.dvi"
+ -P "${LATEX_USE_LATEX_LOCATION}"
+ )
+ endif()
+ set(pdflatex_build_command
+ ${PDFLATEX_COMPILER} ${PDFLATEX_COMPILER_ARGS} ${synctex_flags} ${LATEX_MAIN_INPUT}
+ )
+ if(PDFLATEX_COMPILER_ARGS MATCHES ".*batchmode.*")
+ # Wrap command in script that dumps the log file on error. This makes sure
+ # errors can be seen.
+ set(pdflatex_build_command
+ ${CMAKE_COMMAND}
+ -D LATEX_BUILD_COMMAND=execute_latex
+ -D LATEX_TARGET=${LATEX_TARGET}
+ -D LATEX_WORKING_DIRECTORY="${output_dir}"
+ -D LATEX_FULL_COMMAND="${pdflatex_build_command}"
+ -D LATEX_OUTPUT_FILE="${LATEX_TARGET}.pdf"
+ -P "${LATEX_USE_LATEX_LOCATION}"
+ )
+ endif()
+
+ if(NOT LATEX_TARGET_NAME)
+ # Use the main filename (minus the .tex) as the target name. Remove any
+ # spaces since CMake cannot have spaces in its target names.
+ string(REPLACE " " "_" LATEX_TARGET_NAME ${LATEX_TARGET})
+ endif()
+
+ # Some LaTeX commands may need to be modified (or may not work) if the main
+ # tex file is in a subdirectory. Make a flag for that.
+ get_filename_component(LATEX_MAIN_INPUT_SUBDIR ${LATEX_MAIN_INPUT} DIRECTORY)
+
+ # Set up target names.
+ set(dvi_target ${LATEX_TARGET_NAME}_dvi)
+ set(pdf_target ${LATEX_TARGET_NAME}_pdf)
+ set(ps_target ${LATEX_TARGET_NAME}_ps)
+ set(safepdf_target ${LATEX_TARGET_NAME}_safepdf)
+ set(html_target ${LATEX_TARGET_NAME}_html)
+ set(auxclean_target ${LATEX_TARGET_NAME}_auxclean)
+
+ # Probably not all of these will be generated, but they could be.
+ # Note that the aux file is added later.
+ set(auxiliary_clean_files
+ ${output_dir}/${LATEX_TARGET}.aux
+ ${output_dir}/${LATEX_TARGET}.bbl
+ ${output_dir}/${LATEX_TARGET}.blg
+ ${output_dir}/${LATEX_TARGET}-blx.bib
+ ${output_dir}/${LATEX_TARGET}.glg
+ ${output_dir}/${LATEX_TARGET}.glo
+ ${output_dir}/${LATEX_TARGET}.gls
+ ${output_dir}/${LATEX_TARGET}.idx
+ ${output_dir}/${LATEX_TARGET}.ilg
+ ${output_dir}/${LATEX_TARGET}.ind
+ ${output_dir}/${LATEX_TARGET}.ist
+ ${output_dir}/${LATEX_TARGET}.log
+ ${output_dir}/${LATEX_TARGET}.out
+ ${output_dir}/${LATEX_TARGET}.toc
+ ${output_dir}/${LATEX_TARGET}.lof
+ ${output_dir}/${LATEX_TARGET}.xdy
+ ${output_dir}/${LATEX_TARGET}.synctex.gz
+ ${output_dir}/${LATEX_TARGET}.synctex.bak.gz
+ ${output_dir}/${LATEX_TARGET}.dvi
+ ${output_dir}/${LATEX_TARGET}.ps
+ ${output_dir}/${LATEX_TARGET}.pdf
+ )
+
+ set(image_list ${LATEX_IMAGES})
+
+ # For each directory in LATEX_IMAGE_DIRS, glob all the image files and
+ # place them in LATEX_IMAGES.
+ foreach(dir ${LATEX_IMAGE_DIRS})
+ if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${dir})
+ message(WARNING "Image directory ${CMAKE_CURRENT_SOURCE_DIR}/${dir} does not exist. Are you sure you gave relative directories to IMAGE_DIRS?")
+ endif()
+ foreach(extension ${LATEX_IMAGE_EXTENSIONS})
+ file(GLOB files ${CMAKE_CURRENT_SOURCE_DIR}/${dir}/*${extension})
+ foreach(file ${files})
+ latex_get_filename_component(filename ${file} NAME)
+ list(APPEND image_list ${dir}/${filename})
+ endforeach(file)
+ endforeach(extension)
+ endforeach(dir)
+
+ latex_process_images(dvi_images pdf_images ${image_list})
+
+ set(make_dvi_command
+ ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${latex_build_command})
+ set(make_pdf_command
+ ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${pdflatex_build_command}
+ )
+
+ set(make_dvi_depends ${LATEX_DEPENDS} ${dvi_images})
+ set(make_pdf_depends ${LATEX_DEPENDS} ${pdf_images})
+ foreach(input ${LATEX_MAIN_INPUT} ${LATEX_INPUTS})
+ list(APPEND make_dvi_depends ${output_dir}/${input})
+ list(APPEND make_pdf_depends ${output_dir}/${input})
+ if(${input} MATCHES "\\.tex$")
+ # Dependent .tex files might have their own .aux files created. Make
+ # sure these get cleaned as well. This might replicate the cleaning
+ # of the main .aux file, which is OK.
+ string(REGEX REPLACE "\\.tex$" "" input_we ${input})
+ list(APPEND auxiliary_clean_files
+ ${output_dir}/${input_we}.aux
+ ${output_dir}/${input}.aux
+ )
+ endif()
+ endforeach(input)
+
+ set(all_latex_sources ${LATEX_MAIN_INPUT} ${LATEX_INPUTS} ${image_list})
+
+ if(LATEX_USE_GLOSSARY)
+ foreach(dummy 0 1) # Repeat these commands twice.
+ set(make_dvi_command ${make_dvi_command}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${CMAKE_COMMAND}
+ -D LATEX_BUILD_COMMAND=makeglossaries
+ -D LATEX_TARGET=${LATEX_TARGET}
+ -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER}
+ -D XINDY_COMPILER=${XINDY_COMPILER}
+ -D MAKEGLOSSARIES_COMPILER_ARGS=${MAKEGLOSSARIES_COMPILER_ARGS}
+ -P ${LATEX_USE_LATEX_LOCATION}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${latex_build_command}
+ )
+ set(make_pdf_command ${make_pdf_command}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${CMAKE_COMMAND}
+ -D LATEX_BUILD_COMMAND=makeglossaries
+ -D LATEX_TARGET=${LATEX_TARGET}
+ -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER}
+ -D XINDY_COMPILER=${XINDY_COMPILER}
+ -D MAKEGLOSSARIES_COMPILER_ARGS=${MAKEGLOSSARIES_COMPILER_ARGS}
+ -P ${LATEX_USE_LATEX_LOCATION}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${pdflatex_build_command}
+ )
+ endforeach(dummy)
+ endif()
+
+ if(LATEX_USE_NOMENCL)
+ foreach(dummy 0 1) # Repeat these commands twice.
+ set(make_dvi_command ${make_dvi_command}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${CMAKE_COMMAND}
+ -D LATEX_BUILD_COMMAND=makenomenclature
+ -D LATEX_TARGET=${LATEX_TARGET}
+ -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER}
+ -D MAKENOMENCLATURE_COMPILER_ARGS=${MAKENOMENCLATURE_COMPILER_ARGS}
+ -P ${LATEX_USE_LATEX_LOCATION}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${latex_build_command}
+ )
+ set(make_pdf_command ${make_pdf_command}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${CMAKE_COMMAND}
+ -D LATEX_BUILD_COMMAND=makenomenclature
+ -D LATEX_TARGET=${LATEX_TARGET}
+ -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER}
+ -D MAKENOMENCLATURE_COMPILER_ARGS=${MAKENOMENCLATURE_COMPILER_ARGS}
+ -P ${LATEX_USE_LATEX_LOCATION}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${pdflatex_build_command}
+ )
+ endforeach(dummy)
+ endif()
+
+ if(LATEX_BIBFILES)
+ if(LATEX_USE_BIBLATEX)
+ if(NOT BIBER_COMPILER)
+ message(SEND_ERROR "I need the biber command.")
+ endif()
+ set(bib_compiler ${BIBER_COMPILER})
+ set(bib_compiler_flags ${BIBER_COMPILER_ARGS})
+ else()
+ set(bib_compiler ${BIBTEX_COMPILER})
+ set(bib_compiler_flags ${BIBTEX_COMPILER_ARGS})
+ endif()
+ if(LATEX_MULTIBIB_NEWCITES)
+ foreach (multibib_auxfile ${LATEX_MULTIBIB_NEWCITES})
+ latex_get_filename_component(multibib_target ${multibib_auxfile} NAME_WE)
+ set(make_dvi_command ${make_dvi_command}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${bib_compiler} ${bib_compiler_flags} ${multibib_target})
+ set(make_pdf_command ${make_pdf_command}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${bib_compiler} ${bib_compiler_flags} ${multibib_target})
+ set(auxiliary_clean_files ${auxiliary_clean_files}
+ ${output_dir}/${multibib_target}.aux)
+ endforeach (multibib_auxfile ${LATEX_MULTIBIB_NEWCITES})
+ else()
+ set(make_dvi_command ${make_dvi_command}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${bib_compiler} ${bib_compiler_flags} ${LATEX_TARGET})
+ set(make_pdf_command ${make_pdf_command}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${bib_compiler} ${bib_compiler_flags} ${LATEX_TARGET})
+ endif()
+
+ foreach (bibfile ${LATEX_BIBFILES})
+ list(APPEND make_dvi_depends ${output_dir}/${bibfile})
+ list(APPEND make_pdf_depends ${output_dir}/${bibfile})
+ endforeach (bibfile ${LATEX_BIBFILES})
+ else()
+ if(LATEX_MULTIBIB_NEWCITES)
+ message(WARNING "MULTIBIB_NEWCITES has no effect without BIBFILES option.")
+ endif()
+ endif()
+
+ if(LATEX_USE_INDEX)
+ if(LATEX_INDEX_NAMES)
+ set(INDEX_NAMES ${LATEX_INDEX_NAMES})
+ else()
+ set(INDEX_NAMES ${LATEX_TARGET})
+ endif()
+ foreach(idx_name ${INDEX_NAMES})
+ set(make_dvi_command ${make_dvi_command}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${latex_build_command}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${MAKEINDEX_COMPILER} ${MAKEINDEX_COMPILER_ARGS} ${idx_name}.idx)
+ set(make_pdf_command ${make_pdf_command}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${pdflatex_build_command}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${MAKEINDEX_COMPILER} ${MAKEINDEX_COMPILER_ARGS} ${idx_name}.idx)
+ set(auxiliary_clean_files ${auxiliary_clean_files}
+ ${output_dir}/${idx_name}.idx
+ ${output_dir}/${idx_name}.ilg
+ ${output_dir}/${idx_name}.ind)
+ endforeach()
+ else()
+ if(LATEX_INDEX_NAMES)
+ message(WARNING "INDEX_NAMES has no effect without USE_INDEX option.")
+ endif()
+ endif()
+
+ set(make_dvi_command ${make_dvi_command}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${latex_build_command}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${latex_build_command})
+ set(make_pdf_command ${make_pdf_command}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${pdflatex_build_command}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${pdflatex_build_command})
+
+ # Need to run one more time to remove biblatex' warning
+ # about page breaks that have changed.
+ if(LATEX_USE_BIBLATEX)
+ set(make_dvi_command ${make_dvi_command}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${latex_build_command})
+ set(make_pdf_command ${make_pdf_command}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${pdflatex_build_command})
+ endif()
+
+ if(LATEX_USE_SYNCTEX)
+ if(NOT GZIP)
+ message(SEND_ERROR "UseLATEX.cmake: USE_SYNTEX option requires gzip program. Set GZIP variable.")
+ endif()
+ set(make_dvi_command ${make_dvi_command}
+ COMMAND ${CMAKE_COMMAND}
+ -D LATEX_BUILD_COMMAND=correct_synctex
+ -D LATEX_TARGET=${LATEX_TARGET}
+ -D GZIP=${GZIP}
+ -D "LATEX_SOURCE_DIRECTORY=${CMAKE_CURRENT_SOURCE_DIR}"
+ -D "LATEX_BINARY_DIRECTORY=${output_dir}"
+ -P ${LATEX_USE_LATEX_LOCATION}
+ )
+ set(make_pdf_command ${make_pdf_command}
+ COMMAND ${CMAKE_COMMAND}
+ -D LATEX_BUILD_COMMAND=correct_synctex
+ -D LATEX_TARGET=${LATEX_TARGET}
+ -D GZIP=${GZIP}
+ -D "LATEX_SOURCE_DIRECTORY=${CMAKE_CURRENT_SOURCE_DIR}"
+ -D "LATEX_BINARY_DIRECTORY=${output_dir}"
+ -P ${LATEX_USE_LATEX_LOCATION}
+ )
+ endif()
+
+ # Check LaTeX output for important warnings at end of build
+ set(make_dvi_command ${make_dvi_command}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${CMAKE_COMMAND}
+ -D LATEX_BUILD_COMMAND=check_important_warnings
+ -D LATEX_TARGET=${LATEX_TARGET}
+ -P ${LATEX_USE_LATEX_LOCATION}
+ )
+ set(make_pdf_command ${make_pdf_command}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${CMAKE_COMMAND}
+ -D LATEX_BUILD_COMMAND=check_important_warnings
+ -D LATEX_TARGET=${LATEX_TARGET}
+ -P ${LATEX_USE_LATEX_LOCATION}
+ )
+
+ # Capture the default build.
+ string(TOLOWER "${LATEX_DEFAULT_BUILD}" default_build)
+
+ if((NOT LATEX_FORCE_PDF) AND (NOT LATEX_FORCE_DVI) AND (NOT LATEX_FORCE_HTML))
+ set(no_force TRUE)
+ endif()
+
+ # Add commands and targets for building pdf outputs (with pdflatex).
+ if(LATEX_FORCE_PDF OR no_force)
+ if(LATEX_FORCE_PDF)
+ set(default_build pdf)
+ endif()
+
+ if(PDFLATEX_COMPILER)
+ add_custom_command(OUTPUT ${output_dir}/${LATEX_TARGET}.pdf
+ COMMAND ${make_pdf_command}
+ DEPENDS ${make_pdf_depends}
+ )
+ add_custom_target(${pdf_target}
+ DEPENDS ${output_dir}/${LATEX_TARGET}.pdf
+ SOURCES ${all_latex_sources}
+ )
+ if(NOT LATEX_EXCLUDE_FROM_DEFAULTS)
+ add_dependencies(pdf ${pdf_target})
+ endif()
+ endif()
+ endif()
+
+ # Add commands and targets for building dvi outputs.
+ if(LATEX_FORCE_DVI OR LATEX_FORCE_HTML OR no_force)
+ if(LATEX_FORCE_DVI)
+ if((NOT default_build STREQUAL dvi) AND
+ (NOT default_build STREQUAL ps) AND
+ (NOT default_build STREQUAL safepdf))
+ set(default_build dvi)
+ endif()
+ endif()
+
+ add_custom_command(OUTPUT ${output_dir}/${LATEX_TARGET}.dvi
+ COMMAND ${make_dvi_command}
+ DEPENDS ${make_dvi_depends}
+ )
+ add_custom_target(${dvi_target}
+ DEPENDS ${output_dir}/${LATEX_TARGET}.dvi
+ SOURCES ${all_latex_sources}
+ )
+ if(NOT LATEX_EXCLUDE_FROM_DEFAULTS)
+ add_dependencies(dvi ${dvi_target})
+ endif()
+
+ if(DVIPS_CONVERTER)
+ add_custom_command(OUTPUT ${output_dir}/${LATEX_TARGET}.ps
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${DVIPS_CONVERTER} ${DVIPS_CONVERTER_ARGS} -o ${LATEX_TARGET}.ps ${LATEX_TARGET}.dvi
+ DEPENDS ${output_dir}/${LATEX_TARGET}.dvi)
+ add_custom_target(${ps_target}
+ DEPENDS ${output_dir}/${LATEX_TARGET}.ps
+ SOURCES ${all_latex_sources}
+ )
+ if(NOT LATEX_EXCLUDE_FROM_DEFAULTS)
+ add_dependencies(ps ${ps_target})
+ endif()
+ if(PS2PDF_CONVERTER)
+ # Since both the pdf and safepdf targets have the same output, we
+ # cannot properly do the dependencies for both. When selecting safepdf,
+ # simply force a recompile every time.
+ add_custom_target(${safepdf_target}
+ ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${PS2PDF_CONVERTER} ${PS2PDF_CONVERTER_ARGS} ${LATEX_TARGET}.ps ${LATEX_TARGET}.pdf
+ DEPENDS ${ps_target}
+ )
+ if(NOT LATEX_EXCLUDE_FROM_DEFAULTS)
+ add_dependencies(safepdf ${safepdf_target})
+ endif()
+ endif()
+ endif()
+ endif()
+
+ if(LATEX_FORCE_HTML OR no_force)
+ if (LATEX_FORCE_HTML)
+ set(default_build html)
+ endif()
+
+ if(HTLATEX_COMPILER AND LATEX_MAIN_INPUT_SUBDIR)
+ message(STATUS
+ "Disabling HTML build for ${LATEX_TARGET_NAME}.tex because the main file is in subdirectory ${LATEX_MAIN_INPUT_SUBDIR}"
+ )
+ # The code below to run HTML assumes that LATEX_TARGET.tex is in the
+ # current directory. I have tried to specify that LATEX_TARGET.tex is
+ # in a subdirectory. That makes the build targets correct, but the
+ # HTML build still fails (at least for htlatex) because files are not
+ # generated where expected. I am getting around the problem by simply
+ # disabling HTML in this case. If someone really cares, they can fix
+ # this, but make sure it runs on many platforms and build programs.
+ elseif(HTLATEX_COMPILER)
+ # htlatex places the output in a different location
+ set(HTML_OUTPUT "${output_dir}/${LATEX_TARGET}.html")
+ add_custom_command(OUTPUT ${HTML_OUTPUT}
+ COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+ ${HTLATEX_COMPILER} ${LATEX_MAIN_INPUT}
+ "${HTLATEX_COMPILER_TEX4HT_FLAGS}"
+ "${HTLATEX_COMPILER_TEX4HT_POSTPROCESSOR_FLAGS}"
+ "${HTLATEX_COMPILER_T4HT_POSTPROCESSOR_FLAGS}"
+ ${HTLATEX_COMPILER_ARGS}
+ DEPENDS
+ ${output_dir}/${LATEX_TARGET}.tex
+ ${output_dir}/${LATEX_TARGET}.dvi
+ VERBATIM
+ )
+ add_custom_target(${html_target}
+ DEPENDS ${HTML_OUTPUT} ${dvi_target}
+ SOURCES ${all_latex_sources}
+ )
+ if(NOT LATEX_EXCLUDE_FROM_DEFAULTS)
+ add_dependencies(html ${html_target})
+ endif()
+ endif()
+ endif()
+
+ # Set default targets.
+ if("${default_build}" STREQUAL "pdf")
+ add_custom_target(${LATEX_TARGET_NAME} DEPENDS ${pdf_target})
+ elseif("${default_build}" STREQUAL "dvi")
+ add_custom_target(${LATEX_TARGET_NAME} DEPENDS ${dvi_target})
+ elseif("${default_build}" STREQUAL "ps")
+ add_custom_target(${LATEX_TARGET_NAME} DEPENDS ${ps_target})
+ elseif("${default_build}" STREQUAL "safepdf")
+ add_custom_target(${LATEX_TARGET_NAME} DEPENDS ${safepdf_target})
+ elseif("${default_build}" STREQUAL "html")
+ add_custom_target(${LATEX_TARGET_NAME} DEPENDS ${html_target})
+ else()
+ message(SEND_ERROR "LATEX_DEFAULT_BUILD set to an invalid value. See the documentation for that variable.")
+ endif()
+
+ if(NOT LATEX_EXCLUDE_FROM_ALL)
+ add_custom_target(_${LATEX_TARGET_NAME} ALL DEPENDS ${LATEX_TARGET_NAME})
+ endif()
+
+ set_directory_properties(.
+ ADDITIONAL_MAKE_CLEAN_FILES "${auxiliary_clean_files}"
+ )
+
+ add_custom_target(${auxclean_target}
+ COMMENT "Cleaning auxiliary LaTeX files."
+ COMMAND ${CMAKE_COMMAND} -E remove ${auxiliary_clean_files}
+ )
+ add_dependencies(auxclean ${auxclean_target})
+endfunction(add_latex_targets_internal)
+
+function(add_latex_targets latex_main_input)
+ latex_get_output_path(output_dir)
+ parse_add_latex_arguments(ADD_LATEX_TARGETS ${latex_main_input} ${ARGN})
+
+ add_latex_targets_internal()
+endfunction(add_latex_targets)
+
+function(add_latex_document latex_main_input)
+ latex_get_output_path(output_dir)
+ if(output_dir)
+ parse_add_latex_arguments(add_latex_document ${latex_main_input} ${ARGN})
+
+ latex_copy_input_file(${LATEX_MAIN_INPUT})
+
+ foreach (bib_file ${LATEX_BIBFILES})
+ latex_copy_input_file(${bib_file})
+ endforeach (bib_file)
+
+ foreach (input ${LATEX_INPUTS})
+ latex_copy_input_file(${input})
+ endforeach(input)
+
+ latex_copy_globbed_files(${CMAKE_CURRENT_SOURCE_DIR}/*.cls ${output_dir})
+ latex_copy_globbed_files(${CMAKE_CURRENT_SOURCE_DIR}/*.bst ${output_dir})
+ latex_copy_globbed_files(${CMAKE_CURRENT_SOURCE_DIR}/*.clo ${output_dir})
+ latex_copy_globbed_files(${CMAKE_CURRENT_SOURCE_DIR}/*.sty ${output_dir})
+ latex_copy_globbed_files(${CMAKE_CURRENT_SOURCE_DIR}/*.ist ${output_dir})
+ latex_copy_globbed_files(${CMAKE_CURRENT_SOURCE_DIR}/*.fd ${output_dir})
+
+ add_latex_targets_internal()
+ endif()
+endfunction(add_latex_document)
+
+#############################################################################
+# Actually do stuff
+#############################################################################
+
+if(LATEX_BUILD_COMMAND)
+ set(command_handled)
+
+ if("${LATEX_BUILD_COMMAND}" STREQUAL execute_latex)
+ latex_execute_latex()
+ set(command_handled TRUE)
+ endif()
+
+ if("${LATEX_BUILD_COMMAND}" STREQUAL makeglossaries)
+ latex_makeglossaries()
+ set(command_handled TRUE)
+ endif()
+
+ if("${LATEX_BUILD_COMMAND}" STREQUAL makenomenclature)
+ latex_makenomenclature()
+ set(command_handled TRUE)
+ endif()
+
+ if("${LATEX_BUILD_COMMAND}" STREQUAL correct_synctex)
+ latex_correct_synctex()
+ set(command_handled TRUE)
+ endif()
+
+ if("${LATEX_BUILD_COMMAND}" STREQUAL check_important_warnings)
+ latex_check_important_warnings()
+ set(command_handled TRUE)
+ endif()
+
+ if(NOT command_handled)
+ message(SEND_ERROR "Unknown command: ${LATEX_BUILD_COMMAND}")
+ endif()
+
+else()
+ # Must be part of the actual configure (included from CMakeLists.txt).
+ latex_setup_variables()
+ latex_setup_targets()
+endif()
diff --git a/submodules/ton/tonlib-src/CMakeLists.txt b/submodules/ton/tonlib-src/CMakeLists.txt
new file mode 100644
index 0000000000..a200d1010a
--- /dev/null
+++ b/submodules/ton/tonlib-src/CMakeLists.txt
@@ -0,0 +1,392 @@
+cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR)
+
+project(TON VERSION 0.5 LANGUAGES C CXX)
+set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+#set(OPENSSL_USE_STATIC_LIBS TRUE)
+
+# Prevent in-source build
+get_filename_component(TON_REAL_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" REALPATH)
+get_filename_component(TON_REAL_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}" REALPATH)
+
+if (TON_REAL_BINARY_DIR STREQUAL TON_REAL_SOURCE_DIR)
+ message(" Out-of-source build should be used to build TDLib.")
+ message(" You need to remove the files already created by CMake and")
+ message(" rerun CMake from a new directory:")
+ message(" rm -rf CMakeFiles CMakeCache.txt")
+ message(" mkdir build")
+ message(" cd build")
+ message(" cmake ..")
+ message(FATAL_ERROR "In-source build failed.")
+endif()
+
+# HAVE_SSE42 for crc32c and rocksdb
+include(CheckCXXSourceCompiles)
+# Check for SSE4.2 support in the compiler.
+set(OLD_CMAKE_REQURED_FLAGS ${CMAKE_REQUIRED_FLAGS})
+if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
+ set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} /arch:AVX")
+else(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
+ set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -msse4.2")
+endif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
+check_cxx_source_compiles("
+#if defined(_MSC_VER)
+#include
+#else // !defined(_MSC_VER)
+#include
+#include
+#endif // defined(_MSC_VER)
+
+int main() {
+ _mm_crc32_u8(0, 0); _mm_crc32_u32(0, 0);
+#if defined(_M_X64) || defined(__x86_64__)
+ _mm_crc32_u64(0, 0);
+#endif // defined(_M_X64) || defined(__x86_64__)
+ return 0;
+}
+" CRC32C_HAVE_SSE42)
+set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQURED_FLAGS})
+
+if(NOT MSVC)
+ set(CMAKE_REQUIRED_FLAGS "-msse4.2 -mpclmul")
+endif()
+CHECK_CXX_SOURCE_COMPILES("
+#include
+#include
+#include
+int main() {
+ volatile uint32_t x = _mm_crc32_u32(0, 0);
+ const auto a = _mm_set_epi64x(0, 0);
+ const auto b = _mm_set_epi64x(0, 0);
+ const auto c = _mm_clmulepi64_si128(a, b, 0x00);
+ auto d = _mm_cvtsi128_si64(c);
+}
+" ROCKSDB_HAVE_SSE42)
+unset(CMAKE_REQUIRED_FLAGS)
+
+if (ROCKSDB_HAVE_SSE42 AND CRC32C_HAVE_SSE42)
+ set(HAVE_SSE42 TRUE)
+else()
+ set(HAVE_SSE42 FALSE)
+endif()
+
+
+option(TONLIB_ENABLE_JNI "Use \"ON\" to enable JNI-compatible TonLib API.")
+option(TON_USE_ASAN "Use \"ON\" to enable AddressSanitizer." OFF)
+option(TON_USE_TSAN "Use \"ON\" to enable ThreadSanitizer." OFF)
+option(TON_USE_UBSAN "Use \"ON\" to enable UndefinedBehaviorSanitizer." OFF)
+set(TON_ARCH "native" CACHE STRING "Architecture, will be passed to -march=")
+
+if (TON_USE_ABSEIL)
+ message("Add abseil-cpp")
+ add_subdirectory(third-party/abseil-cpp EXCLUDE_FROM_ALL)
+ set(ABSL_FOUND 1)
+endif()
+
+#add_subdirectory(third-party/libcuckoo EXCLUDE_FROM_ALL)
+#add_subdirectory(third-party/junction EXCLUDE_FROM_ALL)
+
+if (WIN32)
+ message("Add wingetopt")
+ add_subdirectory(third-party/wingetopt EXCLUDE_FROM_ALL)
+ set(WINGETOPT_FOUND 1)
+ message(STATUS "Use wingetopt")
+endif()
+
+set(CRC32C_BUILD_TESTS OFF CACHE BOOL "Build CRC32C's unit tests")
+set(CRC32C_BUILD_BENCHMARKS OFF CACHE BOOL "Build CRC32C's benchmarks")
+set(CRC32C_USE_GLOG OFF CACHE BOOL "Build CRC32C's tests with Google Logging")
+set(CRC32C_INSTALL OFF CACHE BOOL "Install CRC32C's header and library")
+message("Add crc32c")
+add_subdirectory(third-party/crc32c EXCLUDE_FROM_ALL)
+set(CRC32C_FOUND 1)
+
+if (TON_USE_ROCKSDB)
+ if (ANDROID)
+ set(PORTABLE ON CACHE BOOL "portable")
+ endif()
+ set(WITH_TESTS OFF CACHE BOOL "build with tests")
+ set(WITH_TOOLS OFF CACHE BOOL "build with tools")
+ set(FAIL_ON_WARNINGS OFF CACHE BOOL "fail on warnings")
+ message("Add rocksdb")
+ add_subdirectory(third-party/rocksdb EXCLUDE_FROM_ALL)
+endif()
+
+option(USE_COROUTINES "experimental support of coroutines" OFF)
+if (USE_COROUTINES)
+ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ set(TD_HAVE_COROUTINES 1)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fcoroutines-ts")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
+ endif()
+endif()
+
+option(USE_LIBRAPTORQ "use libraptorq for tests" OFF)
+if (USE_LIBRAPTORQ)
+ set(USE_LZ4 OFF CACHE BOOL "use lz4")
+ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ set(CLANG_STDLIB "ON") # for libraptorq
+ endif()
+ message("Add libraptorq")
+ add_subdirectory(third-party/libraptorq EXCLUDE_FROM_ALL)
+endif()
+
+message("Add ton")
+set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake" ${CMAKE_MODULE_PATH})
+
+# Configure CCache if available
+find_program(CCACHE_FOUND ccache)
+#set(CCACHE_FOUND 0)
+if (CCACHE_FOUND)
+ message(STATUS "Found ccache")
+ set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
+ set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
+else()
+ message(STATUS "Could NOT find ccache")
+endif()
+
+if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+ set(GCC 1)
+elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ set(CLANG 1)
+elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
+ set(INTEL 1)
+elseif (NOT MSVC)
+ message(FATAL_ERROR "Compiler isn't supported")
+endif()
+
+include(CheckCXXCompilerFlag)
+
+if (GCC OR CLANG OR INTEL)
+ if (WIN32 AND INTEL)
+ set(STD14_FLAG /Qstd=c++14)
+ else()
+ set(STD14_FLAG -std=c++14)
+ endif()
+ check_cxx_compiler_flag(${STD14_FLAG} HAVE_STD14)
+ if (NOT HAVE_STD14)
+ string(REPLACE "c++14" "c++1y" STD14_FLAG "${STD14_FLAG}")
+ check_cxx_compiler_flag(${STD14_FLAG} HAVE_STD1Y)
+ set(HAVE_STD14 ${HAVE_STD1Y})
+ endif()
+elseif (MSVC)
+ set(HAVE_STD14 MSVC_VERSION>=1900)
+endif()
+
+if (NOT HAVE_STD14)
+ message(FATAL_ERROR "No C++14 support in the compiler. Please upgrade the compiler.")
+endif()
+
+set(CMAKE_THREAD_PREFER_PTHREAD ON)
+set(THREADS_PREFER_PTHREAD_FLAG ON)
+find_package(Threads REQUIRED)
+
+if (TON_ARCH AND NOT MSVC)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=${TON_ARCH}")
+endif()
+if (THREADS_HAVE_PTHREAD_ARG)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
+endif()
+
+if (TON_USE_JEMALLOC)
+ find_package(JeMalloc REQUIRED)
+endif()
+
+set(MEMPROF "" CACHE STRING "Use one of \"ON\", \"FAST\" or \"SAFE\" to enable memory profiling. \
+Works under macOS and Linux when compiled using glibc. \
+In FAST mode stack is unwinded only using frame pointers, which may fail. \
+In SAFE mode stack is unwinded using backtrace function from execinfo.h, which may be very slow. \
+By default both methods are used to achieve maximum speed and accuracy")
+
+if (CLANG OR GCC)
+ if (MEMPROF)
+ check_cxx_compiler_flag(-no-pie CXX_NO_PIE_FLAG)
+ if (CXX_NO_PIE_FLAG)
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -no-pie")
+ elseif (APPLE)
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-no_pie")
+ endif()
+ endif()
+endif()
+
+if (MSVC)
+ if (CMAKE_CXX_FLAGS_DEBUG MATCHES "/RTC1")
+ string(REPLACE "/RTC1" " " CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
+ endif()
+ add_definitions(-D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /W4 /wd4100 /wd4127 /wd4324 /wd4456 /wd4457 /wd4458 /wd4505 /wd4702")
+elseif (CLANG OR GCC)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${STD14_FLAG} -fno-omit-frame-pointer")
+ if (APPLE)
+ #use "-Wl,-exported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/export_list" for exported symbols
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fvisibility=hidden -Wl,-dead_strip,-x,-S")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fvisibility=hidden -Wl,-dead_strip,-x,-S")
+ else()
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections")
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections -Wl,--exclude-libs,ALL")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections")
+ if (NOT TON_USE_ASAN AND NOT TON_USE_TSAN AND NOT MEMPROF)
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--exclude-libs,ALL")
+ endif()
+ endif()
+elseif (INTEL)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${STD14_FLAG}")
+endif()
+
+if (WIN32)
+ add_definitions(-DNTDDI_VERSION=0x06020000 -DWINVER=0x0602 -D_WIN32_WINNT=0x0602 -DNOMINMAX -DUNICODE -D_UNICODE)
+endif()
+if (CYGWIN)
+ add_definitions(-D_DEFAULT_SOURCE=1 -DFD_SETSIZE=4096)
+endif()
+
+if (NOT ANDROID) # _FILE_OFFSET_BITS is broken in ndk r15 and r15b and doesn't work prior to Android 7.0
+ add_definitions(-D_FILE_OFFSET_BITS=64)
+endif()
+
+include(AddCXXCompilerFlag)
+if (MSVC)
+ add_cxx_compiler_flag("/experimental:external /external:anglebrackets /external:W0")
+endif()
+if (NOT MSVC)
+ add_cxx_compiler_flag("-Wall")
+endif()
+add_cxx_compiler_flag("-Wextra")
+add_cxx_compiler_flag("-Wimplicit-fallthrough=2")
+add_cxx_compiler_flag("-Wpointer-arith")
+add_cxx_compiler_flag("-Wcast-qual")
+add_cxx_compiler_flag("-Wsign-compare")
+add_cxx_compiler_flag("-Wduplicated-branches")
+add_cxx_compiler_flag("-Wduplicated-cond")
+add_cxx_compiler_flag("-Walloc-zero")
+add_cxx_compiler_flag("-Wlogical-op")
+add_cxx_compiler_flag("-Wno-tautological-compare")
+add_cxx_compiler_flag("-Wpointer-arith")
+add_cxx_compiler_flag("-Wvla")
+add_cxx_compiler_flag("-Wnon-virtual-dtor")
+add_cxx_compiler_flag("-Wno-unused-parameter")
+add_cxx_compiler_flag("-Wconversion")
+add_cxx_compiler_flag("-Wno-sign-conversion")
+add_cxx_compiler_flag("-Qunused-arguments")
+add_cxx_compiler_flag("-Wno-unused-private-field")
+add_cxx_compiler_flag("-Wno-redundant-move")
+#add_cxx_compiler_flag("-Werror")
+
+#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -isystem /usr/include/c++/v1")
+if (CLANG)
+ #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
+endif()
+if (TON_USE_ASAN)
+ if (CLANG)
+ add_cxx_compiler_flag("-stdlib=libc++")
+ endif()
+ add_cxx_compiler_flag("-fsanitize=address")
+ add_definitions(-DTD_USE_ASAN=1)
+endif()
+if (TON_USE_TSAN)
+ if (CLANG)
+ add_cxx_compiler_flag("-stdlib=libc++")
+ endif()
+ add_cxx_compiler_flag("-fsanitize=thread")
+endif()
+if (TON_USE_UBSAN)
+ if (CLANG)
+ add_cxx_compiler_flag("-stdlib=libc++")
+ endif()
+ add_cxx_compiler_flag("-fsanitize=undefined")
+endif()
+#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread")
+#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
+#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
+#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=leak")
+#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -finstrument-functions")
+
+#Compilation database
+set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
+
+
+function(target_link_libraries_system target)
+ set(libs ${ARGN})
+ foreach(lib ${libs})
+ get_target_property(lib_include_dirs ${lib} INTERFACE_INCLUDE_DIRECTORIES)
+ target_include_directories(${target} SYSTEM PUBLIC ${lib_include_dirs})
+ target_link_libraries(${target} PUBLIC ${lib})
+ endforeach(lib)
+endfunction(target_link_libraries_system)
+
+add_subdirectory(tdutils)
+add_subdirectory(memprof)
+add_subdirectory(tdactor)
+add_subdirectory(tdnet)
+if (TON_USE_ROCKSDB)
+ option(TDDB_USE_ROCKSDB "Use rockdb" ON)
+endif()
+add_subdirectory(tddb)
+add_subdirectory(tdtl)
+add_subdirectory(tl)
+add_subdirectory(terminal)
+add_subdirectory(keys)
+add_subdirectory(tl-utils)
+add_subdirectory(adnl)
+add_subdirectory(crypto)
+add_subdirectory(lite-client)
+
+#BEGIN tonlib
+add_subdirectory(tonlib)
+#END tonlib
+
+
+if (NOT CMAKE_CROSSCOMPILING)
+ add_custom_target(prepare_cross_compiling DEPENDS tl_generate_common tdmime_auto tlb_generate_block)
+endif()
+
+#TESTS
+add_executable(test-ed25519 test/test-td-main.cpp ${ED25519_TEST_SOURCE})
+target_link_libraries(test-ed25519 PRIVATE ton_crypto)
+
+add_executable(test-vm test/test-td-main.cpp ${TONVM_TEST_SOURCE})
+target_link_libraries(test-vm PRIVATE ton_crypto fift-lib)
+
+add_executable(test-cells test/test-td-main.cpp ${CELLS_TEST_SOURCE})
+target_link_libraries(test-cells PRIVATE ton_crypto)
+
+add_executable(test-fift test/test-td-main.cpp ${FIFT_TEST_SOURCE})
+target_link_libraries(test-fift PRIVATE fift-lib)
+
+add_executable(test-tdutils test/test-td-main.cpp ${TDUTILS_TEST_SOURCE})
+target_link_libraries(test-tdutils PRIVATE tdutils ${CMAKE_THREAD_LIBS_INIT} memprof ${JEMALLOC_LIBRARIES})
+#target_link_libraries_system(test-tdutils absl::base absl::container absl::hash )
+#target_link_libraries_system(test-tdutils libcuckoo)
+#target_include_directories(test-tdutils PRIVATE SYSTEM ${JUNCTION_ALL_INCLUDE_DIRS})
+#target_link_libraries(test-tdutils PRIVATE ${JUNCTION_ALL_LIBRARIES})
+
+add_executable(test-tdactor test/test-td-main.cpp ${TDACTOR_TEST_SOURCE})
+target_link_libraries(test-tdactor PRIVATE tdactor ${CMAKE_THREAD_LIBS_INIT})
+
+add_executable(test-net test/test-td-main.cpp ${NET_TEST_SOURCE})
+target_link_libraries(test-net PRIVATE tdnet tdutils ${CMAKE_THREAD_LIBS_INIT})
+
+#BEGIN tonlib
+add_executable(test-tonlib ${TONLIB_ONLINE_TEST_SOURCE})
+target_link_libraries(test-tonlib tdutils tdactor adnllite tl_api ton_crypto ton_block tl_tonlib_api tonlib)
+
+add_executable(test-tonlib-offline test/test-td-main.cpp ${TONLIB_OFFLINE_TEST_SOURCE})
+target_link_libraries(test-tonlib-offline tdutils tdactor adnllite tl_api ton_crypto ton_block fift-lib tl_tonlib_api tonlib)
+#END tonlib
+
+
+enable_testing()
+set(TEST_OPTIONS "--regression ${CMAKE_CURRENT_SOURCE_DIR}/test/regression-tests.ans --filter -Bench")
+separate_arguments(TEST_OPTIONS)
+add_test(test-ed25519 test-ed25519)
+add_test(test-vm test-vm ${TEST_OPTIONS})
+add_test(test-fift test-fift ${TEST_OPTIONS})
+add_test(test-cells test-cells ${TEST_OPTIONS})
+add_test(test-net test-net)
+add_test(test-actors test-tdactor)
+
+#BEGIN tonlib
+add_test(test-tdutils test-tdutils)
+add_test(test-tonlib-offline test-tonlib-offline)
+#END tonlib
+
+
diff --git a/submodules/ton/tonlib-src/DISCLAIMER b/submodules/ton/tonlib-src/DISCLAIMER
new file mode 100644
index 0000000000..acddc25d07
--- /dev/null
+++ b/submodules/ton/tonlib-src/DISCLAIMER
@@ -0,0 +1,9 @@
+Please read the following before you download the TON Blockchain Lite Client and connect to the TON Test Network. By downloading the TON Blockchain Lite Client and associated software and connecting to the TON Test Network, you accept and agree to be bound and abide by the following terms:
+
+ 1. You agree to use the TON Test Network only for lawful purposes and only for testing and development purposes.
+
+ 2. YOUR USE OF THE TON TEST NETWORK IS AT YOUR OWN RISK. THE TON TEST NETWORK IS PROVIDED ON AN "AS IS" AND "AS AVAILABLE" BASIS, WITHOUT ANY WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED. YOU UNDERSTAND AND ACKNOWLEDGE THAT THE TON TEST NETWORK IS STILL UNDER DEVELOPMENT AND TESTING.
+
+ 3. NEITHER TELEGRAM NOR ANY PERSON ASSOCIATED WITH TELEGRAM MAKES, AND HEREBY DISCLAIMS, ANY WARRANTY OR REPRESENTATION WITH RESPECT TO THE COMPLETENESS, SECURITY, RELIABILITY, QUALITY, ACCURACY, AVAILABILITY, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT OF THE TON TEST NETWORK. WITHOUT LIMITING THE FOREGOING, NEITHER TELEGRAM NOR ANYONE ASSOCIATED WITH TELEGRAM REPRESENTS OR WARRANTS THAT THE TON TEST NETWORK WILL BE ACCURATE, RELIABLE, ERROR-FREE OR UNINTERRUPTED, THAT DEFECTS WILL BE CORRECTED, THAT THE TON TEST NETWORK IS FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS OR THAT THE TON TEST NETWORK WILL OTHERWISE MEET YOUR NEEDS OR EXPECTATIONS. SOME JURISDICTIONS DO NOT ALLOW EXCLUSION OF WARRANTIES OR LIMITATIONS ON THE DURATION OF IMPLIED WARRANTIES, SO THE ABOVE DISCLAIMER MAY NOT APPLY TO YOU IN ITS ENTIRETY, BUT WILL APPLY TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW.
+
+ 4. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL TELEGRAM NOR ANY PERSON ASSOCIATED WITH TELEGRAM BE LIABLE FOR ANY LOSS OF USE, LOST DATA, FAILURE OF SECURITY MECHANISMS, INTERRUPTION OF BUSINESS, OR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY KIND (INCLUDING LOST PROFITS), REGARDLESS OF THE FORM OF ACTION, WHETHER IN CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF INFORMED OF THE POSSIBILITY OF SUCH DAMAGES IN ADVANCE. NOTWITHSTANDING ANY OTHER PROVISION OF THIS TERMS OF USE, NEITHER TELEGRAM NOR ANY PERSON ASSOCIATED WITH TELEGRAM SHALL HAVE ANY LIABILITY UNDER THIS TERMS OF USE.
diff --git a/submodules/ton/tonlib-src/HOWTO b/submodules/ton/tonlib-src/HOWTO
new file mode 100644
index 0000000000..a4aacbb0f0
--- /dev/null
+++ b/submodules/ton/tonlib-src/HOWTO
@@ -0,0 +1,541 @@
+The aim of this document is to provide step-by-step instructions for compiling and creating a simple smart contract (a simple wallet) in the TON Blockchain Test Network using the TON Blockchain Lite Client and associated software.
+
+Download and installation instructions may be found in README. We assume here that the Lite Client is already properly downloaded, compiled and installed.
+
+1. Smart-contract addresses
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Smart-contract addresses in the TON Network consist of two parts: (a) the workchain ID (a signed 32-bit integer) and (b) the address inside the workchain (64-512 bits depending on the workchain). Currently, only the masterchain (workchain_id=-1) and occasionally the basic workchain (workchain_id=0) are running in the TON Blockchain Test Network. Both of them have 256-bit addresses, so we henceforth assume that workchain_id is either 0 or -1 and that the address inside the workchain is exactly 256-bit.
+
+Under the conditions stated above, the smart-contract address can be represented in the following forms:
+
+A) "Raw": :<64 hexadecimal digits with address>
+B) "User-friendly", which is obtained by first generating:
+- one tag byte (0x11 for "bounceable" addresses, 0x51 for "non-bounceable"; add +0x80 if the address should not be accepted by software running in the production network)
+- one byte containing a signed 8-bit integer with the workchain_id (0x00 for the basic workchain, 0xff for the masterchain)
+- 32 bytes containing 256 bits of the smart-contract address inside the workchain (big-endian)
+- 2 bytes containing CRC16-CCITT of the previous 34 bytes
+
+In case B), the 36 bytes thus obtained are then encoded using base64 (i.e., with digits, upper- and lowercase Latin letters, '/' and '+') or base64url (with '_' and '-' instead of '/' and '+'), yielding 48 printable non-space characters.
+
+Example:
+
+The "test giver" (a special smart contract residing in the masterchain of the Test Network that gives up to 20 test Grams to anybody who asks) has the address
+
+-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d
+
+in the "raw" form (notice that uppercase Latin letters 'A'..'F' may be used instead of 'a'..'f')
+
+and
+
+Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb (base64) or
+Ef-BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb (base64url)
+
+in the "user-friendly" form (to be displayed by user-friendly clients). Notice that both forms (base64 and base64url) are valid and must be accepted.
+
+Incidentally, other binary data related to the TON Blockchain have similar "armored" base64 representations, differing by their first bytes. For example, the ubiquitious 256-bit Ed25519 public keys are represented by first creating a 36-byte sequence as follows:
+- one tag byte 0x3E, meaning that this is a public key
+- one tag byte 0xE6, meaning that this is a Ed25519 public key
+- 32 bytes containing the standard binary representation of the Ed25519 public key
+- 2 bytes containing the big-endian representation of CRC16-CCITT of the previous 34 bytes.
+
+The resulting 36-byte sequence is converted into a 48-character base64 or base64url string in the standard fashion. For example, the Ed25519 public key E39ECDA0A7B0C60A7107EC43967829DBE8BC356A49B9DFC6186B3EAC74B5477D (usually represented by a sequence of 32 bytes 0xE3, 0x9E, ..., 0x7D) has the following "armored" representation:
+
+Pubjns2gp7DGCnEH7EOWeCnb6Lw1akm538YYaz6sdLVHfRB2
+
+2. Inspecting the state of a smart contract
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Inspecting the state of smart contracts with the aid of the TON Lite Client is easy. For the sample smart contract described above, you would run the Lite Client and enter the following commands:
+
+> last
+...
+> getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d
+or
+> getaccount Ef-BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb
+
+You will see something like this:
+
+------------------------------------
+got account state for -1:8156775B79325E5D62E742D9B96C30B6515A5CD2F1F64C5DA4B193C03F070E0D with respect to blocks (-1,8000000000000000,1645):4D5E1B928490BE34A4F03C9BC996661B8AD4E988F1460DB69BE3634B1E843DAF:9D85BB116D1DA4BFD999E9092BBD43B3A9F96EC9C9ED7AFDC81B27B08D3861A0 and (-1,8000000000000000,1645):4D5E1B928490BE34A4F03C9BC996661B8AD4E988F1460DB69BE3634B1E843DAF:9D85BB116D1DA4BFD999E9092BBD43B3A9F96EC9C9ED7AFDC81B27B08D3861A0
+account state is (account
+ addr:(addr_std
+ anycast:nothing workchain_id:-1 address:x8156775B79325E5D62E742D9B96C30B6515A5CD2F1F64C5DA4B193C03F070E0D)
+ storage_stat:(storage_info
+ used:(storage_used
+ cells:(var_uint len:1 value:3)
+ bits:(var_uint len:2 value:539)
+ public_cells:(var_uint len:0 value:0)) last_paid:0
+ due_payment:nothing)
+ storage:(account_storage last_trans_lt:0
+ balance:(currencies
+ grams:(nanograms
+ amount:(var_uint len:7 value:1000000000000000))
+ other:(extra_currencies
+ dict:hme_empty))
+ state:(account_active
+ (
+ split_depth:nothing
+ special:nothing
+ code:(just
+ value:(raw@^Cell
+ x{}
+ x{FF0020DDA4F260D31F01ED44D0D31FD166BAF2A1F80001D307D4D1821804A817C80073FB0201FB00A4C8CB1FC9ED54}
+ ))
+ data:(just
+ value:(raw@^Cell
+ x{}
+ x{00009A15}
+ ))
+ library:hme_empty))))
+x{CFF8156775B79325E5D62E742D9B96C30B6515A5CD2F1F64C5DA4B193C03F070E0D2068086C0000000000000000000000001C0E35FA931A000134_}
+ x{FF0020DDA4F260D31F01ED44D0D31FD166BAF2A1F80001D307D4D1821804A817C80073FB0201FB00A4C8CB1FC9ED54}
+ x{00000000}
+------------------------------------
+
+The first information line "got account state ... for ..." shows the account address and the masterchain block identifier with respect to which the account state has been dumped. Notice that even if the account state changes in a subsequent block, the `getaccount xxx` command will return the same result until the reference block is updated to a newer value by a `last` command. In this way one can study the state of all accounts and obtain consistent results.
+
+The "account state is (account ... " line begins the pretty-printed deserialized view of the account state. It is a deserialization of TL-B data type Account, used to represent account states in the TON Blockchain as explained in the TON Blockchain documentation. (You can find the TL-B scheme used for deserialization in the source file crypto/block/block.tlb; notice that if the scheme is out of date, the deserialization may break down.)
+
+Finally, the last several lines beginning with x{CFF538... (the "raw dump") contain the same information displayed as a tree of cells. In this case, we have one root cell containing the data bits CFF...134_ (the underscore means that the last binary one and all subsequent binary zeroes are to be removed, so hexadecimal "4_" corresponds to binary "0"), and two cells that are its children (displayed with one-space indentation).
+
+We can see that x{FF0020DDA4F260...} is the code of this smart contract. If we consult the Appendix A of the TON Virtual Machine documentation, we can even disassemble this code: FF00 is SETCP 0, 20 is DUP, DD is IFNOTRET, A4 is INC, F260 is THROWIF 32, and so on. (Incidentally, you can find the source code of this smartcontract in the source file crypto/block/mc0.fif .)
+
+We can also see that x{00009A15} (the actual value you see may be different) is the persistent data of this smart contract. It is actually an unsigned 32-bit integer, used by the smart contract as the counter of operations performed so far. Notice that this value is big-endian (i.e., 3 is encoded as x{00000003}, not as x{03000000}), as are all integers inside the TON Blockchain. In this case the counter is equal to 0x9A15 = 39445.
+
+The current balance of the smart contract is easily seen in the pretty-printed portion of the output. In this case, we see ... balance:(currencies:(grams:(nanograms:(... value:1000000000000000...)))), which is the balance of the account in (test) nanograms (a million test Grams in this example; the actual number you see may be smaller). If you study the TL-B scheme provided in crypto/block/scheme.tlb, you will be able to find this number (10^15) in binary big-endian form in the raw dump portion as well (it is located near the end of the data bits of the root cell).
+
+3. Compiling a new smart contract
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Before uploading a new smart contract into the TON Blockchain, you need to determine its code and data and save them in serialized form into a file (called a "bag-of-cells" or BOC file, usually with a .boc suffix). Let us consider the case of a simple wallet smart contract, which stores a 32-bit operations counter and a 256-bit Ed25519 public key of its owner in its persistent data.
+
+Obviously, you'll need some tools for developing smart contracts - namely, a TON smart contract compiler. Basically, a TON smart contract compiler is a program that reads the source of a smart contract in a specialized high-level programming language and creates a .boc file from this source.
+
+One such tool is the Fift interpreter, which is included in this distribution and can help create simple smart contracts. Larger smart contracts should be developed using more sophisticated tools (such as the FunC compiler included in this distribution, that creates Fift assembler files from FunC source files; you can find some FunC smart-contract sources in the directory `crypto/smartcont`). However, Fift is sufficient for demonstration purposes.
+
+Consider the file `new-wallet.fif` (usually located as `crypto/smartcont/new-wallet.fif` with respect to the source directory) containing the source of a simple wallet smart contract:
+
+------------------------------------
+#!/usr/bin/env fift -s
+"TonUtil.fif" include
+"Asm.fif" include
+
+{ ."usage: " @' $0 type ." []" cr
+ ."Creates a new wallet in specified workchain, with private key saved to or loaded from .pk" cr
+ ."('new-wallet.pk' by default)" cr 1 halt
+} : usage
+$# 1- -2 and ' usage if
+
+$1 parse-workchain-id =: wc // set workchain id from command line argument
+def? $2 { @' $2 } { "new-wallet" } cond constant file-base
+
+."Creating new wallet in workchain " wc . cr
+
+// Create new simple wallet
+<{ SETCP0 DUP IFNOTRET // return if recv_internal
+ DUP 85143 INT EQUAL IFJMP:<{ // "seqno" get-method
+ DROP c4 PUSHCTR CTOS 32 PLDU // cnt
+ }>
+ INC 32 THROWIF // fail unless recv_external
+ 512 INT LDSLICEX DUP 32 PLDU // sign cs cnt
+ c4 PUSHCTR CTOS 32 LDU 256 LDU ENDS // sign cs cnt cnt' pubk
+ s1 s2 XCPU // sign cs cnt pubk cnt' cnt
+ EQUAL 33 THROWIFNOT // ( seqno mismatch? )
+ s2 PUSH HASHSU // sign cs cnt pubk hash
+ s0 s4 s4 XC2PU // pubk cs cnt hash sign pubk
+ CHKSIGNU // pubk cs cnt ?
+ 34 THROWIFNOT // signature mismatch
+ ACCEPT
+ SWAP 32 LDU NIP
+ DUP SREFS IF:<{
+ // 3 INT 35 LSHIFT# 3 INT RAWRESERVE // reserve all but 103 Grams from the balance
+ 8 LDU LDREF // pubk cnt mode msg cs
+ s0 s2 XCHG SENDRAWMSG // pubk cnt cs ; ( message sent )
+ }>
+ ENDS
+ INC NEWC 32 STU 256 STU ENDC c4 POPCTR
+}>c // >libref
+// code
+ // data
+null // no libraries
+// Libs{ x{ABACABADABACABA} drop x{AAAA} s>c public_lib x{1234} x{5678} |_ s>c public_lib }Libs
+ // create StateInit
+dup ."StateInit: "
+dup ."signing message: "
+dup ."External message for initialization is " B dup Bx. cr
+file-base +"-query.boc" tuck B>file
+."(Saved wallet creating query to file " type .")" cr
+--------------------------------------------
+
+(The actual source file in your distribution may be slighly different.) Essentially, it is a complete Fift script for creating a new instance of this smart contract controlled by a newly-generated keypair. The script accepts command-line arguments, so you don't need to edit the source file each time you want to create a new wallet.
+
+Now, provided that you have compiled Fift binary (usually located as "crypto/fift" with respect to the build directory), you can run
+
+$ crypto/fift -I/crypto/fift/lib -s /crypto/smartcont/new-wallet.fif 0 my_wallet_name
+
+where 0 is the workchain to contain the new wallet (0 = basechain, -1 = masterchain), `my_wallet_name` is any identifier you wish to be associated with this wallet. The address of the new wallet will be saved into file `my_wallet_name.addr`, its newly-generated private key will be saved to `my_wallet_name.pk` (unless this file already exists; then the key will be loaded from this file instead), and the external message will be saved into my_wallet_name-query.boc. If you do not indicate the name of your wallet (`my_wallet_name` in the example above), the default name `new-wallet` is used.
+
+You may opt to set the FIFTPATH environment variable to /crypto/fift/lib:/crypto/smartcont, the directories containing Fift.fif and Asm.fif library files, and the sample smart-contract sources, respectively; then you can omit the -I argument to the Fift interpreter. If you install the Fift binary `crypto/fift` to a directory included in your PATH (e.g., /usr/bin/fift), you can simply invoke
+
+$ fift -s new-wallet.fif 0 my_wallet_name
+
+instead of indicating the complete search paths in the command line.
+
+If everything worked, you'll see something like the following
+
+--------------------------------------------
+Creating new wallet in workchain 0
+Saved new private key to file my_wallet_name.pk
+StateInit: x{34_}
+ x{FF0020DD2082014C97BA9730ED44D0D70B1FE0A4F260810200D71820D70B1FED44D0D31FD3FFD15112BAF2A122F901541044F910F2A2F80001D31F3120D74A96D307D402FB00DED1A4C8CB1FCBFFC9ED54}
+ x{00000000C59DC52962CC568AC5E72735EABB025C5BDF457D029AEEA6C2FFA5EB2A945446}
+
+new wallet address = 0:2ee9b4fd4f077c9b223280c35763df9edab0b41ac20d36f4009677df95c3afe2
+(Saving address to file my_wallet_name.addr)
+Non-bounceable address (for init): 0QAu6bT9Twd8myIygMNXY9-e2rC0GsINNvQAlnfflcOv4uVb
+Bounceable address (for later access): kQAu6bT9Twd8myIygMNXY9-e2rC0GsINNvQAlnfflcOv4rie
+signing message: x{00000000}
+
+External message for initialization is x{88005DD369FA9E0EF93644650186AEC7BF3DB5616835841A6DE8012CEFBF2B875FC41190260D403E40B2EE8BEB2855D0F4447679D9B9519BE64BE421166ABA2C66BEAAAF4EBAF8E162886430243216DDA10FCE68C07B6D7DDAA3E372478D711E3E1041C00000001_}
+ x{FF0020DD2082014C97BA9730ED44D0D70B1FE0A4F260810200D71820D70B1FED44D0D31FD3FFD15112BAF2A122F901541044F910F2A2F80001D31F3120D74A96D307D402FB00DED1A4C8CB1FCBFFC9ED54}
+ x{00000000C59DC52962CC568AC5E72735EABB025C5BDF457D029AEEA6C2FFA5EB2A945446}
+
+B5EE9C724104030100000000E50002CF88005DD369FA9E0EF93644650186AEC7BF3DB5616835841A6DE8012CEFBF2B875FC41190260D403E40B2EE8BEB2855D0F4447679D9B9519BE64BE421166ABA2C66BEAAAF4EBAF8E162886430243216DDA10FCE68C07B6D7DDAA3E372478D711E3E1041C000000010010200A2FF0020DD2082014C97BA9730ED44D0D70B1FE0A4F260810200D71820D70B1FED44D0D31FD3FFD15112BAF2A122F901541044F910F2A2F80001D31F3120D74A96D307D402FB00DED1A4C8CB1FCBFFC9ED54004800000000C59DC52962CC568AC5E72735EABB025C5BDF457D029AEEA6C2FFA5EB2A945446BCF59C17
+(Saved wallet creating query to file my_wallet_name-query.boc)
+--------------------------------------------
+
+In a nutshell, the Fift assembler (loaded by the "Asm.fif" include line) is used to compile the source code of the smart contract (contained in <{ SETCP0 ... c4 POPCTR }> lines) into its internal representation. The initial data of the smart contract is also created (by lines), containing a 32-bit sequence number (equal to zero) and a 256-bit public key from a newly-generated Ed25519 keypair. The corresponding private key is saved into the file `my_wallet_name.pk` unless it already exists (if you run this code twice in the same directory, the private key will be loaded from this file instead).
+
+The code and data for the new smart contract are combined into a StateInit structure (in the next lines), the address of the new smart contract (equal to the hash of this StateInit structure) is computed and output, and then an external message with a destination address equal to that of the new smart contract is created. This external message contains both the correct StateInit for the new smart contract and a non-trivial payload (signed by the correct private key).
+
+Finally, the external message is serialized into a bag of cells (represented by B5EE...BE63) and saved into the file `my_wallet_name-query.boc`. Essentially, this file is your compiled smart contract with all additional information necessary to upload it into the TON Blockchain.
+
+4. Transferring some funds to the new smart contract
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+You might try to upload the new smart contract immediately by running the Lite Client and typing
+
+> sendfile new-wallet-query.boc
+
+or
+
+> sendfile my_wallet_name-query.boc
+
+if you chose to name your wallet `my_wallet_name`.
+
+Unfortunately, this won't work, because smart contracts must have a positive balance to be able to pay for storing and processing their data in the blockchain. So you have to transfer some funds to your new smart contract address first, displayed during its generation as -1:60c0...c0d0 (in raw form) and 0f9..EKD (in user-friendly form).
+
+In a real scenario, you would either transfer some Grams from your already existing wallet, ask a friend to do so, or buy some Grams at a cryptocurrency exchange, indicating 0f9...EKD as the account to transfer the new Grams to.
+
+In the Test Network, you have another option: you can ask the "test giver" to give you some test Grams (up to 20). Let us explain how to do it.
+
+5. Using the test giver smart contract
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+You need to know the address of the test giver smart contract. We'll assume that it is -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d, or, equivalently, Ef-BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb, as indicated in one of the previous examples. You inspect the state of this smart contract in the Lite Client by typing
+
+> last
+> getaccount Ef-BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb
+
+as explained above in Section 2. The only number you need from the output is the 32-bit sequence number stored in the smart contract data (it is zero in the example above, but generally it will be non-zero).
+
+Next, you create an external message to the test giver asking it to send another message to your (uninitialized) smart contract carrying a specified amount of test Grams. There is a special Fift script for generating this external message located at crypto/smartcont/testgiver.fif:
+
+--------------------------------------------
+#!/usr/bin/env fift -s
+"TonUtil.fif" include
+
+{ ."usage: " @' $0 type ." []" cr
+ ."Creates a request to TestGiver and saves it into .boc" cr
+ ."('testgiver-query.boc' by default)" cr 1 halt
+} : usage
+
+$# 3 - -2 and ' usage if
+
+// "testgiver.addr" load-address
+Masterchain 0x8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d
+2constant giver_addr
+ ."Test giver address = " giver_addr 2dup .addr cr 6 .Addr cr
+
+$1 true parse-load-address =: bounce 2=: dest_addr
+$2 parse-int =: seqno
+$3 $>GR =: amount
+def? $4 { @' $4 } { "testgiver-query" } cond constant savefile
+
+."Requesting " amount .GR ."to account "
+dest_addr 2dup bounce 7 + .Addr ." = " .addr
+."seqno=0x" seqno x. ."bounce=" bounce . cr
+
+// create a message (NB: 01b00.., b = bounce)
+
+
+dup ."enveloping message: "
+dup ."resulting external message: " B dup Bx. cr
+savefile +".boc" tuck B>file
+."(Saved to file " type .")" cr
+---------------------------------------------
+
+You can pass the required parameters as command-line arguments to this script
+
+$ crypto/fift -I -s []
+
+For instance,
+
+$ crypto/fift -I/crypto/fift/lib:/crypto/smartcont -s testgiver.fif 0QAu6bT9Twd8myIygMNXY9-e2rC0GsINNvQAlnfflcOv4uVb 0x9A15 6.666 wallet-query
+
+or simply
+
+$ fift -s testgiver.fif 0QAu6bT9Twd8myIygMNXY9-e2rC0GsINNvQAlnfflcOv4uVb 0x9A15 6.666 wallet-query
+
+provided you have set up the environment variable FIFTPATH to /crypto/fift/lib:/crypto/smartcont and installed the fift binary as /usr/bin/fift (or anywhere else in your PATH).
+
+The newly-created message to the new smart contract must have its bounce bit clear, otherwise the transfer will be "bounced" to its sender. This is the reason we have passed the "non-bounceable" address 0QAu6bT9Twd8myIygMNXY9-e2rC0GsINNvQAlnfflcOv4uVb of our new wallet smart contract.
+
+This Fift code creates an internal message from the test giver smart contract to the address of our new smart contract carrying 6.666 test Grams (you can enter any other amount here up to approximately 20 Grams). Then this message is enveloped into an external message addressed to the test giver; this external message must also contain the correct sequence number of the test giver. When the test giver receives such an external message, it checks whether the sequence number matches the one stored in its persistent data, and if it does, sends the embedded internal message with the required amount of test Grams to its destination (our smart contract in this case).
+
+The external message is serialized and saved into the file `wallet-query.boc`. Some output is generated in the process:
+
+---------------------------------------------
+Test giver address = -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d
+kf-BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODZKR
+Requesting GR$6.666 to account 0QAu6bT9Twd8myIygMNXY9-e2rC0GsINNvQAlnfflcOv4uVb = 0:2ee9b4fd4f077c9b223280c35763df9edab0b41ac20d36f4009677df95c3afe2 seqno=0x9a15 bounce=0
+enveloping message: x{00009A1501}
+ x{42001774DA7EA783BE4D91194061ABB1EFCF6D585A0D61069B7A004B3BEFCAE1D7F1280C6A98B4000000000000000000000000000047494654}
+
+resulting external message: x{89FF02ACEEB6F264BCBAC5CE85B372D8616CA2B4B9A5E3EC98BB496327807E0E1C1A000004D0A80C_}
+ x{42001774DA7EA783BE4D91194061ABB1EFCF6D585A0D61069B7A004B3BEFCAE1D7F1280C6A98B4000000000000000000000000000047494654}
+
+B5EE9C7241040201000000006600014F89FF02ACEEB6F264BCBAC5CE85B372D8616CA2B4B9A5E3EC98BB496327807E0E1C1A000004D0A80C01007242001774DA7EA783BE4D91194061ABB1EFCF6D585A0D61069B7A004B3BEFCAE1D7F1280C6A98B4000000000000000000000000000047494654AFC17FA4
+(Saved to file wallet-query.boc)
+---------------------------------------------
+
+6. Uploading the external message to the test giver smart contract
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Now we can invoke the Lite Client, check the state of the test giver (if the sequence number has changed, our external message will fail), and then type
+
+> sendfile wallet-query.boc
+
+We will see some output:
+... external message status is 1
+
+which means that the external message has been delivered to the collator pool. Afterwards one of the collators might choose to include this external message in a block, creating a transaction for the test giver smart contract to process this external message. We can check whether the state of the test giver has changed:
+
+> last
+> getaccount Ef-BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb
+
+(If you forget to type `last`, you are likely to see the unchanged state of the test giver smart contract.) The resulting output would be:
+
+---------------------------------------------
+got account state for -1:8156775B79325E5D62E742D9B96C30B6515A5CD2F1F64C5DA4B193C03F070E0D with respect to blocks (-1,8000000000000000,10441):2DCFB7F734913261B85B8866DFF7CBEF07205EAA0769F4EE15E242AB520A2CC5:4F96F417BCD74D5DAE0CC3CCC285E513B85652002D9AD8CC884781D8465E3591 and (-1,8000000000000000,10441):2DCFB7F734913261B85B8866DFF7CBEF07205EAA0769F4EE15E242AB520A2CC5:4F96F417BCD74D5DAE0CC3CCC285E513B85652002D9AD8CC884781D8465E3591
+account state is (account
+ addr:(addr_std
+ anycast:nothing workchain_id:-1 address:x8156775B79325E5D62E742D9B96C30B6515A5CD2F1F64C5DA4B193C03F070E0D)
+ storage_stat:(storage_info
+ used:(storage_used
+ cells:(var_uint len:1 value:3)
+ bits:(var_uint len:2 value:539)
+ public_cells:(var_uint len:0 value:0)) last_paid:0
+ due_payment:nothing)
+ storage:(account_storage last_trans_lt:10697000003
+ balance:(currencies
+ grams:(nanograms
+ amount:(var_uint len:7 value:999993280210000))
+ other:(extra_currencies
+ dict:hme_empty))
+ state:(account_active
+ (
+ split_depth:nothing
+ special:nothing
+ code:(just
+ value:(raw@^Cell
+ x{}
+ x{FF0020DDA4F260D31F01ED44D0D31FD166BAF2A1F80001D307D4D1821804A817C80073FB0201FB00A4C8CB1FC9ED54}
+ ))
+ data:(just
+ value:(raw@^Cell
+ x{}
+ x{00009A16}
+ ))
+ library:hme_empty))))
+x{CFF8156775B79325E5D62E742D9B96C30B6515A5CD2F1F64C5DA4B193C03F070E0D2068086C00000000000000009F65D110DC0E35F450FA914134_}
+ x{FF0020DDA4F260D31F01ED44D0D31FD166BAF2A1F80001D307D4D1821804A817C80073FB0201FB00A4C8CB1FC9ED54}
+ x{00000001}
+---------------------------------------------
+
+You may notice that the sequence number stored in the persistent data has changed (in our example, to 0x9A16 = 39446), and the last_trans_lt field (the logical time of the last transaction of this account) has been increased.
+
+Now we can inspect the state of our new smart contract:
+
+> getaccount 0QAu6bT9Twd8myIygMNXY9-e2rC0GsINNvQAlnfflcOv4uVb
+or
+> getaccount 0:2ee9b4fd4f077c9b223280c35763df9edab0b41ac20d36f4009677df95c3afe2
+Now we see
+
+---------------------------------------------
+got account state for 0:2EE9B4FD4F077C9B223280C35763DF9EDAB0B41AC20D36F4009677DF95C3AFE2 with respect to blocks (-1,8000000000000000,16481):890F4D549428B2929F5D5E0C5719FBCDA60B308BA4B907797C9E846E644ADF26:22387176928F7BCEF654411CA820D858D57A10BBF1A0E153E1F77DE2EFB2A3FB and (-1,8000000000000000,16481):890F4D549428B2929F5D5E0C5719FBCDA60B308BA4B907797C9E846E644ADF26:22387176928F7BCEF654411CA820D858D57A10BBF1A0E153E1F77DE2EFB2A3FB
+account state is (account
+ addr:(addr_std
+ anycast:nothing workchain_id:0 address:x2EE9B4FD4F077C9B223280C35763DF9EDAB0B41AC20D36F4009677DF95C3AFE2)
+ storage_stat:(storage_info
+ used:(storage_used
+ cells:(var_uint len:1 value:1)
+ bits:(var_uint len:1 value:111)
+ public_cells:(var_uint len:0 value:0)) last_paid:1553210152
+ due_payment:nothing)
+ storage:(account_storage last_trans_lt:16413000004
+ balance:(currencies
+ grams:(nanograms
+ amount:(var_uint len:5 value:6666000000))
+ other:(extra_currencies
+ dict:hme_empty))
+ state:account_uninit))
+x{CFF60C04141C6A7B96D68615E7A91D265AD0F3A9A922E9AE9C901D4FA83F5D3C0D02025BC2E4A0D9400000000F492A0511406354C5A004_}
+---------------------------------------------
+
+Our new smart contract has some positive balance (of 6.666 test Grams), but has no code or data (reflected by `state:account_uninit`).
+
+7. Uploading the code and data of the new smart contract
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Now you can finally upload the external message with the StateInit of the new smart contract, containing its code and data:
+
+---------------------------------------------
+> sendfile my_wallet_name-query.boc
+... external message status is 1
+> last
+...
+> getaccount 0QAu6bT9Twd8myIygMNXY9-e2rC0GsINNvQAlnfflcOv4uVb
+...
+got account state for 0:2EE9B4FD4F077C9B223280C35763DF9EDAB0B41AC20D36F4009677DF95C3AFE2 with respect to blocks (-1,8000000000000000,16709):D223B25D8D68401B4AA19893C00221CF9AB6B4E5BFECC75FD6048C27E001E0E2:4C184191CE996CF6F91F59CAD9B99B2FD5F3AA6F55B0B6135069AB432264358E and (-1,8000000000000000,16709):D223B25D8D68401B4AA19893C00221CF9AB6B4E5BFECC75FD6048C27E001E0E2:4C184191CE996CF6F91F59CAD9B99B2FD5F3AA6F55B0B6135069AB432264358E
+account state is (account
+ addr:(addr_std
+ anycast:nothing workchain_id:0 address:x2EE9B4FD4F077C9B223280C35763DF9EDAB0B41AC20D36F4009677DF95C3AFE2)
+ storage_stat:(storage_info
+ used:(storage_used
+ cells:(var_uint len:1 value:3)
+ bits:(var_uint len:2 value:963)
+ public_cells:(var_uint len:0 value:0)) last_paid:1553210725
+ due_payment:nothing)
+ storage:(account_storage last_trans_lt:16625000002
+ balance:(currencies
+ grams:(nanograms
+ amount:(var_uint len:5 value:5983177000))
+ other:(extra_currencies
+ dict:hme_empty))
+ state:(account_active
+ (
+ split_depth:nothing
+ special:nothing
+ code:(just
+ value:(raw@^Cell
+ x{}
+ x{FF0020DDA4F260810200D71820D70B1FED44D0D7091FD709FFD15112BAF2A122F901541044F910F2A2F80001D7091F3120D74A97D70907D402FB00DED1A4C8CB1FCBFFC9ED54}
+ ))
+ data:(just
+ value:(raw@^Cell
+ x{}
+ x{00000001F61CF0BC8E891AD7636E0CD35229D579323AA2DA827EB85D8071407464DC2FA3}
+ ))
+ library:hme_empty))))
+x{CFF60C04141C6A7B96D68615E7A91D265AD0F3A9A922E9AE9C901D4FA83F5D3C0D020680F0C2E4A0EB280000000F7BB57909405928024A134_}
+ x{FF0020DDA4F260810200D71820D70B1FED44D0D7091FD709FFD15112BAF2A122F901541044F910F2A2F80001D7091F3120D74A97D70907D402FB00DED1A4C8CB1FCBFFC9ED54}
+ x{00000001F61CF0BC8E891AD7636E0CD35229D579323AA2DA827EB85D8071407464DC2FA3}
+---------------------------------------------
+
+You will see that the smart contract has been initialized using code and data from the StateInit of the external message, and its balance has been slightly decreased because of the processing fees. Now it is up and running, and you can activate it by generating new external messages and uploading them to the TON Blockchain using the "sendfile" command of the Lite Client.
+
+8. Using the simple wallet smart contract
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Actually, the simple wallet smart contract used in this example can be used to transfer test Grams to any other accounts. It is in this respect similar to the test giver smart contract discussed above, with the difference that it processes only external messages signed by the correct private key (of its owner). In our case, it is the private key saved into the file "my_wallet_name.pk" during the compilation of the smart contract (see Section 3).
+
+An example of how you might use this smart contract is provided in sample file crypto/smartcont/wallet.fif :
+
+--------------------------------------------------------
+#!/usr/bin/env fift -s
+"TonUtil.fif" include
+
+{ ."usage: " @' $0 type ." [-B ] []" cr
+ ."Creates a request to simple wallet created by new-wallet.fif, with private key loaded from file .pk "
+ ."and address from .addr, and saves it into .boc ('wallet-query.boc' by default)" cr 1 halt
+} : usage
+$# dup 4 < swap 5 > or ' usage if
+def? $6 { @' $5 "-B" $= { @' $6 =: body-boc-file [forget] $6 def? $7 { @' $7 =: $5 [forget] $7 } { [forget] $5 } cond
+ @' $# 2- =: $# } if } if
+
+true constant bounce
+
+$1 =: file-base
+$2 bounce parse-load-address =: bounce 2=: dest_addr
+$3 parse-int =: seqno
+$4 $>GR =: amount
+def? $5 { @' $5 } { "wallet-query" } cond constant savefile
+
+file-base +".addr" load-address
+2dup 2constant wallet_addr
+."Source wallet address = " 2dup .addr cr 6 .Addr cr
+file-base +".pk" load-keypair nip constant wallet_pk
+
+def? body-boc-file { @' body-boc-file file>B B>boc } { } cond
+constant body-cell
+
+."Transferring " amount .GR ."to account "
+dest_addr 2dup bounce 7 + .Addr ." = " .addr
+."seqno=0x" seqno x. ."bounce=" bounce . cr
+."Body of transfer message is " body-cell
+
+dup ."signing message: "
+dup ."resulting external message: " B dup Bx. cr
+savefile +".boc" tuck B>file
+."(Saved to file " type .")" cr
+-------------------------------------
+
+You can invoke this script as follows:
+
+$ fift -I/crypto/fift/lib:/crypto/smartcont -s wallet.fif
+
+or simply
+
+$ fift -s wallet.fif
+
+if you have correctly set up PATH and FIFTPATH.
+
+For example,
+
+$ fift -s wallet.fif my_wallet_name kf8Ty2EqAKfAksff0upF1gOptUWRukyI9x5wfgCbh58Pss9j 1 .666
+
+Here `my_wallet_name` is the identifier of your wallet used before with new-wallet.fif; the address and the private key of your test wallet will be loaded from files `my_wallet_name.addr` and `my_wallet_name.pk` in the current directory.
+
+When you run this code (by invoking the Fift interpreter), you create an external message with a destination equal to the address of your wallet smart contract, containing a correct Ed25519 signature, a sequence number, and an enveloped internal message from your wallet smart contract to the smart contract indicated in dest_addr, with an arbitrary value attached and an arbitrary payload. When your smart contract receives and processes this external message, it first checks the signature and the sequence number. If they are correct, it accepts the external message, sends the embedded internal message from itself to the intended destination, and increases the sequence number in its persistent data (this is a simple measure to prevent replay attacks, in case this sample wallet smart contract code ends up used in a real wallet application).
+
+Of course, a true TON Blockchain wallet application would hide all the intermediate steps explained above. It would first communicate the address of the new smart contract to the user, asking them to transfer some funds to the indicated address (displayed in its non-bounceable user-friendly form) from another wallet or a cryptocurrency exchange, and then would provide a simple interface to display the current balance and to transfer funds to whatever other addresses the user wants. (The aim of this document is to explain how to create new non-trivial smart contracts and experiment with the TON Blockchain Test Network, rather than to explain how one could use the Lite Client instead of a more user-friendly wallet application.)
+
+One final remark: The above examples used smart contracts in the basic workchain (workchain 0). They would work in exactly the same way in the masterchain (workchain -1), if one passes workchain identifier -1 instead of 0 as the first argument to `new-wallet.fif`. The only difference is that the processing and storage fees in the basic workchain are 100-1000 times lower than in the masterchain. Some smart contracts (such as the validator election smart contract) accept transfers only from masterchain smart contracts, so you'll need a wallet in the masterchain if you wish to make stakes on behalf of your own validator and participate in the elections.
diff --git a/submodules/ton/tonlib-src/LGPLv2 b/submodules/ton/tonlib-src/LGPLv2
new file mode 100644
index 0000000000..d93ab1b9a3
--- /dev/null
+++ b/submodules/ton/tonlib-src/LGPLv2
@@ -0,0 +1,18 @@
+/*
+ This file is part of TON Blockchain Library.
+
+ TON Blockchain Library is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ TON Blockchain Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with TON Blockchain Library. If not, see .
+
+ Copyright 2017-2019 Telegram Systems LLP
+*/
diff --git a/submodules/ton/tonlib-src/LICENSE.LGPL b/submodules/ton/tonlib-src/LICENSE.LGPL
new file mode 100644
index 0000000000..b482fc4ed4
--- /dev/null
+++ b/submodules/ton/tonlib-src/LICENSE.LGPL
@@ -0,0 +1,481 @@
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL. It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it. You can use it for
+your libraries, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library. If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software. To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+ Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs. This
+license, the GNU Library General Public License, applies to certain
+designated libraries. This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+ The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it. Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program. However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+ Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries. We
+concluded that weaker conditions might promote sharing better.
+
+ However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves. This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them. (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.) The hope is that this
+will lead to faster development of free libraries.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+ Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License"). Each licensee is
+addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ c) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ d) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ , 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/submodules/ton/tonlib-src/README b/submodules/ton/tonlib-src/README
new file mode 100644
index 0000000000..7379d91e51
--- /dev/null
+++ b/submodules/ton/tonlib-src/README
@@ -0,0 +1,49 @@
+This archive is a distribution of a preliminary version of the TON Blockchain Lite Client along with the relevant portions of the TON Blockchain Library. It is not necessarily representative of the totality of the TON Blockchain code developed so far; rather it is a simplified stable version, containing only those files that are necessary for compiling the Lite Client, and sometimes outdated versions of these files sufficient for this purpose.
+
+Use this software at your own risk; consult the DISCLAIMER for more information.
+
+The software is licensed under GNU Lesser General Public License version 2 or later; consult LICENSE.LGPL and LGPL.v2 for more information. If you ever use any of these source files to develop your own versions of this or other software, you must attach a comment with the contents of LGPL.v2 to the beginning of each source file taken from this archive.
+
+The software is likely to compile and work properly on most Linux systems. It should work on macOS and even Windows; however, we do not guarantee this for this preliminary version.
+
+BASIC COMPILATION AND INSTALLATION INSTRUCTIONS
+
+1) Download and unpack the newest version of this archive, available at
+
+https://test.ton.org/download
+
+The TON Blockchain Test Network is updated quite often, so we cannot guarantee that older versions of the Lite Client will always work. Backward compatibility is not enforced at this development stage.
+
+2) Install the newest versions of make, cmake (version 3.0.2 or later), OpenSSL (including C header files), and g++ or clang (or another C++14-compatible compiler as appropriate for your operating system). We strongly recommend installing OpenSSL version 1.1.1 or later for better performance, especially if you intend to run a Full Node or a Validator as well.
+
+3) Suppose that you have unpacked this archive to directory ~/lite-client, where ~ is your home directory, and that you have created an empty directory ~/liteclient-build. Then run the following in a terminal on a Linux system:
+
+cd ~/liteclient-build
+cmake ~/lite-client
+cmake --build . --target lite-client
+
+You might also build some extra utilities useful for smart-contract development:
+
+cmake --build . --target fift
+cmake --build . --target func
+
+4) Download the newest configuration file from https://test.ton.org/ton-lite-client-test1.config.json :
+
+wget https://test.ton.org/ton-lite-client-test1.config.json
+
+5) Run the Lite Client:
+
+./lite-client/lite-client -C ton-lite-client-test1.config.json
+
+If everything was installed successfully, the Lite Client will connect to a special server (a full node for the TON Blockchain Test Network #1) and will send some queries to the server.
+If you indicate a writeable "database" directory as an extra argument to the client, it will download and save the block and the state corresponding to the newest masterchain block:
+
+./lite-client/lite-client -C ton-lite-client-test1.config.json -D ~/ton-db-dir
+
+Basic help info can be obtained by typing "help" into the Lite Client. Type "quit" or press Ctrl-C to exit.
+
+6) Now you can create new smart contracts, examine the state of existing smart contracts, send external messages to smart contracts and so on. You can also use Fift (if you have compiled it) to compile, execute, and debug your smart contracts locally.
+
+More details on these activities, including step-by-step instructions for creating a simple wallet smart contract (along with its source code), may be found in the HOWTO file included in this archive.
+
+7) Some documentation on the TON Blockchain and TON Virtual Machine may be found at the download page https://test.ton.org/download . Be aware that this documentation may not be completely in sync with the version currently employed by the Test Network, because some minor implementation details are likely to be changed during the final development and testing phases.
diff --git a/submodules/ton/tonlib-src/adnl/CMakeLists.txt b/submodules/ton/tonlib-src/adnl/CMakeLists.txt
new file mode 100644
index 0000000000..06254160e3
--- /dev/null
+++ b/submodules/ton/tonlib-src/adnl/CMakeLists.txt
@@ -0,0 +1,16 @@
+cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR)
+
+
+set(ADNL_LITE_SOURCE
+ adnl-ext-client.cpp
+ adnl-ext-connection.cpp
+ adnl-query.cpp
+
+ ${ADNL_LITE_HEADERS}
+)
+
+
+add_library(adnllite STATIC ${ADNL_LITE_SOURCE})
+
+target_include_directories(adnllite PUBLIC $)
+target_link_libraries(adnllite PUBLIC tdactor ton_crypto tl_lite_api tdnet keys )
diff --git a/submodules/ton/tonlib-src/adnl/adnl-ext-client.cpp b/submodules/ton/tonlib-src/adnl/adnl-ext-client.cpp
new file mode 100644
index 0000000000..efc71e6f27
--- /dev/null
+++ b/submodules/ton/tonlib-src/adnl/adnl-ext-client.cpp
@@ -0,0 +1,181 @@
+/*
+ This file is part of TON Blockchain Library.
+
+ TON Blockchain Library is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ TON Blockchain Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with TON Blockchain Library. If not, see .
+
+ Copyright 2017-2019 Telegram Systems LLP
+*/
+#include "adnl-ext-client.hpp"
+#include "adnl-ext-client.h"
+
+namespace ton {
+
+namespace adnl {
+
+void AdnlExtClientImpl::alarm() {
+ if (is_closing_) {
+ return;
+ }
+ if (conn_.empty() || !conn_.is_alive()) {
+ next_create_at_ = td::Timestamp::in(10.0);
+ alarm_timestamp() = next_create_at_;
+
+ auto fd = td::SocketFd::open(dst_addr_);
+ if (fd.is_error()) {
+ LOG(INFO) << "failed to connect to " << dst_addr_ << ": " << fd.move_as_error();
+ return;
+ }
+
+ class Cb : public AdnlExtConnection::Callback {
+ private:
+ td::actor::ActorId id_;
+
+ public:
+ void on_ready(td::actor::ActorId conn) {
+ td::actor::send_closure(id_, &AdnlExtClientImpl::conn_ready, conn);
+ }
+ void on_close(td::actor::ActorId conn) {
+ td::actor::send_closure(id_, &AdnlExtClientImpl::conn_stopped, conn);
+ }
+ Cb(td::actor::ActorId id) : id_(id) {
+ }
+ };
+
+ conn_ = td::actor::create_actor(td::actor::ActorOptions().with_name("outconn").with_poll(),
+ fd.move_as_ok(), std::make_unique(actor_id(this)), dst_,
+ local_id_, actor_id(this));
+ }
+}
+
+void AdnlExtClientImpl::hangup() {
+ conn_ = {};
+ is_closing_ = true;
+ ref_cnt_--;
+ try_stop();
+}
+
+void AdnlExtClientImpl::try_stop() {
+ if (is_closing_ && ref_cnt_ == 0 && out_queries_.empty()) {
+ stop();
+ }
+}
+
+td::Status AdnlOutboundConnection::process_custom_packet(td::BufferSlice &data, bool &processed) {
+ if (data.size() == 12) {
+ auto F = fetch_tl_object(data.clone(), true);
+ if (F.is_ok()) {
+ processed = true;
+ return td::Status::OK();
+ }
+ }
+ if (!local_id_.empty() && nonce_.size() != 0) {
+ auto F = fetch_tl_object(data.clone(), true);
+ if (F.is_ok()) {
+ auto f = F.move_as_ok();
+ if (f->nonce_.size() == 0 || f->nonce_.size() > 512) {
+ return td::Status::Error(ErrorCode::protoviolation, "bad nonce size");
+ }
+ td::SecureString ss{nonce_.size() + f->nonce_.size()};
+ ss.as_mutable_slice().copy_from(nonce_.as_slice());
+ ss.as_mutable_slice().remove_prefix(nonce_.size()).copy_from(f->nonce_.as_slice());
+
+ TRY_RESULT(dec, local_id_.create_decryptor());
+ TRY_RESULT(B, dec->sign(ss.as_slice()));
+
+ auto obj =
+ create_tl_object(local_id_.compute_public_key().tl(), std::move(B));
+ send(serialize_tl_object(obj, true));
+
+ nonce_.clear();
+
+ processed = true;
+ authorization_complete_ = true;
+ return td::Status::OK();
+ }
+ }
+ return td::Status::OK();
+}
+
+void AdnlOutboundConnection::start_up() {
+ AdnlExtConnection::start_up();
+ auto X = dst_.pubkey().create_encryptor();
+ if (X.is_error()) {
+ LOG(ERROR) << "failed to init encryptor: " << X.move_as_error();
+ stop();
+ return;
+ }
+ auto enc = X.move_as_ok();
+
+ td::BufferSlice d{256};
+ auto id = dst_.compute_short_id();
+ auto S = d.as_slice();
+ S.copy_from(id.as_slice());
+ S.remove_prefix(32);
+ S.truncate(256 - 64 - 32);
+ td::Random::secure_bytes(S);
+ init_crypto(S);
+
+ auto R = enc->encrypt(S);
+ if (R.is_error()) {
+ LOG(ERROR) << "failed to encrypt: " << R.move_as_error();
+ stop();
+ return;
+ }
+ auto data = R.move_as_ok();
+ LOG_CHECK(data.size() == 256 - 32) << "size=" << data.size();
+ S = d.as_slice();
+ S.remove_prefix(32);
+ CHECK(S.size() == data.size());
+ S.copy_from(data.as_slice());
+
+ send_uninit(std::move(d));
+
+ if (!local_id_.empty()) {
+ nonce_ = td::SecureString{32};
+ td::Random::secure_bytes(nonce_.as_mutable_slice());
+ auto obj = create_tl_object(td::BufferSlice{nonce_.as_slice()});
+ send(serialize_tl_object(obj, true));
+ }
+}
+
+void AdnlExtClientImpl::check_ready(td::Promise promise) {
+ if (conn_.empty() || !conn_.is_alive()) {
+ promise.set_error(td::Status::Error(ErrorCode::notready, "not ready"));
+ return;
+ }
+ td::actor::send_closure(td::actor::ActorId{conn_.get()}, &AdnlExtConnection::check_ready_async,
+ std::move(promise));
+}
+
+td::actor::ActorOwn AdnlExtClient::create(AdnlNodeIdFull dst, td::IPAddress dst_addr,
+ std::unique_ptr callback) {
+ return td::actor::create_actor("extclient", std::move(dst), dst_addr, std::move(callback));
+}
+
+td::actor::ActorOwn AdnlExtClient::create(AdnlNodeIdFull dst, PrivateKey local_id,
+ td::IPAddress dst_addr,
+ std::unique_ptr callback) {
+ return td::actor::create_actor("extclient", std::move(dst), std::move(local_id), dst_addr,
+ std::move(callback));
+}
+
+td::Status AdnlOutboundConnection::process_packet(td::BufferSlice data) {
+ TRY_RESULT(F, fetch_tl_object(std::move(data), true));
+ td::actor::send_closure(ext_client_, &AdnlExtClientImpl::answer_query, F->query_id_, std::move(F->answer_));
+ return td::Status::OK();
+}
+
+} // namespace adnl
+
+} // namespace ton
diff --git a/submodules/ton/tonlib-src/adnl/adnl-ext-client.h b/submodules/ton/tonlib-src/adnl/adnl-ext-client.h
new file mode 100644
index 0000000000..babccced5e
--- /dev/null
+++ b/submodules/ton/tonlib-src/adnl/adnl-ext-client.h
@@ -0,0 +1,48 @@
+/*
+ This file is part of TON Blockchain Library.
+
+ TON Blockchain Library is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ TON Blockchain Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with TON Blockchain Library. If not, see .
+
+ Copyright 2017-2019 Telegram Systems LLP
+*/
+#pragma once
+
+#include "adnl-node-id.hpp"
+#include "td/utils/port/IPAddress.h"
+
+namespace ton {
+
+namespace adnl {
+
+class AdnlExtClient : public td::actor::Actor {
+ public:
+ class Callback {
+ public:
+ virtual ~Callback() = default;
+ virtual void on_ready() = 0;
+ virtual void on_stop_ready() = 0;
+ };
+ virtual ~AdnlExtClient() = default;
+ virtual void check_ready(td::Promise promise) = 0;
+ virtual void send_query(std::string name, td::BufferSlice data, td::Timestamp timeout,
+ td::Promise promise) = 0;
+ static td::actor::ActorOwn create(AdnlNodeIdFull dst, td::IPAddress dst_addr,
+ std::unique_ptr callback);
+ static td::actor::ActorOwn create(AdnlNodeIdFull dst, PrivateKey local_id, td::IPAddress dst_addr,
+ std::unique_ptr callback);
+};
+
+} // namespace adnl
+
+} // namespace ton
diff --git a/submodules/ton/tonlib-src/adnl/adnl-ext-client.hpp b/submodules/ton/tonlib-src/adnl/adnl-ext-client.hpp
new file mode 100644
index 0000000000..95348135ca
--- /dev/null
+++ b/submodules/ton/tonlib-src/adnl/adnl-ext-client.hpp
@@ -0,0 +1,145 @@
+/*
+ This file is part of TON Blockchain Library.
+
+ TON Blockchain Library is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ TON Blockchain Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with TON Blockchain Library. If not, see .
+
+ Copyright 2017-2019 Telegram Systems LLP
+*/
+#pragma once
+
+#include "auto/tl/lite_api.h"
+#include "adnl-ext-connection.hpp"
+#include "tl-utils/lite-utils.hpp"
+#include "td/utils/Random.h"
+#include "adnl-query.h"
+#include "keys/encryptor.h"
+#include "adnl-ext-client.h"
+
+namespace ton {
+
+namespace adnl {
+
+class AdnlExtClientImpl;
+
+class AdnlOutboundConnection : public AdnlExtConnection {
+ private:
+ AdnlNodeIdFull dst_;
+ PrivateKey local_id_;
+ td::actor::ActorId ext_client_;
+ td::SecureString nonce_;
+ bool authorization_complete_ = false;
+
+ public:
+ AdnlOutboundConnection(td::SocketFd fd, std::unique_ptr callback, AdnlNodeIdFull dst,
+ td::actor::ActorId ext_client)
+ : AdnlExtConnection(std::move(fd), std::move(callback), true), dst_(std::move(dst)), ext_client_(ext_client) {
+ }
+ AdnlOutboundConnection(td::SocketFd fd, std::unique_ptr callback, AdnlNodeIdFull dst,
+ PrivateKey local_id, td::actor::ActorId ext_client)
+ : AdnlExtConnection(std::move(fd), std::move(callback), true)
+ , dst_(std::move(dst))
+ , local_id_(local_id)
+ , ext_client_(ext_client) {
+ }
+ td::Status process_packet(td::BufferSlice data) override;
+ td::Status process_init_packet(td::BufferSlice data) override {
+ UNREACHABLE();
+ }
+ td::Status process_custom_packet(td::BufferSlice &data, bool &processed) override;
+ void start_up() override;
+ bool authorized() const override {
+ return local_id_.empty() ? true : authorization_complete_;
+ }
+};
+
+class AdnlExtClientImpl : public AdnlExtClient {
+ public:
+ AdnlExtClientImpl(AdnlNodeIdFull dst_id, td::IPAddress dst_addr, std::unique_ptr callback)
+ : dst_(std::move(dst_id)), dst_addr_(dst_addr), callback_(std::move(callback)) {
+ }
+ AdnlExtClientImpl(AdnlNodeIdFull dst_id, PrivateKey local_id, td::IPAddress dst_addr,
+ std::unique_ptr callback)
+ : dst_(std::move(dst_id)), local_id_(local_id), dst_addr_(dst_addr), callback_(std::move(callback)) {
+ }
+
+ void start_up() override {
+ alarm();
+ }
+ void conn_stopped(td::actor::ActorId conn) {
+ if (!conn_.empty() && conn_.get() == conn) {
+ callback_->on_stop_ready();
+ conn_ = {};
+ alarm_timestamp() = next_create_at_;
+ try_stop();
+ }
+ }
+ void conn_ready(td::actor::ActorId conn) {
+ if (!conn_.empty() && conn_.get() == conn) {
+ callback_->on_ready();
+ }
+ }
+ void check_ready(td::Promise promise) override;
+ void send_query(std::string name, td::BufferSlice data, td::Timestamp timeout,
+ td::Promise promise) override {
+ auto P = [SelfId = actor_id(this)](AdnlQueryId id) {
+ td::actor::send_closure(SelfId, &AdnlExtClientImpl::destroy_query, id);
+ };
+ auto q_id = generate_next_query_id();
+ out_queries_.emplace(q_id, AdnlQuery::create(std::move(promise), std::move(P), name, timeout, q_id));
+ if (!conn_.empty()) {
+ auto obj = create_tl_object(q_id, std::move(data));
+ td::actor::send_closure(conn_, &AdnlOutboundConnection::send, serialize_tl_object(obj, true));
+ }
+ }
+ void destroy_query(AdnlQueryId id) {
+ out_queries_.erase(id);
+ try_stop();
+ }
+ void answer_query(AdnlQueryId id, td::BufferSlice data) {
+ auto it = out_queries_.find(id);
+ if (it != out_queries_.end()) {
+ td::actor::send_closure(it->second, &AdnlQuery::result, std::move(data));
+ }
+ }
+ void alarm() override;
+ void hangup() override;
+ AdnlQueryId generate_next_query_id() {
+ while (true) {
+ AdnlQueryId q_id = AdnlQuery::random_query_id();
+ if (out_queries_.count(q_id) == 0) {
+ return q_id;
+ }
+ }
+ }
+
+ private:
+ AdnlNodeIdFull dst_;
+ PrivateKey local_id_;
+ td::IPAddress dst_addr_;
+
+ std::unique_ptr callback_;
+
+ td::actor::ActorOwn conn_;
+ td::Timestamp next_create_at_ = td::Timestamp::now_cached();
+
+ std::map> out_queries_;
+
+ bool is_closing_{false};
+ td::uint32 ref_cnt_{1};
+ void try_stop();
+};
+
+} // namespace adnl
+
+} // namespace ton
diff --git a/submodules/ton/tonlib-src/adnl/adnl-ext-connection.cpp b/submodules/ton/tonlib-src/adnl/adnl-ext-connection.cpp
new file mode 100644
index 0000000000..ffae186b11
--- /dev/null
+++ b/submodules/ton/tonlib-src/adnl/adnl-ext-connection.cpp
@@ -0,0 +1,192 @@
+/*
+ This file is part of TON Blockchain Library.
+
+ TON Blockchain Library is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ TON Blockchain Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with TON Blockchain Library. If not, see .
+
+ Copyright 2017-2019 Telegram Systems LLP
+*/
+#include "adnl-ext-connection.hpp"
+
+namespace ton {
+
+namespace adnl {
+
+void AdnlExtConnection::send_uninit(td::BufferSlice data) {
+ buffered_fd_.output_buffer().append(std::move(data));
+ loop();
+}
+
+void AdnlExtConnection::send(td::BufferSlice data) {
+ LOG(DEBUG) << "sending packet of size " << data.size();
+ auto data_size = td::narrow_cast(data.size()) + 32 + 32;
+ if (data_size < 32 || data_size > (1 << 24)) {
+ LOG(WARNING) << "bad packet size " << data_size;
+ return;
+ }
+
+ td::BufferSlice d{data.size() + 4 + 32 + 32};
+ auto S = d.as_slice();
+
+ S.copy_from(td::Slice(reinterpret_cast(&data_size), 4));
+ S.remove_prefix(4);
+ auto Sc = S;
+ td::Random::secure_bytes(S.copy().truncate(32));
+ S.remove_prefix(32);
+ S.copy_from(data.as_slice());
+ S.remove_prefix(data.size());
+
+ td::sha256(Sc.truncate(32 + data.size()), S);
+
+ td::BufferSlice e{d.size()};
+
+ out_ctr_.encrypt(d.as_slice(), e.as_slice());
+
+ buffered_fd_.output_buffer().append(std::move(e));
+ loop();
+}
+
+td::Status AdnlExtConnection::receive(td::ChainBufferReader &input, bool &exit_loop) {
+ if (stop_read_) {
+ exit_loop = true;
+ return td::Status::OK();
+ }
+ if (input.size() > 0) {
+ received_bytes_ = 1;
+ }
+ if (inited_) {
+ if (!read_len_) {
+ if (input.size() < 4) {
+ exit_loop = true;
+ return td::Status::OK();
+ }
+
+ char x[4];
+ td::MutableSlice s{x, 4};
+ input.advance(4, s);
+
+ td::MutableSlice e{reinterpret_cast(&len_), 4};
+ in_ctr_.encrypt(s, e);
+ LOG(DEBUG) << "len=" << len_;
+ if (len_ > (1 << 24) || len_ < 32) {
+ return td::Status::Error("Too big packet");
+ }
+ read_len_ = true;
+ }
+ if (input.size() < len_) {
+ exit_loop = true;
+ return td::Status::OK();
+ }
+ auto data = input.cut_head(len_).move_as_buffer_slice();
+ update_timer();
+
+ td::BufferSlice dec_data{data.size()};
+ in_ctr_.encrypt(data.as_slice(), dec_data.as_slice());
+
+ exit_loop = false;
+ read_len_ = false;
+ len_ = 0;
+ return receive_packet(std::move(dec_data));
+ } else {
+ if (input.size() < 256) {
+ exit_loop = true;
+ return td::Status::OK();
+ }
+
+ auto data = input.cut_head(256).move_as_buffer_slice();
+ update_timer();
+
+ exit_loop = false;
+ return process_init_packet(std::move(data));
+ }
+}
+
+void AdnlExtConnection::loop() {
+ auto status = [&] {
+ TRY_STATUS(buffered_fd_.flush_read());
+ auto &input = buffered_fd_.input_buffer();
+ bool exit_loop = false;
+ while (!exit_loop) {
+ TRY_STATUS(receive(input, exit_loop));
+ }
+ TRY_STATUS(buffered_fd_.flush_write());
+ if (td::can_close(buffered_fd_)) {
+ stop();
+ }
+ return td::Status::OK();
+ }();
+ if (status.is_error()) {
+ LOG(ERROR) << "Client got error " << status;
+ stop();
+ } else {
+ send_ready();
+ }
+}
+
+td::Status AdnlExtConnection::init_crypto(td::Slice S) {
+ if (S.size() < 96) {
+ return td::Status::Error(ErrorCode::protoviolation, "too small enc data");
+ }
+ CHECK(S.size() >= 96);
+ td::SecureString s1(32), s2(32);
+ td::SecureString v1(16), v2(16);
+ s1.as_mutable_slice().copy_from(S.copy().truncate(32));
+ S.remove_prefix(32);
+ s2.as_mutable_slice().copy_from(S.copy().truncate(32));
+ S.remove_prefix(32);
+ v1.as_mutable_slice().copy_from(S.copy().truncate(16));
+ S.remove_prefix(16);
+ v2.as_mutable_slice().copy_from(S.copy().truncate(16));
+ S.remove_prefix(16);
+ if (is_client_) {
+ in_ctr_.init(s1, v1);
+ out_ctr_.init(s2, v2);
+ } else {
+ in_ctr_.init(s2, v2);
+ out_ctr_.init(s1, v1);
+ }
+ inited_ = true;
+ return td::Status::OK();
+}
+
+td::Status AdnlExtConnection::receive_packet(td::BufferSlice data) {
+ LOG(DEBUG) << "received packet of size " << data.size();
+ auto S = data.as_slice();
+ S.truncate(data.size() - 32);
+ auto D = data.as_slice();
+ D.remove_prefix(data.size() - 32);
+
+ if (td::sha256(S) != D) {
+ return td::Status::Error(ErrorCode::protoviolation, "sha256 mismatch");
+ }
+
+ data.truncate(data.size() - 32);
+ data.confirm_read(32);
+
+ if (data.size() == 0) {
+ // keepalive
+ return td::Status::OK();
+ }
+
+ bool processed = false;
+ TRY_STATUS(process_custom_packet(data, processed));
+ if (processed) {
+ return td::Status::OK();
+ }
+
+ return process_packet(std::move(data));
+}
+
+} // namespace adnl
+
+} // namespace ton
diff --git a/submodules/ton/tonlib-src/adnl/adnl-ext-connection.hpp b/submodules/ton/tonlib-src/adnl/adnl-ext-connection.hpp
new file mode 100644
index 0000000000..0b7f101201
--- /dev/null
+++ b/submodules/ton/tonlib-src/adnl/adnl-ext-connection.hpp
@@ -0,0 +1,163 @@
+/*
+ This file is part of TON Blockchain Library.
+
+ TON Blockchain Library is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ TON Blockchain Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with TON Blockchain Library. If not, see .
+
+ Copyright 2017-2019 Telegram Systems LLP
+*/
+#pragma once
+
+#include "td/net/TcpListener.h"
+#include "td/utils/crypto.h"
+#include "td/utils/BufferedFd.h"
+#include "tl-utils/tl-utils.hpp"
+#include "td/utils/Random.h"
+#include "common/errorcode.h"
+
+#include