From bddaa8cc602b839859d9911fa607cddd6f2778a0 Mon Sep 17 00:00:00 2001 From: Daniel Stolt Date: Sat, 22 Mar 2014 15:59:41 +0100 Subject: [PATCH] Added the Orchard.Azure.MediaServices module. --- .../Orchard.Azure.Web.csproj | 4 + src/Orchard.Azure/Orchard.Azure.sln | 7 + .../Content/MSAdaptiveStreamingPlugin.swf | Bin 0 -> 189963 bytes .../Content/Strobe Media Playback Notice.docx | Bin 0 -> 20602 bytes .../Content/StrobeMediaPlayback.swf | Bin 0 -> 275326 bytes .../Content/Web.config | 16 + .../Content/expressInstall.swf | Bin 0 -> 727 bytes .../Controllers/AssetController.cs | 185 + .../Controllers/JobController.cs | 256 + .../Controllers/MediaController.cs | 171 + .../Controllers/SettingsController.cs | 189 + .../Drivers/CloudVideoPartDriver.cs | 221 + .../Drivers/ThumbnailAssetDriver.cs | 19 + .../Drivers/VideoAssetDriver.cs | 23 + .../Events/FeatureEventHandler.cs | 115 + .../Handlers/CloudMediaSettingsPartHandler.cs | 10 + .../Handlers/CloudVideoPartHandler.cs | 57 + .../Helpers/AssetExtensions.cs | 11 + .../Helpers/BitExtensions.cs | 7 + .../Helpers/BooleanExtensions.cs | 7 + .../Helpers/EnumExtensions.cs | 13 + .../Helpers/FileSizeFormatProvider.cs | 64 + .../Helpers/NamespaceHelper.cs | 27 + .../Helpers/StringExtensions.cs | 7 + .../Images/Loader1.GIF | Bin 0 -> 11824 bytes .../Images/Thumbnail-Placeholder.psd | Bin 0 -> 77834 bytes .../Images/Thumbnail-Placeholder1.png | Bin 0 -> 11679 bytes .../Images/Thumbnail-Placeholder2.png | Bin 0 -> 5321 bytes .../Images/Web.config | 16 + .../Infrastructure/Assets/AssetDriver.cs | 53 + .../Assets/AssetDriverResult.cs | 8 + .../Infrastructure/Assets/IAssetDriver.cs | 11 + .../Mappings/PersistenceConfiguration.cs | 25 + .../Azure SDK for Media Services Notice.docx | Bin 0 -> 19754 bytes ....Practices.TransientFaultHandling.Core.dll | Bin 0 -> 32960 bytes ...soft.WindowsAzure.MediaServices.Client.dll | Bin 0 -> 202992 bytes .../Orchard.Azure.MediaServices/Migrations.cs | 95 + .../Models/Assets/Asset.cs | 139 + .../Models/Assets/AssetPublishState.cs | 40 + .../Models/Assets/AssetPublishStatus.cs | 13 + .../Models/Assets/AssetUploadState.cs | 55 + .../Models/Assets/AssetUploadStatus.cs | 14 + .../Models/Assets/DisplayLocator.cs | 13 + .../Models/Assets/DynamicVideoAsset.cs | 72 + .../Assets/EncoderMetadata/AssetFile.cs | 148 + .../Assets/EncoderMetadata/AudioTrack.cs | 83 + .../Models/Assets/EncoderMetadata/Metadata.cs | 61 + .../Assets/EncoderMetadata/VideoTrack.cs | 107 + .../Models/Assets/MezzanineAsset.cs | 6 + .../Models/Assets/PublishAction.cs | 13 + .../Models/Assets/SubtitleAsset.cs | 11 + .../Models/Assets/ThumbnailAsset.cs | 5 + .../Models/Assets/VideoAsset.cs | 47 + .../Models/CloudMediaSettingsPart.cs | 102 + .../Models/CloudVideoPart.cs | 35 + .../Models/Jobs/FinishedJobContext.cs | 10 + .../Models/Jobs/Job.cs | 109 + .../Models/Jobs/JobStatus.cs | 13 + .../Models/Jobs/Task.cs | 60 + .../Models/Records/AssetRecord.cs | 46 + .../Models/Records/JobRecord.cs | 28 + .../Models/Records/TaskRecord.cs | 20 + .../Orchard.Azure.MediaServices/Module.txt | 13 + .../Navigation/AdminMenu.cs | 24 + .../Navigation/MediaMenu.cs | 13 + .../Orchard.Azure.MediaServices.csproj | 614 ++ .../Permissions.cs | 42 + .../Placement.info | 24 + .../Properties/AssemblyInfo.cs | 37 + .../Orchard.Azure.MediaServices/Readme.txt | 105 + .../Scripts/Web.config | 16 + .../Scripts/cloudmedia-admin-common.js | 25 + .../Scripts/cloudmedia-admin-common.js.map | 1 + .../Scripts/cloudmedia-admin-common.ts | 12 + .../Scripts/cloudmedia-admin-job.js | 2 + .../Scripts/cloudmedia-admin-job.js.map | 1 + .../Scripts/cloudmedia-admin-job.ts | 1 + .../Scripts/cloudmedia-admin-settings.js | 82 + .../Scripts/cloudmedia-admin-settings.js.map | 1 + .../Scripts/cloudmedia-admin-settings.ts | 85 + .../Scripts/cloudmedia-autorefresh.js | 34 + .../Scripts/cloudmedia-autorefresh.js.map | 1 + .../Scripts/cloudmedia-autorefresh.ts | 24 + .../Scripts/cloudmedia-edit-asset-video.js | 45 + .../cloudmedia-edit-asset-video.js.map | 1 + .../Scripts/cloudmedia-edit-asset-video.ts | 33 + .../Scripts/cloudmedia-edit-asset.js | 25 + .../Scripts/cloudmedia-edit-asset.js.map | 1 + .../Scripts/cloudmedia-edit-asset.ts | 15 + .../cloudmedia-edit-cloudvideopart-direct.js | 313 + ...oudmedia-edit-cloudvideopart-direct.js.map | 1 + .../cloudmedia-edit-cloudvideopart-direct.ts | 302 + .../cloudmedia-edit-cloudvideopart-proxied.js | 170 + ...udmedia-edit-cloudvideopart-proxied.js.map | 1 + .../cloudmedia-edit-cloudvideopart-proxied.ts | 159 + .../Scripts/cloudmedia-edit-cloudvideopart.js | 38 + .../cloudmedia-edit-cloudvideopart.js.map | 1 + .../Scripts/cloudmedia-edit-cloudvideopart.ts | 28 + .../cloudmedia-metadata-cloudvideopart.js | 60 + .../cloudmedia-metadata-cloudvideopart.js.map | 1 + .../cloudmedia-metadata-cloudvideopart.ts | 60 + .../Scripts/cloudmedia-videoplayer-data.js | 23 + .../cloudmedia-videoplayer-data.js.map | 1 + .../Scripts/cloudmedia-videoplayer-data.ts | 81 + .../cloudmedia-videoplayer-injectors-alt.js | 63 + ...loudmedia-videoplayer-injectors-alt.js.map | 1 + .../cloudmedia-videoplayer-injectors-alt.ts | 48 + .../cloudmedia-videoplayer-injectors-dash.js | 87 + ...oudmedia-videoplayer-injectors-dash.js.map | 1 + .../cloudmedia-videoplayer-injectors-dash.ts | 74 + .../cloudmedia-videoplayer-injectors-html5.js | 125 + ...udmedia-videoplayer-injectors-html5.js.map | 1 + .../cloudmedia-videoplayer-injectors-html5.ts | 95 + .../cloudmedia-videoplayer-injectors-smp.js | 109 + ...loudmedia-videoplayer-injectors-smp.js.map | 1 + .../cloudmedia-videoplayer-injectors-smp.ts | 108 + .../cloudmedia-videoplayer-injectors.js | 86 + .../cloudmedia-videoplayer-injectors.js.map | 1 + .../cloudmedia-videoplayer-injectors.ts | 68 + .../Scripts/cloudmedia-videoplayer-main.js | 55 + .../cloudmedia-videoplayer-main.js.map | 1 + .../Scripts/cloudmedia-videoplayer-main.ts | 48 + .../Scripts/lib/MPEG Dash Notice.docx | Bin 0 -> 20020 bytes .../Scripts/lib/console-shim.js | 213 + .../Scripts/lib/console-shim.min.js | 12 + .../Scripts/lib/dash.all.js | 5 + .../Scripts/lib/dash.min.js | 4 + .../Scripts/lib/jquery.blockUI.js | 619 ++ .../Scripts/lib/jquery.fileupload-process.js | 172 + .../Scripts/lib/jquery.fileupload-validate.js | 119 + .../Scripts/lib/jquery.fileupload.js | 1426 ++++ .../Scripts/lib/jstree.js | 5799 +++++++++++++++++ .../Scripts/lib/jstree.min.js | 4 + .../Scripts/lib/moment.js | 2428 +++++++ .../Scripts/lib/moment.min.js | 6 + .../Scripts/lib/swfobject.js | 4 + .../Scripts/lib/underscore.js | 1344 ++++ .../Scripts/lib/underscore.min.js | 6 + .../Scripts/lib/uri.js | 53 + .../Scripts/typings/jquery.d.ts | 1537 +++++ .../Scripts/typings/jqueryui.d.ts | 958 +++ .../Scripts/typings/knockout.d.ts | 515 ++ .../Scripts/typings/moment.d.ts | 330 + .../Scripts/typings/underscore.d.ts | 2979 +++++++++ .../Scripts/typings/uri.d.ts | 186 + .../Services/Assets/AssetFactory.cs | 11 + .../Services/Assets/AssetManager.cs | 307 + .../Services/Assets/AssetStorageProvider.cs | 34 + .../Services/Assets/AssetUploader.cs | 204 + .../Services/Assets/IAssetFactory.cs | 8 + .../Services/Assets/IAssetManager.cs | 23 + .../Services/Assets/IAssetStorageProvider.cs | 8 + .../Services/Jobs/IJobManager.cs | 21 + .../Services/Jobs/JobManager.cs | 165 + .../Services/Jobs/JobProcessor.cs | 211 + .../Services/Rendering/CloudVideoFilter.cs | 117 + .../Services/Tasks/ITaskProvider.cs | 70 + .../Providers/CreateThumbnailTaskProvider.cs | 114 + .../Tasks/Providers/EncodeTaskProvider.cs | 100 + .../Tasks/Providers/EncryptTaskProvider.cs | 121 + .../Services/Tasks/TaskConfiguration.cs | 24 + .../Services/Tasks/TaskConnections.cs | 33 + .../Services/Tasks/TaskInput.cs | 43 + .../Services/Tasks/TaskOutput.cs | 43 + .../Services/Tasks/TaskProviderBase.cs | 52 + .../Services/TempFiles/ITempFileManager.cs | 17 + .../TempFiles/LocalTempFileManager.cs | 61 + .../Services/Wams/IWamsClient.cs | 25 + .../Services/Wams/MediaProcessorName.cs | 14 + .../Services/Wams/MissingSettingsBanner.cs | 33 + .../Services/Wams/WamsAssetInfo.cs | 6 + .../Services/Wams/WamsClient.cs | 378 ++ .../Services/Wams/WamsLocatorCategory.cs | 11 + .../Services/Wams/WamsLocatorInfo.cs | 11 + .../Services/Wams/WamsLocators.cs | 13 + .../Services/Wams/WamsUploadProgressInfo.cs | 13 + .../Shapes/CloudVideoPlayerShape.cs | 102 + .../Styles/Images/AssetTreeView.png | Bin 0 -> 9595 bytes .../Styles/Lib/JsTree/themes/default/32px.png | Bin 0 -> 3121 bytes .../Styles/Lib/JsTree/themes/default/40px.png | Bin 0 -> 1037 bytes .../Lib/JsTree/themes/default/style.css | 916 +++ .../Lib/JsTree/themes/default/style.min.css | 1 + .../Lib/JsTree/themes/default/throbber.gif | Bin 0 -> 1720 bytes .../Styles/Web.config | 16 + .../Styles/cloudmedia-admin-asset.css | 42 + .../Styles/cloudmedia-admin-asset.less | 55 + .../Styles/cloudmedia-admin-asset.min.css | 1 + .../Styles/cloudmedia-admin-job.css | 1 + .../Styles/cloudmedia-admin-job.less | 1 + .../Styles/cloudmedia-admin-job.min.css | 1 + .../Styles/cloudmedia-admin-selecttask.css | 11 + .../Styles/cloudmedia-admin-selecttask.less | 13 + .../cloudmedia-admin-selecttask.min.css | 1 + .../Styles/cloudmedia-admin-settings.css | 35 + .../Styles/cloudmedia-admin-settings.less | 27 + .../Styles/cloudmedia-admin-settings.min.css | 1 + .../Styles/cloudmedia-edit-assets.css | 28 + .../Styles/cloudmedia-edit-assets.less | 30 + .../Styles/cloudmedia-edit-assets.min.css | 1 + .../Styles/cloudmedia-edit-cloudvideopart.css | 90 + .../cloudmedia-edit-cloudvideopart.less | 99 + .../cloudmedia-edit-cloudvideopart.min.css | 1 + .../Styles/cloudmedia-edit-jobs.css | 11 + .../Styles/cloudmedia-edit-jobs.less | 11 + .../Styles/cloudmedia-edit-jobs.min.css | 1 + .../Styles/cloudmedia-progress.css | 10 + .../Styles/cloudmedia-progress.less | 13 + .../Styles/cloudmedia-progress.min.css | 1 + .../Styles/cloudmedia-tabs.css | 25 + .../Styles/cloudmedia-tabs.less | 28 + .../Styles/cloudmedia-tabs.min.css | 1 + .../Styles/cloudmedia-videoplayer.css | 20 + .../Styles/cloudmedia-videoplayer.less | 22 + .../Styles/cloudmedia-videoplayer.min.css | 1 + .../Styles/menu.cloudmedia-mediaproviders.css | 15 + .../menu.cloudmedia-mediaproviders.less | 16 + .../menu.cloudmedia-mediaproviders.min.css | 1 + .../Common/PartFactory.cs | 24 + .../Common/StubRepository.cs | 64 + .../Microsoft.CloudMedia.Tests.csproj | 164 + .../Properties/AssemblyInfo.cs | 34 + .../Services/AzureMediaManagerTests.cs | 70 + .../ViewModels/Jobs/JobViewModel.cs | 10 + .../ViewModels/Media/AssetUploadViewModel.cs | 7 + .../ViewModels/Media/AssetViewModel.cs | 16 + .../Media/CloudVideoPartViewModel.cs | 21 + .../Media/TemporaryFileViewModel.cs | 7 + .../ViewModels/Media/WamsAssetViewModel.cs | 7 + .../EncodingPresetsSettingsViewModel.cs | 8 + .../Settings/EncryptionSettingsViewModel.cs | 6 + .../Settings/GeneralSettingsViewModel.cs | 15 + .../ViewModels/Settings/SettingsViewModel.cs | 8 + .../SubtitleLanguagesSettingsViewModel.cs | 7 + .../Tasks/CreateThumbnailViewModel.cs | 54 + .../ViewModels/Tasks/EncodeViewModel.cs | 18 + .../ViewModels/Tasks/EncryptViewModel.cs | 13 + .../Views/Asset/Edit.cshtml | 47 + .../Views/CloudVideo.Edit.Assets.cshtml | 168 + .../Views/CloudVideo.Edit.Jobs.cshtml | 96 + .../CloudVideo.Edit.UnpublishButton.cshtml | 8 + .../Views/CloudVideoEditor.Direct.cshtml | 99 + .../Views/CloudVideoEditor.Proxied.cshtml | 73 + .../Views/CloudVideoEditor.cshtml | 12 + .../Views/CloudVideoPlayer.cshtml | 42 + .../EditorTemplates/Asset.Edit.General.cshtml | 19 + .../Asset.Edit.Locators.cshtml | 24 + .../Assets/Thumbnail.Preview.cshtml | 6 + .../EditorTemplates/Assets/Video.Files.cshtml | 72 + .../Assets/Video.Preview.cshtml | 14 + .../EncodingSettingsViewModel.cshtml | 39 + .../EncryptionSettingsViewModel.cshtml | 12 + .../GeneralSettingsViewModel.cshtml | 54 + .../EditorTemplates/Parts/CloudVideo.cshtml | 58 + .../SubtitleLanguagesSettingsViewModel.cshtml | 34 + .../TaskSettings/Encode.cshtml | 29 + .../TaskSettings/Encrypt.cshtml | 48 + .../TaskSettings/Thumbnail.cshtml | 50 + .../Views/FrameBuster.cshtml | 7 + .../Views/Job/Create.cshtml | 69 + .../Views/Job/Index.cshtml | 9 + .../Views/Job/SelectTask.cshtml | 19 + .../Views/Media-CloudVideo.Thumbnail.cshtml | 23 + .../Views/Media/Edit.cshtml | 4 + .../Views/Media/Import.cshtml | 4 + .../Views/OpenJobsTable.cshtml | 75 + .../Views/Parts/CloudVideo.Metadata.cshtml | 30 + .../Views/Parts/CloudVideo.Raw.cshtml | 19 + .../Views/Parts/CloudVideo.Summary.cshtml | 11 + .../Parts/CloudVideo.SummaryAdmin.cshtml | 1 + .../Views/Parts/CloudVideo.cshtml | 10 + .../Views/Settings/Index.cshtml | 46 + .../Views/TaskSettingsEditor.cshtml | 8 + .../Orchard.Azure.MediaServices/Web.config | 70 + src/Orchard.sln | 14 + 274 files changed, 30990 insertions(+) create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Content/MSAdaptiveStreamingPlugin.swf create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Content/Strobe Media Playback Notice.docx create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Content/StrobeMediaPlayback.swf create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Content/Web.config create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Content/expressInstall.swf create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Controllers/AssetController.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Controllers/JobController.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Controllers/MediaController.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Controllers/SettingsController.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Drivers/CloudVideoPartDriver.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Drivers/ThumbnailAssetDriver.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Drivers/VideoAssetDriver.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Events/FeatureEventHandler.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Handlers/CloudMediaSettingsPartHandler.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Handlers/CloudVideoPartHandler.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/AssetExtensions.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/BitExtensions.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/BooleanExtensions.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/EnumExtensions.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/FileSizeFormatProvider.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/NamespaceHelper.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/StringExtensions.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Images/Loader1.GIF create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Images/Thumbnail-Placeholder.psd create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Images/Thumbnail-Placeholder1.png create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Images/Thumbnail-Placeholder2.png create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Images/Web.config create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Infrastructure/Assets/AssetDriver.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Infrastructure/Assets/AssetDriverResult.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Infrastructure/Assets/IAssetDriver.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Infrastructure/Mappings/PersistenceConfiguration.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Lib/Azure SDK for Media Services Notice.docx create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Lib/Microsoft.Practices.TransientFaultHandling.Core.dll create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Lib/Microsoft.WindowsAzure.MediaServices.Client.dll create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Migrations.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/Asset.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/AssetPublishState.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/AssetPublishStatus.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/AssetUploadState.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/AssetUploadStatus.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/DisplayLocator.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/DynamicVideoAsset.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/EncoderMetadata/AssetFile.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/EncoderMetadata/AudioTrack.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/EncoderMetadata/Metadata.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/EncoderMetadata/VideoTrack.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/MezzanineAsset.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/PublishAction.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/SubtitleAsset.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/ThumbnailAsset.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/VideoAsset.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/CloudMediaSettingsPart.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/CloudVideoPart.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Jobs/FinishedJobContext.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Jobs/Job.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Jobs/JobStatus.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Jobs/Task.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Records/AssetRecord.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Records/JobRecord.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Records/TaskRecord.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Module.txt create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Navigation/AdminMenu.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Navigation/MediaMenu.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Orchard.Azure.MediaServices.csproj create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Permissions.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Placement.info create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Properties/AssemblyInfo.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Readme.txt create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/Web.config create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-common.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-common.js.map create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-common.ts create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-job.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-job.js.map create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-job.ts create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-settings.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-settings.js.map create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-settings.ts create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-autorefresh.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-autorefresh.js.map create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-autorefresh.ts create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset-video.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset-video.js.map create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset-video.ts create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset.js.map create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset.ts create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-direct.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-direct.js.map create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-direct.ts create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-proxied.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-proxied.js.map create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-proxied.ts create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart.js.map create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart.ts create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-metadata-cloudvideopart.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-metadata-cloudvideopart.js.map create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-metadata-cloudvideopart.ts create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-data.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-data.js.map create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-data.ts create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-alt.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-alt.js.map create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-alt.ts create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-dash.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-dash.js.map create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-dash.ts create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-html5.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-html5.js.map create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-html5.ts create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-smp.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-smp.js.map create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-smp.ts create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors.js.map create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors.ts create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-main.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-main.js.map create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-main.ts create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/lib/MPEG Dash Notice.docx create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/lib/console-shim.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/lib/console-shim.min.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/lib/dash.all.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/lib/dash.min.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/lib/jquery.blockUI.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/lib/jquery.fileupload-process.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/lib/jquery.fileupload-validate.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/lib/jquery.fileupload.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/lib/jstree.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/lib/jstree.min.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/lib/moment.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/lib/moment.min.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/lib/swfobject.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/lib/underscore.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/lib/underscore.min.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/lib/uri.js create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/typings/jquery.d.ts create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/typings/jqueryui.d.ts create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/typings/knockout.d.ts create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/typings/moment.d.ts create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/typings/underscore.d.ts create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/typings/uri.d.ts create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Assets/AssetFactory.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Assets/AssetManager.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Assets/AssetStorageProvider.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Assets/AssetUploader.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Assets/IAssetFactory.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Assets/IAssetManager.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Assets/IAssetStorageProvider.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Jobs/IJobManager.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Jobs/JobManager.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Jobs/JobProcessor.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Rendering/CloudVideoFilter.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Tasks/ITaskProvider.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Tasks/Providers/CreateThumbnailTaskProvider.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Tasks/Providers/EncodeTaskProvider.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Tasks/Providers/EncryptTaskProvider.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Tasks/TaskConfiguration.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Tasks/TaskConnections.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Tasks/TaskInput.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Tasks/TaskOutput.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Tasks/TaskProviderBase.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/TempFiles/ITempFileManager.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/TempFiles/LocalTempFileManager.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Wams/IWamsClient.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Wams/MediaProcessorName.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Wams/MissingSettingsBanner.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Wams/WamsAssetInfo.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Wams/WamsClient.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Wams/WamsLocatorCategory.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Wams/WamsLocatorInfo.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Wams/WamsLocators.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Services/Wams/WamsUploadProgressInfo.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Shapes/CloudVideoPlayerShape.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/Images/AssetTreeView.png create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/Lib/JsTree/themes/default/32px.png create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/Lib/JsTree/themes/default/40px.png create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/Lib/JsTree/themes/default/style.css create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/Lib/JsTree/themes/default/style.min.css create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/Lib/JsTree/themes/default/throbber.gif create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/Web.config create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-admin-asset.css create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-admin-asset.less create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-admin-asset.min.css create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-admin-job.css create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-admin-job.less create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-admin-job.min.css create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-admin-selecttask.css create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-admin-selecttask.less create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-admin-selecttask.min.css create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-admin-settings.css create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-admin-settings.less create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-admin-settings.min.css create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-edit-assets.css create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-edit-assets.less create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-edit-assets.min.css create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-edit-cloudvideopart.css create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-edit-cloudvideopart.less create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-edit-cloudvideopart.min.css create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-edit-jobs.css create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-edit-jobs.less create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-edit-jobs.min.css create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-progress.css create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-progress.less create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-progress.min.css create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-tabs.css create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-tabs.less create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-tabs.min.css create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-videoplayer.css create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-videoplayer.less create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-videoplayer.min.css create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/menu.cloudmedia-mediaproviders.css create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/menu.cloudmedia-mediaproviders.less create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/menu.cloudmedia-mediaproviders.min.css create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Tests/Microsoft.CloudMedia.Tests/Common/PartFactory.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Tests/Microsoft.CloudMedia.Tests/Common/StubRepository.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Tests/Microsoft.CloudMedia.Tests/Microsoft.CloudMedia.Tests.csproj create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Tests/Microsoft.CloudMedia.Tests/Properties/AssemblyInfo.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Tests/Microsoft.CloudMedia.Tests/Services/AzureMediaManagerTests.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/ViewModels/Jobs/JobViewModel.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/ViewModels/Media/AssetUploadViewModel.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/ViewModels/Media/AssetViewModel.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/ViewModels/Media/CloudVideoPartViewModel.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/ViewModels/Media/TemporaryFileViewModel.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/ViewModels/Media/WamsAssetViewModel.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/ViewModels/Settings/EncodingPresetsSettingsViewModel.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/ViewModels/Settings/EncryptionSettingsViewModel.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/ViewModels/Settings/GeneralSettingsViewModel.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/ViewModels/Settings/SettingsViewModel.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/ViewModels/Settings/SubtitleLanguagesSettingsViewModel.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/ViewModels/Tasks/CreateThumbnailViewModel.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/ViewModels/Tasks/EncodeViewModel.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/ViewModels/Tasks/EncryptViewModel.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Asset/Edit.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideo.Edit.Assets.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideo.Edit.Jobs.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideo.Edit.UnpublishButton.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideoEditor.Direct.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideoEditor.Proxied.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideoEditor.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideoPlayer.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/Asset.Edit.General.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/Asset.Edit.Locators.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/Assets/Thumbnail.Preview.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/Assets/Video.Files.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/Assets/Video.Preview.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/EncodingSettingsViewModel.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/EncryptionSettingsViewModel.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/GeneralSettingsViewModel.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/Parts/CloudVideo.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/SubtitleLanguagesSettingsViewModel.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/TaskSettings/Encode.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/TaskSettings/Encrypt.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/TaskSettings/Thumbnail.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/FrameBuster.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Job/Create.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Job/Index.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Job/SelectTask.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Media-CloudVideo.Thumbnail.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Media/Edit.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Media/Import.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/OpenJobsTable.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Parts/CloudVideo.Metadata.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Parts/CloudVideo.Raw.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Parts/CloudVideo.Summary.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Parts/CloudVideo.SummaryAdmin.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Parts/CloudVideo.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Settings/Index.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/TaskSettingsEditor.cshtml create mode 100644 src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Web.config diff --git a/src/Orchard.Azure/Orchard.Azure.Web/Orchard.Azure.Web.csproj b/src/Orchard.Azure/Orchard.Azure.Web/Orchard.Azure.Web.csproj index 990ccce11..5a1c349de 100644 --- a/src/Orchard.Azure/Orchard.Azure.Web/Orchard.Azure.Web.csproj +++ b/src/Orchard.Azure/Orchard.Azure.Web/Orchard.Azure.Web.csproj @@ -249,6 +249,10 @@ {66FCCD76-2761-47E3-8D11-B45D0001DDAA} Orchard.Autoroute + + {14a96b1a-9dc9-44c8-a675-206329e15263} + Orchard.Azure.MediaServices + {cbc7993c-57d8-4a6c-992c-19e849dfe71d} Orchard.Azure diff --git a/src/Orchard.Azure/Orchard.Azure.sln b/src/Orchard.Azure/Orchard.Azure.sln index 12937bc1a..6a0a74a5e 100644 --- a/src/Orchard.Azure/Orchard.Azure.sln +++ b/src/Orchard.Azure/Orchard.Azure.sln @@ -143,6 +143,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.SecureSocketsLayer" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.Templates", "..\Orchard.Web\Modules\Orchard.Templates\Orchard.Templates.csproj", "{10AB3CE2-A720-467F-9EC8-EBB4BAC9A1C9}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.Azure.MediaServices", "..\Orchard.Web\Modules\Orchard.Azure.MediaServices\Orchard.Azure.MediaServices.csproj", "{14A96B1A-9DC9-44C8-A675-206329E15263}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -409,6 +411,10 @@ Global {10AB3CE2-A720-467F-9EC8-EBB4BAC9A1C9}.Debug|Any CPU.Build.0 = Debug|Any CPU {10AB3CE2-A720-467F-9EC8-EBB4BAC9A1C9}.Release|Any CPU.ActiveCfg = Release|Any CPU {10AB3CE2-A720-467F-9EC8-EBB4BAC9A1C9}.Release|Any CPU.Build.0 = Release|Any CPU + {14A96B1A-9DC9-44C8-A675-206329E15263}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {14A96B1A-9DC9-44C8-A675-206329E15263}.Debug|Any CPU.Build.0 = Debug|Any CPU + {14A96B1A-9DC9-44C8-A675-206329E15263}.Release|Any CPU.ActiveCfg = Release|Any CPU + {14A96B1A-9DC9-44C8-A675-206329E15263}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -468,6 +474,7 @@ Global {7528BF74-25C7-4ABE-883A-443B4EEC4776} = {8E3DE014-9B28-4B32-8AC1-B2BE404E9B2D} {36B82383-D69E-4897-A24A-648BABDF80EC} = {8E3DE014-9B28-4B32-8AC1-B2BE404E9B2D} {10AB3CE2-A720-467F-9EC8-EBB4BAC9A1C9} = {8E3DE014-9B28-4B32-8AC1-B2BE404E9B2D} + {14A96B1A-9DC9-44C8-A675-206329E15263} = {8E3DE014-9B28-4B32-8AC1-B2BE404E9B2D} {33B1BC8D-E292-4972-A363-22056B207156} = {75E7476C-C05B-4C41-8E38-081D3EB55659} {CB70A642-8CEC-4DDE-8C9F-AD08900EC98D} = {84650275-884D-4CBB-9CC0-67553996E211} {9916839C-39FC-4CEB-A5AF-89CA7E87119F} = {F2AB7512-139A-420F-AE3A-9ED22CA52CE1} diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Content/MSAdaptiveStreamingPlugin.swf b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Content/MSAdaptiveStreamingPlugin.swf new file mode 100644 index 0000000000000000000000000000000000000000..551a09e15dd73e0c4fda27ba44e7013a96f2e35d GIT binary patch literal 189963 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

MQ4Q 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

pRFw?cqtohR(HLu~Cn_+B&&prN@YTl1U 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 literal 0 HcmV?d00001 diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Content/StrobeMediaPlayback.swf b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Content/StrobeMediaPlayback.swf new file mode 100644 index 0000000000000000000000000000000000000000..487d91c1f1ac0523b837fbb737c5cbf841d844c0 GIT binary patch literal 275326 zcmV(yKpHov@FQzx z*38^%X03ZoCW(N32>{-D0K_4{T0k5Ca6;%V1OU^xpb!(H^*&VMp~$Fs6Xqu~$)DE^7+QStK1<~s_kgX06^!ec1m z(NQSYXa9ic1d5rm^50s60{^8nCLu0zM`ci;W^iQiq2MS=yr#B>Hd9ehph-w{+#!F8 zxqnPdWO$%IOPyw-dVE-P;K3vQhlABaBK_mTOf~;qk=2G0PKgXQCsE>}1A-lcgTnm@ zk^V^m{(%Q~D*mICRWIn@WBj`|YNtBtzt#V*wOFlU5&|N___NPSu$BO?fVpWUuj|xrj4-GcAaoQ>S*XNx<`cs0<9sT1_Iy!17 z9W8C0e+-HxHP!qdNdGNi8qXY9^RKd*0xKxfuKN*e%)cDWH#>|#0z0qQ1~?M~rnMP} z|9}(tjD&zAf7A<3Y$cAz0G>Q5NGt^qpsTCf0pVq~9vd6`Bd7l`uR`gjVBDA6*9JRo zKFg;55%go0K|uzD_n(?jB>$**W=nQp22eaX!q#~x$PuZ)DZ8<~55xfRGJq@$kSn;w zfXWIAdMDTLmO1Du3{1HWf>hA1cvA=z_d^nK`hgflHw`BhvHFoQGwBMG0|~M1cNkC7Lk!CVt8m6 zB_2f#jt`DI%oKtX@Cv3*HgM!8_puZ0aj19lQ1Ai#VZOk>UZyc9|H$yrC^Nap;1G(O zxoJpr6a^LH9~f*V_us}Mhl&qRW(u`+#1DNJzb;5kan1j=TY=H2u(fmQ~XPFl`&(wVh z2RKMR2m(yl%gW0Bup|FAm^2f%zn|>?cmfXAQ{D_s8@&;?QlS4JV!tOhb<@c(boc4J zrxu}pgUPdcatFh;nEHL0T44W4KZK>9g^irP8Wp&Q@ZyM_7Bo~XPN$=`Z)3Y=N~!kBjUST^6uYxyZC|n zcMmK%tA~F)0SD{(pL?j_+{FS5!p>9+1?*55^Dpzs&GC;X_yf0P7IQL7GdVaQJC)9H zC_$MkL9oyQ91af(j<$;mi3XQAl-R&7Ao)m)ukv3~tH|j1V9NvwB{~XVnQHdJm6-br z4q!q+3?$A5`ia5P1b&5PwZi<_Pps1~a3?g!i%SmK8HRq9;XjovuA{PHsB7(hETr_< zqLS5b2?36%KaD?R%9ihvxP!U;erRetm^^*JPfS<$ zZZAuVbVH>Ty$n8OXX~U*R)c;#C+;0!u03`uCqktDIHe1_37NoiFKzu1H@La0*D=Gw zVRP^8N0(~PCzMtlQq6K>+j#kVS5UEWTD3-UqF|s1XQJ-v^b5bR`I!8wP|d7M4;REf z7Wn_({lfq3^Oir{pDv$Va^_rB%D-NrfWoe_{skyVC zsGHx0v=;eQ%s2)7dHa&?9q)&7H!E;l>zNP?LGrVKo2~C!_QKCI5kmkN7Zb3=+2`$7 ziWdJg+-CpCQE6gh9D9n-`KivYKYd)M`JĬ=*i5ZnDU#!0M|tI_R0?{_bLTg>xR zIht>(lNb{(c>B)*)d3F|U*sc>>>4)Pl!Q}%PQ1}I?dOVR%i{QGu{1r9niR_|Grz4P zIql9_Z*kNcn}12D<@KLG;(ijtcXuJSBnKlb^tAmJee&lP%Xv zyMFR zjKs$BqC(_VHSY7JSiW{q=5u-6;-aMk0qR|sR`N`oC#Z|+S=L=1Oo8_o3MQTfQy^ksWT7o zc)Yi|n%c0KxcGN!#B|mAeeGK)O-(*=Tec^8om46nML4tjeq`J$Lm@E^)Ww40;t+aG zjXV^|)>|edp)`hkeYrM0Jslez9c^Q7ZjPTj-Fg)Cx>E5`cie7vSZVJTeqoAO=o|V3twmMbzT6YfP>8PcjaCVWLq&R zTvlm8LTT-R^v#@zq|` z8>@o)dLavyT3uPm=}WLiTDuI||C#u+>OU77-t_L`%!xuxg_ICuEg9WEd%NN}_|9G% z5&8gq4a}+1AJ~4ut3Fs6ny-#>&Czp}eFL{&vkeXiqPRJg)8)A5*lSeH`aV%&?!VXt zeF=6!gk<&hLJm~xo+u(|QpSA$@ZvcB8sFHywa?bJLE40(G83dD5HN6b`Q6<0XIG=< z`XbAnzV7MyAu+e+`cVgXKolTujYkw@Wn~r7=(Xwd`UhL)=jRzR!vlRWi$gCBBBx{6 zUo5|$?npEK4V!~C#$7@!sIDB_Z5TCn@)qoiZ-kY$op-yR1;!}gHzR#Bm7El*@64 z^mKVSC_**wC`V4)J>~BT_m~Btxij!(Qi}P*p3F=BuKt71#+FGWbK$detaCuX(m|Em zQ&Url{{H^-#D_lp5pxaVKV?4^!~5Ne)+Qz<*0Zv*D28#Ew8uzFc>D)C?aZO)SAzr0 zX38VxLUq18^sdZ*b*>2VO{%lK%_g8h=bOXbo1R+&ms(DDU%U3^=Z_!t^g9Q((9_9^ z`H*F{6^)~vIx{a{o)Fwp@C6yJRj5fPG~6m-8cTAUS~Cudp0a^)!-YwNIJvr9)GwNaSM!Iew9=;))H z-22svBYQIM9pqaU8f|vJ+|z&bJMm$nm)8ZUEd`grCW`ri{=~uH)535(~Cchv3^-a4Z zI~(3$n*8~m;;UD$9vKDeN$9fYG)#UEdS_~2@S4V42ysat79gUfT^~v}H#WL9wtrA8 zwtUx)&fhxmr{?tO(=okA-b2SZ1uX7Kbv&A`W+cRCE zK9f(M-l^;EcJ=prdGlD=xU%Po$l;WW1KMuGj~~~5N_st3W_abwl^Ek=Kdz|O&s@PGd4P8?~I!+HVoN4sww(? zZ1TGr8eL`)8>@Ym-qO;N#6@Klx&qSo2MEpcxIY+$o*7xFx-#@>~9JmtZV*J{4%81Y9X;M(4FM;Ed zZpGu*J#TaJ^172!QVg+DckC)TA5Y}3i65Fd=G2jNZ?evQ>fq(|i^@Koy2zl9^o!9$ zzt9@H4!@r-UwifHwpWVdr~LP)g<5}7Oiwhz;-p>|Y};M9^VFBQK|c+~Y1ux!d)z%; zT2=qbmmdedJ9O`F-EVyBGUu~3{6vk~r~H}fp2<$GbQ{-KCUJHb;#t- zU2aLQBJ(wkH!nvQNXN{(M{eJE+)zB&Fx!0nl8oj#=hUNx%(vk3In*Wg?+UCp%h%mk z{!THx6plut8E&)KSet)%M(v}smX?-{H-=9c$Gv{S=fN@TcO&)Nw{QLGURMbhvU%c% zz01bubSP_FVpN%S-c|U?cslr&~2i<(^F^fdOaaUv?7q-NA+PUnd=7%3=2P~#O!RYDyDxm=~*0wII zYMfHct+hHObKpSsZ$rUXk=(Cu5C3uIHp#ZORh=l?YZ9bkMs_ND^&P9#&dzx|iAR># ze^p7$XHCjGx$$E1qP|San}+@IsNn(UqPve=@;dO}cb_}%sD2ArGx-1?NDY;^V$b(U zTMM$27om6&BX6;nQ>cGld->_h7rv$*EM<%O1k`1zhZPL02loFCeIG7Y;m5lN2h(%b zFg-i~CgA-4OaSoFkp%569kJ!MlccJ>A8}smKY1OTjzgg9yNNooj|$o`=TU&WGZ^%D>3ZCZHkk zL10cu0tpvh63!F3BJxz^s_2~Pdr`btiddo8jF^zPfkeN=$K9!tnNqbD(N@U zqB5p39x_ofIWkvd?#Misxq><*%PBV~mnpw2e^Bv>qJ&bR(vT8EDN}h<`L@bYv_2*d zgIBFng{$eQ<*1FTX{wXd*)>Eo?rJD$s%YA2R%&)?4r?lCrE9&?s?zq=*{$oOTd&Kd z*QuvtNHU}tIvKSZp_nM&o;fi7Sy?pSP)=nX#@{g^TaK+-H$6GFIiN;Ty;%zsESC?U zHEce@0fLYZ)FlK9C#nFfzZQ5O(ypLC5nulb5YaJU;*LbQq(2pE!c@8V_Hu|BeB{OM zbJqV>xhJixgxcR;^!8Eu(k5?sbpkZYV>SO#C1G1?u;;-5v)S1ffX^~CX;;%P-VtQd zH#j?Q`lBsA*Kbn1*-rxJ1PflMGR~|&5@6!+Uu$_FN|EGR=aus zLQzVr!zlH4t%ygq1z+?jq}3VqiIW}=;84(4V@>m$!t1t&RcdZE7O%|sP?;UB(i>Ft z<{jaFhAVpU(a!G^o=8X`eI_@Mj78Yt99P4h3t_JYol1?%wWUbo1ytZjqryIzpX-*7 z6_R+>Y8R%98|Y22s6I?Te)?M!Z0l6-Q9}v5?Zi_67o_!0XF#vJqjUeRTbQ<|Y$9oW%)4xk{8<^~%Lam=OYTu2A zTvk*ne8+Qt3ismt0F;{uPdVPI$I#74i$z`*=ud<%_ zH2tHfM8)q&D*Ioxz}W&8jph@@#)si~M*Xo*RP6PGKY*$@AQaG)0j?Mq=h$i=<;M*b zu%Dx{L2H4Q#;gS_!C;(j# zpz{JbQQEv?_u?-0WcS8%H{|I6@Ba%Q}BfFH>MbtWHi)u@XR1bfdG7 z1S*VP@8TEcsVLD{_cc-a~MUUI!J4V0cK&O@P$ELL*%X z7eq33CUCDcPcDiPQH3brPor|cUKS>p%Sy#of8VFq>uIws;u6j}szLE=e7TXK_ree2 z)01JKn&+lg=b{`w(dIB>?HD*%=Tk1^>0Ym3D}&PaK1!XP_Ad%7J{Vf}&9$PW_m(JZ z3a_hEl$6CAVqPcYyQF=Xt|CGJt~pp3?Twhu=_O3PY6LoGR%D7kG?zL95MlYCoqhHK z0oQ3M*`OiggsY}6=Kz3SPd(Yip7jD#{%Uj%N^MY(+0@IXzs$}8su(OAw>)C2P^%+< zNw7{#o`c;U9XbN}3=sKZfcJSLJ>~)=*AwrR8W1^xDdBW4BY<^D28!!`uzOZ5zy_DJWRB3Hi z-{2nbdz4{qQAH+?2n*X(*^oc0VSz>l3fdqS@y@Po@QleQ+1Ac4B&*D&NUmdLx4xm+ zO|QWMN1C|E4yylWcf~Bc=PiNVc0P2cIkqE(c6q4Hd+^NG_4Vsp-)~H=G=0mx3Aj=l zfd;3v#*fO=z5eVsM$=8+pE}2Zk=Xbl-{QOB@0H{>fHD+j+C(j5E;7qCA;2WL)5&#> zi5LP+04jw2N{SX_+E8PjD}pG?M-(NS+~X#2ax=TGUUt`=GRs=8K76a{>8+;Brmrx} zJB+Y>F@kGUbqw=C*ef2Vbgco1 z6cGpxp3bcLaRT)fW{?O!z3o)`*u4jkQm7nfv>2#2f7MN0|%lXWp4uH@X7WR50c7n!aT$#CbnRRW@#T6-D2c=Qj3Ygqxn zDjR`F+IW87WlIa*YD`W-0BtY>bCK-W@`1H0?!N`#vtdI^7jKTndxIfWN^MENiyN+= znMK(OfUg=FRrc#c)1Kasms?#Hd@T$DZ7`!yVI1A==*a;niU?#w80F-5YioxuD;gHQ zBjimua?S}<0#Ym$w#+BF=#Q_rlE6=2?>lcPNzBxgJ3K>fIplE@z|ieLy6Tu!%YL-I z4FcLv*vrVN`2~=!CqQL%GHKGi19maUZPcIKcmKAPmI4|bWd z#o{Gp?2IgkrRf2U0C}wv+%sHJYfe&96US2rY?4cf`&F!dZIZZ5d?F=lgUJD zbuUtyesIn!F9T$iMoh@nI_{~)0%x+k(1f@IQLzJn>trfCwjGnOhj`sP($#VHF2g>L zWY@!J1HuQW;K2AIi8F5`z{|%mmKSYRvKV+U!u@cII~7W!0A9b!sv#95drta{oQil8 zqCN~H(*azlL}FdX7J-?YZj?wPbl&VwC(_3=h`$g`(J@z;q`6cQC_Kg04@4r$efn19l$da=Ju#3r6D-(B zdD8i3ep^OPW6enucJ;c~$?-X#PVDNzGiASEBRU>Q%U7BUOfD@eN2(wBtpoa9BHw0= z{}WBwu04UVctIK5fCaIbJs<}ld#T{@Radp2!O91d@U(7NatK+&QxAwP;sEvhtUsw; zxvsMhImdP1($GfFJ_)}7u@(c??7{*Nn30Un&<#X1`*>gIr=f7oy)rr{i)sK zFXY+*afAw8o*}n6($2JHpiLM^_>>*FXaFj}^ilO&6}0#Fe;?P#FhaZ{9=hSkIpe}y z>KcIksTSiAbj3}01)D@l)jmPa$5|&d2P^9gsPLS`N6t8S0Ad}0T1z9V2740n?vhZ~ zvEJ8|{mD~QNXoS$!*j>O?B|@)Z@ef>c3m!8`zgAO@2|)`=RmA8AT9%BBLK%ZZ1^BY z>omwp4=l)kh>B+`fdiQeLq8GFH`9hk41KqWylDs97Wh~I*$H-SOMq>BwFt1oVK5%D zNa1H)@^8XvfB!D)ZL76x{2YAF&~@#^!Mc;CVuj6|#m!zwVyl*$6V46aGZEZhkc-*c zX8?9NvC^~Qe0dzmIkj|x5buPj^R%3BFnLzuS}fn>A%Hbx51{#ZXASn$UXWP;4UItN zZEsJF(ZNO=XpVpZHK!?hps8yBdVv5mk2q9ApQzwxa|8z-)T}2RHV2{$qFNb3BP8vv z=fU@pHm)MFx};m$mCP*&1Pfek2?P?nd&SZ-N&k5r&tb+NfUFt-F&QwPShWiZWW}sO zaxa0PNo9-00sr&a&ZL^6B0+m_C8Y2ulRV1Nn$T!`lD5n`N#L(w>ww}~Tm=AiD}bZm z8a?Dfm9`&-Bmz|t&MBn30Tw-V(};~mua#VP30zl$pVw(Pd8@DtrTAiUkkf?R?oJ;U$E5|CF{ zCjg?To0p=`$wSYD%V;xp8M2*4o;;)OWPp5(h1kM_^S%}i66P62W@XR)_W^ZiCq06Q z$^}v|{K`5&J{^F>_GB0yEDU^G@Jv_0LsZ#VJ3)V%N!EOrWX%JaAOh2F$CAIar~$P) z6!a>WeK+pPjS-S1q0Z&uomi{bi{?}qrV_}?N#P}BM?SI>5Af%|@TV~o41~;zzHzRL z+zrRWD#+3u4(E57s7Gbb@;h%;&0&RU4AdZ_r zBCD5Fle++L)DFM4ANinwtKewuWzk^;fVRYfD`9y1ed$1CD<2Yjbk zDUUhljXUQDs`7#8L&T}wM!3dxJV%VMdtX6#G=N#x0_#?(0wY;1w5>@l5P6o*@GDr;URC?fL}M`GRr7g(B-)Ls?G~a`VYtY}64i;U!<9lHIvySTl|7JFx z1ad)c;`JIEwMi)d+wid~4x^m+zJVM%5c-+s(UhoPF)S{3(UsO5Dp7wmmd@Bg7Q(3! zo7hCs;8CP``8Z7Q)6Luq)FPXhYr_>lGd+NRc7&*$C%YAW?>!vQ#bcq3Ll62cXK^{; z@evX7G0#Uw+s-%*1ZfTI?^J)uq=vF_ENb{IoeEPy0g*hoUEDYoI!^=|24^0V*G_LA z2Qb5)9Wr@_MJ8FutskIH0?~ofZsaUQf_dSH{GhT(+HcFoABNmh)>+mM)ZB|iQKxmW z`-qEx4Z2G1Z1e8bu{9Nkp!+k316=rn?N_R?(B?_N?You}@THnQ6>#34bVb3Sd9eHW zYy&1AV#Y44RBJ)1TJ)hyK2>S*LEv4Nbv-6eMd&4BFwPv+mfjLH#bJTW<8@Mr=@fur zvH(L!SRGw>`C=U!m!nc(w4R3q zR*ohll3phlo>t~TH*)nmW`{@@k^s=ZngI8yH}KWwTYB*d>gO(w)gxcMJ9*q#(ePEF zm!_g)=SODZMY5*Cv;-MXAnG1jBl_(HUh?{mje4bUIEkA7I);FJ9W2}@s<8Ce6}X;A~tVr@SbOWKi$YH2@VjFD2SMfies*|@!0zp!HJ|K zArYc1!#<0Wzq211xGvYRH~96j3l1Lxl#^0u^4=F_k+NjT86=31ri>3c78m$s6!K z2x4M2#EDR!6<6rv!$Fs#Ebwu^9%e&6mkUQA`$Icy(OGj^!ZSyBc9m{=_*M<+< z)lAh>)niU&n;oQ3^c8XGfTI>e>so3oK-Q_OISVQm5sIZNfpRbwl$SRiL%w@Mk1et> z_(*n;yW!@J*nSCiS-1T?)U-_>-S3O0*YfDT@Gq3{XBnv#hUz=v4b`h^cZ^y2KaA`G#6YGY#6Y zG{(9kM5l<{dZ(-fAejs}AZ^5eVCwC^=y*q3%;T~Phw2mE3@2|RFNhGSwZKq;fc#h| zyd;ugE_(=YVE>K4qr8RN?zy5qJZl?jx2vs8-8er~c-^^lChHq>JN>I#@&m2avuEAT zvw#V^fYz&l_BUj}Fev z$Vu{R&RG_c*vl@*)rC&FI)#Wn69Xp;Zf4sb}@kdY&B#uQVF02sh3fo{Y|q$mf~@egI~m0=!Tk9Xt6% zdlE^1$QS#i8-kT^TC4M1@5d-ihCC8bDvuO&--d0)%k|y4$!>}nAN%R91BW% z8dH0c--Wguvw_R(D-t$(;^Mn0>$tfj@?e-0*>6Jy$mvQ*By(ThGxc3ubo?eQHh$Sf zLX{z(;grmb!$PFa0z)H$aNN0b04hr6cN&(w<4U-!IN>arfI$x#E&IES3Fs)XccWZ< zxvaBsH=RZjUl0%QLA6k{x>U&#Dh!7L9NW`U$+P8<*l=PG8Hgmxi%HpurQ_tviK*zx z@d-w2E9VOUQy%~tmf!K?8aUZNVycKXZ^{(s;CBEGAOm>z94C*{)-ln=Fw$|6DJ@Of z#BCl00MiKrE@Rt{TH_^4=SauVr&iO1kJ$VMunHDv9{@0q8>^KoLQmxv57Y@A4CKi} z>w0*Ed*b)4L;@k^(!bSKI)OrmwTuqO&mJPMwgi zrHunxfxHTw*RkwFvqiJz-y<*I!89m@B1W1`rt9Cia-J7>B(3lGZN}@91L<0q7P!Fx zLKEsP1Og$ud&06P!eq8v`DeXKCB)tw@ZhcxM{LRI z4JdVp)h7$&2A!by+0$YFsO-lR|O6E^*Lln0ec zOoex_Ymf_X;{d-63c^m2_t{tajBFPyEO>|uiCmC%4QB5Dd%%ZJ;1PEuBKS_}Md83U zb48Xfy!UnI5R&Nz@2*iEzo{$QEM|Xu{7utamS?>kLsnz(JD-+@%@K}?#-5T@#6X;l zQ;S^a@J?9(V};w^8FFu4WTmPw!qqy}_Qk_t-bPbB9IA5TjzC-1w~t3>nWj0*ua}b~ z&wYQ_kBbWltqZT~w|FoY0h&Gl{TjD^=#9i9v8Ic4)E>s?=3$)$p#JI(H>+t%DeH{X z1%NNI_A>~(5GjGGH!-&I{a?j0zl>y7JiiS6)QgPr5eR;paeF8Bwt54$>C=}3XsQ<@ z)l-m!8u<=!-;qUot<^$4({*F1H;>r&UR5*wrkyBSphO)2!qbdILG-&~0=i?duKwtvDg8_X3jJ@CuozTG)B=5 zz4%#{fAzek@v0f?IR514c4s^(S&4hC`?9?`>nL#LAYIjrOZ}w;GI=$NcTK`uiz%$F zZ+V3S#I#smqF(-Dz9y}#`djuX83K;c3`1p-ay+ey@5Zp5@N}m z*y(S8&vGhWaDvUn27^{smGi{+t8nE5R>mqa!RR=ob*@Pfol}nF^dvMLpaPF=EacGK z_gu#Nd-OEbU?ap;mxnfvf(#cGKr*4S4{4CcQ|TUs$^>N5qiG+C-LB@-1N)~Q6eK?D zz~5=jQ4J3U8OnBe&(W_W+Ip9EiEd^uXiA2I=Os)mLlB zITZ~TQau3c2u5^wA<4@~pEkgvZG#J*VhjM!(y*Pd^F2K3;z_JT)_AKUyXE?s(N1F; z=)SYTdn`OC{F?Cm0ivlk?>26jAO-}(E|ZjUZ4Q$d zPZfh3%e#Fzk7Gf}KZfQ$%>W3XV7p=`c8oLDlb9)7_)Q(zE;s%Gz|_70EwycY&J2EQ zAi{K=k27QZdPT=W6NR*H#vIn=Ji1-9ZzOv3pvY=9(^{oKxhkwaStQrA4&8x&;9|7i zXS59@rKzfIZ54u~6oE&VAok}h9w7xl^MSZ~BW)AIYrSKqNsQJD%4%J3H#X+0Sg4SAmL z%lGz6u-EED3_xtrKzJl_qn~B~TG|Md{KM))L{&|jnA7{@ zwkM)5>j!`+Lt>qgSBXdr>UAG7@4=P*dWu{&oF77w6};&MfXTOkbT!<{J5j-LM1lX_ zu5^D~lo=KxmFParoW*NO&4S*Tx(yE%ruz+e2WUHPqRwY+liGRi`Z+PaT4w>_H~9X9 zW)QUI+Ll4swhSMCAw7Wb9eazt<|upkKy!Ty8VINq2Q=Z`xc38Sp%&OZes3L9L}49Z zw`&JtArg{LrWAzGvg)258xS?><1fU4RPDIkw2N|DKwt_$zZYU?!K1ZfsiYE4#c@H# z>`8SeD$MNzkQfs`lv}+ut=yEt;SEIl@*&4z93hp(RRX!A zG)3z9d{)N8u5hApAODi}(OQCdB}hdBPWyHVyx~5HRV(_9dvg8&ctr86;Q)c%?+?-H zEL0FfyR<~Tn&GO7B^Xvhh*|)$et26$C`naK98VjDRWpe0tys`Wqauv2wFisRjzN6M z%V+d``fa_C-*Vnh{fMTVFuCyYjo}-G>iJ;+$LB*l&VC`*?cw8K2WU4e1RJ+bc2_Vj zi=!zPa*kBgUT_ivRaF2&@4npCdK0PK`r7LX6OMu_&#-_*qQVaErac|(rRFIb zhP^nnJmWM#8h{iLf#jgCEAm`Wd+C{w(J2Aq_arm&W;#FMFG4}YcmwS$dT#34o*K>2 zTip(=b##hh9TWWRwya_j?@r-2tL<{#h?ROnOs7)201m+FxC*f0stj>>d*yZlj9ug7 z0k*0erlI?50WPZ51-;I=;NUk(N!Yx0Vf2F8wR(O~Zw%n5cy#qX%Tf)eN|!_P2EG6A zTdeQ2Q&i6DRZ@Ygfh%I03M^=VKiDRi)NJ7T4Ip1qA*3bmuAjs~z~rW(&3HJbp5#lk!;xVR||u&rUi4@?dW zQ62e*silXLY5lDp?WYYCnGFC`s8qN;WrKn5wuholHv-~SDpYcwY+kZ-l8b1s{o!;6 zIZHJWpfg(|d9%5HZ7WForz z;lF_nGN~gI(#xyRj%91g0O2wY)S;6ZiIti~>s;2;`;z-kE{P^yJ~=*Lq1#FX@^2#O zj4uesX02colds-~Rva6jPc8r#2_R6V{)i~v6t3M(!>r;mL|8K7iJpk8BpjUDH-@Eyzv(#XE`LM&IXis7} zt%j(Mypr1gj>-x^dU-bX#3%6CtHkQ2*syF@uHsz)R>MqA@+PLGoJzA@XB$WX&B(SV z$Om~gf>fBc3b0ST;n1cof_5hP6cv{qo}$DulM^54QmfkOTHqjC;DQ#N^6T{*6}{*A z*DbWwg^yT(AQOP4wIGe(f~#P?wpYgDXcJl-@d4Uf<++xTnBp{Ss>#IKt};c zZrHlV)l$1D6WWLaf^5*}et7_>Rab(mo4PIno9;;1jX$-(lfsI~1EbJHn#JJL2AbwLp>P{^~bNkClQ*Od6PWo~EEK7#p`v zEDm;z93{u6krWJS!vOLTfOzf7Fi4CFO4D~DYP~36C*9}!0B|%a`&;9)t{he|w^gSE zsM|_0ljJ_DUkVl$R;Vb^dkMRAJb*5l3KPyaong2zX*&RMcnSp1`H_5j^!^(0N$}TT z&Z{w`LKg?zQ{i&VWzeB!h*aStt)>z)IfrI<<~VSz#J9S+N!EYK9H83)Taw@Ck=J@a zfbCA_=I}ISQZ$&hCqjS1X6`TVwy3UU?s81`__cY=F(%&iT_%%1193EDPLihyoBDU2CJDyEd52|EgkeE@s)?rC zl$K}5N73g3Zr^fKHGWeUQPwA?`WQd@@W@7InF0Fxm*lRBBa3(173QSi~q!=}Zt{JBeTG*u)Ds<^XY=g^PqhiRB?DhKdv&PMXcn z2ma*)SGEyYC~X=xn#cLNGcyMxhY$fKq}j|y;GTsM@?W@VOjm*31L(~^^~tP=d;5$E z_>3`pNZn=QbF`6#;wdaEPmR+WCHVpUxgVLj6kJP_UC4mov!w#@B*6ap{ZCFGB2X1D zm|%!bPaYa3T#kNR33=jAwxGgnZn*@tFg#*pYM8#>*nkQXm0Xo zo*_Q2bmEgF~AHVq=EZeGL7QQetRTz77hEU(a3`I!Ymv<(XKJtp9W(=T}*rd!^kH9)L#W$ zNFu$(hS;Lcdnoof*kMEWm>D)AZ_1%M#owx_Y>%jA&5@xI={^;!nirRTj)R z^|5mhq*(fTqwXri4hy&zeh_c+ReJzrYbA(jsk8FAik&+yCA#QbXd&g1=+Z7Nx&Uz+ z07!WblBHHK(-}_sLGpyUy=(1W8c_#!?)G^Pf7{#o#M_r&n9}&+Z^;ki$h9_2++;b% zlqp%(P-@qE!?WTCU_x3DOHl^lluctVsq=KEn#TIGCTB~*~O zaazekPN1QWf{unc!kx}M5zPk?)|EkNe9hHq@%&a)UQNP%M$Bc@&R6K_f9aiHvc3Rd z+*EKgjI3EU>6+Cr{!)W0*oRGsu;HM(J8&3^)vq@uyd!-ihJi)fU;P?ce^-s zP8^6Zt!Y1Tc{t#7{_8%#tL<+5EGK{AfB$;q|0+D9m*mb5I>pSpP6HPsfRsIE{W-|% zLD3$SdkH~`&XzbT#Fq%91dduDONNau1DHw-5LJiU9UZ5#ZqlgLCy&$C^0b+VjZCpo z#E$tOcbBGeg4kmmPBj@x;C~x@(Spru-&xRS0m4JTRh(hP^AG6F5Y6{-SN;io>3@aZ z>K~U0ipFAq^9DTB1M*{ zVMnCG6ota2w zx6%62Mbh|L0IZl)$4K)m3|5m~hoPbIB;0<&Gm$gxtd(}w>|d9L!!)yE05KK(r%S^N z|NYXi=03B{ovTF_M{BSAKVL1nF|c#BXpnWaNc1M{>oFX_WmMiI?&n(K1W0D8>3u~} z@qs1aO2UDj**#{Yny#tMos_knTi?X*Hj~c&|G(z=|JtuP2Ca?Q){9O9L8bXRxu`U| zB(z>hSh!P@t=?0>ACM2>Fk&n;lsG%|9;QDiDV&eS9D2RlfQ6o?0QE(&`g#7hW0~l& zdlw3|MiZZ)0AF=J__0eDQyZlnsFzLG#l^}Ae>WjuoxSaGK)z&ToLw3*a5Dmel>bb8X}YZgML4 z<5HPE`xFs~i5|COd|gf$=2{V#Tk#WRc-quS?p!R5cpCq(*3;?B=?m8=eU4ohd%EV< z(}$vpDmR;73+*@oZf67Xg*{C_Qhf9V=Nn10Z}iWJQo40WH|oletZO+OCc}F3Hju+P zb^3nKTu=}ul@oo%%+CUZ(p{ZmM!ZHlNd3*Cl%jb~Z_1o|#`10v$v;60i#h$s#I@dN z#7{K8%ZF4_)BnZZdq6d{b!)>bflxw+(2Jpy0HOC{=n#q|1VNgB(u;HuTj)hls#1hQ zZz4rSDHf_Cf})0^lmjA)C>9h&j~@RWJfi1)&%O5>_y5L!zcIdlWQa4*Tzi!{*IIkc z?6sb4DXpt2pqek9#A*Jemid4*02q4!!}AhIeRz#w>&8(JGcDsH!pmHn!#8r$fdeO? z?^HyM_Ah(#7HYygeEqIE;dY#Eley{gnBkSvr}5KnxXa3NW4aG>#G)#+jH}6f8J_BC zAyzeU%nu2qvVwP5+NO^24S;}xrq7`T`oiy0l1TSeNaF=%;Z^HU%SNrt@b6_WhdAqf z{k-YQHg}u;?JJAM*;dZS)B9h4e6k~^DXG%nil6;TzTKA^b0-fzcg5rER}f}%pR6K7 zGt}RD_wsWp@-iBy#7)D-zs_k^E;?%woMX@|L$u#|fjE!=l0XVb0~sI-fjm$E ziU0?cfHF`4sz42>0}Y@Fw176y0lGjB=mP^_2zCNIFapNF1egLdU=A#RC9nbnU=3`5 zEwBT-fIT1r5^w-y;0SgDC*TbB02km2+<-gq0DFNa@B-doAJ`9kfG_X^{vZGZf*=qK zLO>`u0Kz~xhyalw3Pgh#5DVhKK@blPfy3YkI0`Dj4frga2aQ4tpas!FXc4q1S`3Xw zi=!pbGH7MA4q6x8jFu4pPKt!*)JL6>$id`b6pTGp^ik;o=>pB-IT(EuN>CrQDNNJ+ z>t`6X!24aYk+9UgqEw_jtawJn6gwyzr9x2`;B6K+Rg#hwF;v%Z(@?;Fo^}Ek58tMCg5Ul@bp>yQq($8pNV>U&_3fmCSLyxGq79*l zWM}QR_U}^Owq&OJLt5UJO15%YHl%|K|I4*j5GL>s`F(}%7?%yVB)xyv{*>|!e@K5C z{%7g_Niy7$rgr|oCU^dOx`Dr8`r9p{82@{I4u5O#G78~BG@O18_m4q>7@ z|7)v-{)0bm|3f+p-M?e4+Y(muhcruT+m_#+L3U2n{2|Gy{gA|V{*Y!>e@N0=KP1HV z6&a8eZAg={x3T-%Qp!I_>5#N{>xyDXirJEoP`OK6Qi382(44 z{pV7J)(=}PZrksQ*5B>d2#u7VqxOHbkN+Pj?c}opv}x$?ECBy)KD{7j6!3eAk$uV1 zc20xm?^Jqn02oL6`uao!g!QjrxVyt`zVBOQuoiRtf`K>e8we}WV=ci3+xbs}>!1qCfgeO4>GEB^TBZyGzEG)X-u6SM z-gOU8m&~0BR)bFmSs#kdZP)10p7uqwsg!9BPQG07Dvi!z*%z(2mKri?4gm{%x5`~- zSZAPe&pqtLb+IU}ZQ)B^Mf|RMr#`%p^bU#%ZyRN4Nw|Fox_B!;#8ke|)wZ$kCBa{y z-qn3CGW0wwI&aSbnxH9j*$)6kCIM&(L8Q{ddT)67Fw5VLhA?sw&?L_EPQZjG^1pX$n@d42+o(r;2X0o0stXs z9n{3d4ub(sAg*^#R4M@AIqBrK2r|OH^FlI!9eK3x&_9?LEiK(v+Oq#LZ4LuF0&oFQ zM_*3Q?@0?8*ckvfxJ9pQ9LwIckKqjshH*j(837821~N$WeovUmz`z7KS9EWvYcHf_ zhI}b%9m=wm4N!-)NSb#4sVyxFO>2MZ7cDDI8*pt)%SO{WUi(GMPSb`y-O_T5MbWfJJ+`#GG;N^AFIqlGE6m7z06fx8Y~a zzra%4@E4mOZ~+6m^bc55{QlH7DzlAR|3INEWVf>zzVb`Xa@+8n+b=L?8-Dxcmjbcd zS+lABEKq(M)r|NH#e-}H#11g5&q%X`lj6b;!1fXiko*bk^?`tvXFq{(6b)$o3B;Jv zE{XjK9EyT~ww*r#N-YGmbNmESCTPISPvAHL0?t?e1adSX;KG5QK%p-LT-5prl$?Tq z4!WPfZ#QYc?Vmu+M+mrd`X|sN3jvq+{RCQR9idbHCvY*H27LSpbag^N*Y%&kwG{~H zKKTU$ zC<>P;KY*1W2uK+G39OYuK$6W*;NAfUNXhyMbeKRu8uceo%m)FPsGq>$=Ma!Z{t0+q zg@6+UKLOJm2*~**54rsikS{_50C>nO49$EeY3x8kVEEfNs1c6#AA7$OeilN1MSjpW zt`)Q+d(oUGwa%G|`K1ew7Z~4v`*!YXlI8I;6-m}XXf%h?s%L@A=Tgn{GCTIuy^Bu^ zYEgM0KY!qsleEPs^Q?EB(_vYqC-mM%3u0!4#YVyaH zkBJ}q@D2O5H`ZV=OD(C_;*ZMrrN?~Yqe^);{jZO`dRA+pb>28VY$r2~T2=J#jFOrQ zJ583oIb~{655J532J`yzVd+%;;NhZ&7nOHB3=S+k8LFuE}fg*LUp? zjY{8JxxUNDt*0I?D!G>zg&Ic!XqC{yyOTKqx*>=G1nPU^sYL63dlX}sN(U+>*cDeV z-+sDc9{GpDA%WcKFcv|LTLs3Znnv*FURl?MS7tVLh9%z?OMPr@&wq5`#;4!r^j?R` zyxV#7!LTv=hf1beMP8j!p7?uLUu&O;C8C}>rnJgsCf@VENbxjz;WDy2MPp?4z~Vs< z5V^9_UG96QqoA@`;ffNXN}1KK<;ArD0i3$6wc1mc5&PX-^NsYsot;>n2tVT|fH!fR zP^W9DW%a2wy?$~z;`yFa8Wck+%FOD)Gbpjo30X;yup*U+O_5U1-#U8X zdDLoA-6s$$Tt&)Ep#|->d1z%JB86* z9#07BOunRCkMv`i4LWio$Ka@W#`Whyt@VBWxSL_a8VB#}Pw|*3-+Sxb^VX9)UYYR> z>||Di+_2-P8~O+XcmetaZr6?k;{fM<+*)j?WIiJ#;t&5mhc}%1^h$juwEx661^S*v z92N9>m^8j-HlD&U;_H_eoS$X>ZApub<3<>R!y68DpP1mNTVHM}v)+7@{Q|jg_4OYL zwhsJxY*~l09$u!p^yCBwzdY^xn_b@EkkjO}!>6y4(eB)4xh%IH9cc}jG4~Sa&S{?e zcwgPNp&&whPtWVFmLOjG1e$u6qhr@Kp1g@0?-ajn?Avqd=H^k4J4SunlVL2b(|uxM znN`Yb2ZL{S1o`sz$S5aS4=)I5hW+;J(=JW7QWd>@r>_juUx_VteY1%SjZ=)hxHOv? z#5cP6@=ex(EbT>|Cz~R;&dW}y$k00)JihwXFUDV={(9u|izS|SpZkY)GKaxvKNb%+I zmMUUCOCP=HI{Kze?c<%f>P8h8Q)8w7@N*9n<|39U)+RP4wj}mV46{RThy4x)bRF76d__D*;z0wMS*on7X>o=ycMvPGv}5buBbeWEv3LyJAqe6AirXQz~u&$ zbH*;o6{pH6%n}s1<)eC}W)t`N<%VuWf}Uqp{IoP0o`D9HNTl53#1(6~Zf?cK!_|TN z0mH&p={9Jn^v)w__gM}U_GKPpn7)#0XZ&w9EM-DPCha@Q1}5OI7UC+M_UGs&EXL0b zP`}b@eG&yYOjcsqQ9j+G$FH9}Gco>IbRb1AH0}Ia_eay3XpRQwmFN>QO;L7?VO_Sz zt9W`o_2tiT8O-7wyjPN6{pq{^qp5#P)rHDb-Ay%W6u}};uA5&H%81I6$5;KJAkjO;7ma%FOkPjuxTs%9Z8WKDb!CB?OT$J{pV6dI|OQt*eMPefJ^_}a%m2L^O+R*2tq!l z!K7Ap98|ssoKL$e$r7HxHj@I=)NRX>yK+WO86ZaGVH+>!lM6!Aoj>LjcTAZ)gnt;r z8#a1TV1y6?xo%#cKQMnHib?8yO`08mv0wn_g@d+%u}}W&p9(x& z-4E(Zc-TQbM%Qc0*eo>|lf*oBhxIVaOZu1P69)JEL(C4^%{x2{S8+5gDDHfCZbC&} zqF^nLO@>sn;n~l86eGzG#pz9Wg!01VNIBa9l{(*gUZ0VNw=m6ad0qhN4Zs-$sYKhh zRYJF(L0s`k6Xy3!dw|Wv!|k{-9_0#DFhvwJ9X@e93W+_FbFA~eU44=q0GAp8OHLw& zV8#8&bU315Fuzm<->{xisR`gUfq-7i3Cr!& z-6Itsi6<~K`BBk+fE4Kk*X-q_Pk6#=D!{Q?S!9{1TZ2(aeH7#cA}pe9#@s=J!oYV6 zwPe!?6dVEl=n*@V7%xwX4cYEy!5CYytto8?{HId_?P+&n0Not!%;B?1Du?Qn`df|4d&M2brrbsojfrp)!uQbztY5*c{rP(B1uDwo=CLSQo~s4=ic?WS z`Q1C2tbX^kJh6IySe<)(K`<)?%-RD3GY1VL{52^nUW|@_I)%1xL45Q^ zHdZb1^E{BN1k3}0FRHUwwzgd)y<4cX2r1T=pI)<}-3>Czc-a75n6)yM`}SkyQ}$U> z*11N;n~qul!4?Jv0;xDxxXJqof|x$jjWz-v z!HtI*qfo>l#P}&Y{~6~);<72|mGmcYbmSp?wAMIA4zihy#6>hVLy z<1|7Z^t*hQ*1VDLXSr`C^vE}|<~Ia*H?cgol6W9z*x^$_d%n+6)s&omQK@9rJa>{c z%cUYz0}br36quf&CAINg*4fiyNOf7{yi!9S?EydS@Z13aK4{5L?n(1O^$f<9&o#uq z^wnyLq3P1UK>2C3JTize(QE3ntHs6#39Uw3O_rJTXON6!+CXt3Kzxn5Ve8OP$4luz zO`r9VzvQTz?_=BxBfqEjZD)#Bp1wvfdpq08M5>MT>|1=&XzV6v29U1GK;uSWQtvGK zG}e^sFraPBZ_?mF*AtboZL^qW+XyaQY+Kt(v;D^&dm2wbTBD_{Ii6?}>{KYwmZ&tY zMVbY4>ht7_+2d7hKG^t={Mcx#oJs&UApzXf?p|^*r%$02G0-}1ImEQq)2R5ymCt2c&O+E_tG$(>AzCp%y#R%a75pAJ~Tn9?%#U z4!o6O*ZbR)(2~PJC27+c>O}TcB0#7LfPF@_R5@|IKK{^0261Kq&t5XL=(eizlUkJ` zo8MF0&>;Gxqb%hOU@)=-K}F2;4k;&VnE-0a6K0{&q51BpQ?SwRHcYg0h^un4t?Ku% z4>6hu=TDPUhXLwdFU*y`Llc<0!&Ph_NeYY)6Qz`?17Gcm3`=h*L@!IdJljyF4LF4= z663&U)uxP$SVrd)4Nj%0xrE9VQh9YrK2;}|5?3q0m^=tDQFvHMFmg{_ug&g}f;GR) zn*N$r0v-l~)&Mh6HY2g7tJnF3O5Yy9Oj7HLf*UOX<}84>b7OG($X?jd3ZpxhZyV?TS|INa(~s9M){NiCo=?bc!pgRAk|dV`So?c2->rSVBc2W9WteRW2D2k`)bRH$;ta?e^R1E8qa zp>cBJ{D?O)#2i~PD^y%OC{Y3GlmK&)KBi<~l`0w-TnR0JNM)wY6gtBSaD?fmY9e!s zVKLIS|4IN--p9De`NX+=Y*lZl`c0SeqGJ@e2<^VIb|_oE%S_Wdf!L3%5&;PLPJpqS zAW+sU2ck%6T1KOHP}&an@4?8rj|Q#oFWN`$SJuKW<6%jn%ou2{heH1pA`z-~h-ueu zz9I>kkqQL%y*1kjm--6s!g+y*? zIdM@1?-0TxnK4U1YJ%3+j|!Ty8QW;Q(NO zuTqzB6NfsWSU`f4A6tm>(X-UQXjQ@?2!3Z<0d5C-7)R>iGr4zg6i{UdWZ{V!D;1aX zMiieM58Mll7y#?60P&f1fr$x+E%UIX2;~4kM_d*$Db5xm`yn>20HQJANu8Lo5FX#+ z3nMH1VV$Lubg885DcALu4WY+%V`GN+HrdbnqHHkh$*%laAGCFI2rk#%n;8D$i@oIGF*8A+1 zC!TEV79>PRtoonU&Ia(a!+=#&Xmy`aNhQltmqm^vLHFhm-C0tccA_#sHR6FIV~UJG z7NF0t1j^H&c%lbugzE0fk3A{HJYd~4*T%b4+K?e%&|iRjaZQrh=NDht|LW)H25b8Q z6whCNrlF(+pLzm+3wbd~?d3n&DGnjzUOzsR-y)-LIxX0S7?ljzcR?M~vSP zMnYzUsA?xZ`Z-Tz7|@N>0J)YgMUAg-@nnmPs9GSu7&dfsTE78R@jwTw`Uk5Oc2D*aZ(t*cZpk+^)QpjKv)=2_9oEMEy zyt~#5uGv>8WrydQgaz#ErN#P~HBrKq@l>JtU`Z0X04^g>tw?O>0tf|Xpvc-qD8Iub zkxx3-Brb5WAUAyzNI0V5^>N2xyVBc40_PoWDL%c_OWr-ce+);&5$t_J>{utKOtKxq zJ0~*VqNZE9zVn;xS~Rj{;-;>gav(DEW@=EUtHTfFYG~yO_()^yNRGn9!www+ex5-E zAD|&E>WK@e+8Dvp*QoN`Pa=dFsWfpb2oeCs1`h&uy!w-5GNJLX#1joOQw9M=8bZFT zv^OoF*`B)sU~nSv zhIhQUXqKRDJY}Y>c3}6Na~Hf!zSb#EI|FSoDHH%@jQ~l9;mZssre;#;sumI= z4heO~+_SDs#To&y!-!n-nRfwnVE{`HgCO!iUkL?D6~9G_M_9NIgmMx+$?4Lwh6Njv z&&_zBcv*Rvq$w|wLfN@RumzR<1x0BZ7|%#7Wp2VX;c@jmppRM%ZLsPgS7Zl!T}V5; z;HKNuz4P{Gfb?Ggm)wL(iPu%1!s{`fI4je}B{CYA1mfur3z185yR5QO;WcA>lcTRR zTFu1RLSr#0x^_-Q*)q(zAlD>RfVih?pV+BY}py9T08DDoDt#UK&ap-H_U3DF`D*rZH zO+!ag&HY@X?UP5R1R^}je^s+e8H#}797AUI-KF=@ z^WRvE^b1+Mf{I(Ko~oVwi@A!HZeN&wu>Bizhf60t_%&muF7#QPcw`XoKKz|H>hE6E zM{P*~XavU}%|N%{qHNuT)Ck5Ba98y2Gc8 z!{`26@=U*qI|ZSd1Dx5}Y$?ANN5ULVEBoOpQR}PPK%5s1H{n3)SU#;|c>IMFs?_g1 zPp(sZ(oR9h3jo~WBB4QKcx50~rDLGsjNA&6`XY8#kh~Ca$`>FsIKgi8Tiaj`zPLyS zzch^}^3=Ji#*-&_wZ|6&l6CA(n2QMNIb8qlO|xIT2{k`({*7_|5D9ll zQ~!|$T^W!Ey(&D)V;+F$b|O;^H~moV*Kho<1j|JmJlk9kG~t*#sR~{C5W|5w)RWYA-<3~v zbI-BYI&QlV4_RM-H`W~k*!%m<6gcHIwSj~4L}v-`x9j8?`xS!-QkjV>Udk$!) zXbERKb8y*G-tua1F$qvOP}3D}4=`$I2}F8ITs0MFvOdA96Sf#kuVZ(~bT$C*aHGH} z-IctV0y*3f4J%|!nX`;@H7O>LbP9+Bb5sGnO#r(On`H85dFpSEubfCr!EnaOdcGx4 zI0?f5{!FYxsO}+PMRa5OXR2*H2vI|?R>&pg;l_YIwFX#vuze9mE>^+WLDTxNc8fe%}&w+Dh zn@8-EhICep_EKQ?ENPwTg-=4i`e?ryWK=DGaNv%(-Td$6t3BjI(ak_tA8XR(3~x)a zZ82JoU(vqSH4HdT{D0suJUDCIkmrbm>+-Z;B^8ybxmisJElQxrkB}Hka^5%<yU9@1Y72}qW5l^&T^on51j|788nP?*-YCtD&Y7nyP~Ue$b5%8 za(IwKr7*Lq$}LNLF5)}>*2@1no7H)g^Un!q7PaNfHtVXq8_aGr-BiML_JTLW>%e(Ee@gZ_L9vCJT5=7*CVZV_eS3c3=4IO{Fmja@koq|Vc=Su~R z*)ZDQFpuvMf-!`O0CG?w(-7qr$r->tMGfIDxXQ~L5DG4t#mAGJ>MKAY)D-tCO+)&| zclX&S+J%kmzD0)@r!#4O6<^=C zM3@(K&Kx>-Ioxsg!MnRJ0$z^=;9XJcAfD0TZAG1wimu}y()BtF7`iM$06o_pl0J{u zs9`}dU05!Q1vyZXeZ^3~hrRu9q#z2NrVO%3fLq28U9c>{EVQ*UBiI(&bUq{#R$}kw z?WdsGhT*gy{OBe-F7Jzn?q<*Tly-#8Wv_3L3TQM>o3?|K3{Rx!dIM0IH7`wa%%r&J zd6zVduiV#S_K{gA6&KGXdN4%>(fc`yeHwA#&og#=T)=gQ?Z!xDX9w@|h`g)C>CpH} z+?x>KeU?!R2i_h!Dag|!mGF4g2Mz0teX_ResEzCJ05J*YkPu*(%u9RC!$H81yh`2W z;`7PE;kw$?(F@d%FHk@#Eo*mK9{z18?Ns+I763NItzIVVzra3x``~h4+%7{By0P8s z*@*QE{q;qYXZwAw<|u64YR|F*x`pg#xrZh8Pus66T)0rqv~-B)p~Ap zhq1v92j6}EeAhtP{?kL!E(2vH=4W?Jc{LUEzZ^N@_ZzR=;g>l#+YPeSzaRbnV93(7 zqp^^BsdArJP-BRJMZ`{pnf5mx5uN!aw{m!tV@wZShwXh3nO)9?dtM z)*XWGY~ib;GgTy-`*)H@KPX)29KeOlh7}4;yS&mii;NZER_);nd8XX}daxSLwClf7 zXe?jJC#{EQEMI8{zO#Hid5mE)$awks#Pf$S)@Qp<3ee8&SG(2nSOU8ND^Zeqo_MMT zwYWMti!lYGod}ISl02YubK~nzQ^7Cl@v|*i)Z$@2qRaW@*S9nd;!?C8uiJ)v+8rOK z@dVJAe)#DXdEMXCx>xRsm5I=A^eq;bjaYTKj5GQEnwq!tHLV;KaT!fD=!&a-3QeDq zFYIPiEg6i|gvZo-%AmnWLIg+gkUcPE??@mDL`m4i`w^}<5P1u40F*g}LA;Wf?vF>% zeqhV60UX|aIwu?Uv{e#h>~2k;A{AwLzXGTWcyLWUT0zZNYBhu4U7bQ=B`fmh06v&K zaE(3S)u9(J?T&1>ebh*mv~e&{k0JonG=TY~rD#?}deendQSv;O^q@Yy5njZS=X*Ek zk{nf$Ydztt{i$HqaTwtdKvW8ll?TrN<}yp*Joky2IH)fukzf~QS*X25)jWQ4>)3UK zGuU7-?Ov4`wz4`Le>`9xsg>8H8RsaB824Pp}2tCuR?oaJ3}NjYQ_3fO}wiljKY zeqBk?8(qGH{gdbpQPon+9V{9&tphr?l&Yd&w}!_Jb;%0BqZ`;|=`5(!t;+50r2-^M z%2M1);#hjIKPlss8XQM%>)%|XAh5$wJbIN-Fvs`@L$G3`AnSwnu=(~eXfgI^mc63l zBFgw)jnQd`n9dZLElzyXN zdDN;ZbzYtrYZ`IcrH-%ooro zR9hc@oq{050jB3vNA#4Zz@;Tpmy&qSSyWNrG?0f@v+*?6+V%daB_D@ut-|0n_n?`H zro7ha$-8ZJ9}k`T^r)djy%&C|0wl3!Hx+P-@k8sz7J#^QyK%2bu7D4gBx5NviOnl? zrqFj*fRmS)Tq}t^!I+19t3I*})f5_gpX{62x-j-2`%p|9qZ$!Ih>ExY*j97E+VRIX zYHFpHLHwoNje`hzPsyg3DrLZUKL^w@g}<+O8X%lJ<6~Ts?xG$cQ*R;O3o8DaJfM|_ zPw&%93B{Z5F#hWJA|uBFT zpiUYvyLmOX44xkmzf);s;@)l!g;IZ!XDv3SsCV>&j5Z&+0T#gg)e`(RWy0VP({`~2 zphobpn3IlL_|Jd=VF^4fdpAfKC#&56Xva|K+B?NA0b0znMMUy=jjYlf#$jXfbGRlsNIc)xZ4TVtmPT$fK)~SPnD_J664S)$($|A z?tNPpm;>X~wxx>*xiIl1;J#CET#J2=<#Cq0_L{|ZdL)|*L}8WVC-=S&}c)J=-6 zCIdnD+Xc_T(@V1+<2jNMN`$h zqAY-CtbofGM-$J#vriq2hy{0A#%qOp}=!A2nkZ$qw>MDCsR}YYFme6qU{<6dN zIQ!wpzA?lX6TOg8^?W)1-`+&2fcXrK-%27ry?7rfqi_kXi2Cb31%M1roZ!4@ENTa{u$$N`!~+`Qa;q&Szhl;wVH2Ju^5Ilh5#4Z*jvk`=AwM|r0mdA_WLY!q@fU4V zs=F|)Y__`n_m=`4kGZSFP+&G>$P{r7rfC|lv{1h%g?IDt>Q$-$#GECthHrkhchM%0 z?h%+Qb`8%)dm1~}dT{pw7de1p#aGlPu~4Z*z*7 z7c+f|MqYIZuqJ7f@-J0AI#-GmHL>FD;b(i{Ne9hMifE#R@?>RznQ4GM1)-4+!kagC zX-`n#I&t@P9!ehI!$6DV=5Z(xNpxzDo&6b1r1jwumisz=&$hQ!&T13nUMb&rABQ%3X|YUUzm3~wd<0C-seZv9!E^CJUFi-HdrYK{t8|6j$b45e z-0|uIUNO$@m=@vo8nJLO^6}b9C{4pU-GC(sG)@pD$#LBy$Wsg84T%VZY=gC81#JBM z+-1#$bB&$7bamm#cz#a6bG8$OwXy^k<|CzucdUz}uiBmHCFNHJPm`u}`XYMCLc8DG z!jS}3bHIhUZ(hVEJpC&FtZ{C@AlEopAoYZX+_NR$_k^V+cW5ox2g4ifF3Ha&h&oI| z>OlA2i+3~eaPG+=(wWY%8fCFHi$cW}4k42iD*_bMFvosX(}R3J;3fy4;Ol8G-T9}# zW4C_Q2yJgMXc$>>LGGpi1NWu^u4yDgb4_iaxKVf`ieCT_UVUpTDn!FSqS(x=T5gWL zcpEdTTgIQ#lyQKS@c0Jrkc5MFu4`j#3s759Owm!?* zf;0*sX#qN{2K9Wk8?;(xLxZkBs#1x!nGMNaJ#3i9Ya7Q`|IswZ;g---G(fH6VH)QP z)m$-qpg5uv5Ql0};sJq*sFzjCceqmYb0y+^wkWIm_ik<)UY&`4%_P@DH2n+tto?qi z`(sVm9V(GVVI5X?P@Oofe&kMML3w{E0JsE&x;5_6(Tv91>7{u}nQ;$T0lRk&xJZ9q zx5io$?(EfIE#TWZTr>6^=c~WxbymSKr$=nO_qOqGiQD*J&TTVkrPr{y^U*YUWDN;x@bMwaG4>?6x08F7vNX1m54T#!dZS{EP&P)S(+PirGbKHJFH52 zOiGeTI`tJa&Q7G)qZSQ=rj-zz4YNiA!k!@=$un-AFw?`p4uL?48y%1?aJ|LXdyUwp z3h2V|V1w6Y0s-GVB}J|=^}G)lsz-EW)i~7~?y$Uw163!0EZfrejJqDc(c z!2x~mxqkah%5+QUH|^|?F`abQm#W>D(cHL&;VW9l&Ugs-xWQFsNOtQv3>IPgEhNuZ zyZ6;BomkKLbTja>UdOAXSZAv`;;eVOh>HQU*2g4wt_+250@l z#^8H@Z45SJZnFY^+ZcRsYh!RPZDTO**dLjhfMMa3SA+EFK`(_$0n5`8i79WILIF~k z0y{j>;C6}Ld%jYjgK302F)ZrAZkfpwuMgu2&;x2+^)B@l=Y!Q8R z&o50Fw7$4H)qt2ok>M}AoHphgtToqco<;9fpsn3%c3-BJQ|IK0 z#D}g_?frPDRcVv9pN3a^Q^Sqx&p`Cn>ru}Sk!MB&E?1x4$KLHDc|OLC|Mbp>uG%55 z=`p&{caBH7SgzxrCE1?TO1LxB0J&onM(59!5lUxd^1E`B`fQ!6hz>Z%47b{2c$niR zU{FFjstnf>hhVlML}%tv$LoxH9y4=I-c0DJ&F<#RPmy?v;C<#gj9@>7Um>n0a|xwe z&SG|s6-P*CI!TyD(m$#$;vU2SBsA#+6~8EL?jh^*@}zLa-a*hRKYH0b_=EV1I$ymn z#-mVlcGG$2M9T0h-CNXPx!6rrKixgm?VROm?lDfsTk6%*JWkk+9cRBP>RlGi?WQOH z@bQQ;PB>95bkHYm&S(6-s4~~0{blPfQR-=#nBM=Z*t|wLD+K*z_ zRFNyvg9;Ub%EA?bokBFtzkZa3m4&}c>N5TYy&AKsn@Z#Aaf(#=26eLb8^K`dFb%5w zg0ZR2du^2Jdu@8PVZ~v^i(2FAQD&CP4N70+sUn?1RFOdiAUCMsChw0kmG;MtV)VtD z73dR>A30-X?RKzUvUYNybWp6Jlm8a@8RDBy@QO3L^{3+)|GePvcK$-oKU($;_@FHOgw(fppa7XIL;z3;_uA5>eJrVJ(uDjeCV zqR^QT$X9pN?J2(h$e$XVimbk`zgT7Mnf_9H11-a-_8`%S$gifKp~m>+vM}qIFuUse zmx#9)1VtnbRhy3`>Ah?(rQ<3+7NTOZXd_-xihmW~ulzQQC*dMN?ki=qt8cvR1NQ)x zr{A=Wd4FvG7i|u?Zz*2=mDa5JCy=@R?A<$B!2mX+Pw_-pyew{SR^lQXh-PE;-N|eU znLrXC;LxAAM}Lg=_P!BJKOiI|l=$W#S~yv0p_e~=!CL!`kH{vH{V*@%wbazs{PY70 zy;_x<;^VK;Uj&83Kz@(@yPeD*U;tX+{Gg60w6-=Ta^9>xec9OhrI%7)`h1nYVqzYO z=ZZ5YZiYFJ={_N6xA&TPVq5oZ zea5FqKw91Vv9N!$n!-hk&Yk&$+H#k3laZ}c!l)-E7W>>$YT<=;^-7Q5Zr06(#@ZiB zaDGWQD9Q0D+xgpOalkKD*Gpak44Vk#OGgIJ+9n+HsQ$mk30RVV_3cn zwx^fv9}^!C?BI^AB{9bh&r6>Wm=^m`J&)F1ixCday($}VZpSR_{qKB8#KO=X&V9*i zKG#qGL2h>4?DhLR)#b*%IXo{TRyrm_S=)F09v*wY9hu`vy z*Yy(XYLC{l&ehi*vAjHfywgS||KoCmV6Wz-LPcUYZZh|eA7t ziTC)>$H@ixoU|_&ETvS(x@E2f?JgI7+GEqq+N=8P?)mwmxIZ+Gss$&16`ppsQ2Ro6 zbp6}<)NSDn9;ItLnbo0*M*7D>^OTE+ zh*zv}D9rmR1Q)Nyv;=n*y(xELt-ri0b6^L(_)a6K3O=i2&UX{k(9#;x&wUugp6>IT z*LhuBTvptrsHM2ulW!qikFqSJ+j)X9xOXT{-<;lmCgI)D>&G5FkDCAV_2{3O2F*2U z7P{xms}mGVj)~d(>^ZuFiT+Oa+^c||IgfB{kyxdB7jkyEMXCs87qOp5?mJFlai&9+ zKXb^nd}48S!aIJH$3iUZ&(=Oq<;JAu0qq-;uQ%dlJ6zTp_b z5n&gMexUwsf0_4v4O_iC&))ggl8nx|w@%H3YL*u9WZA;6^xF zh<8t#_Ruc7(>f98Sarb#mKD*ZpM6vL8M@fUd)}kl4JYD&Fp67?>1n@e>X+(bv2aMp zRoQ}JK2E>9$xGm^ye~-0)iCj(gZ}LDZL6(rHO#__P!*5!R!6s|IT?F&X?Jp+1c6I znc1052;gnDjCc}gDMK?9!Tr2fIp*6ln3N&0+0zL&O$1wZblc_$f7 z_bXB@ZB;t58o3LqD!g6PFDbjT^76}f((ic#t!)MtLllV#_QTr$Jh8~RzHswa=c%<# z($y1Ov_VBz9~r$|)-6qXdcVlug&O6>eXrg^$m$8w&t^j?{Kog-m#@EkJyG|o=*n9a zclEPsvlle@BlQNfdCZ=k|GFYpmnUWS)8wkH=c9?O#@$h$Z4|um*CIP=>g!8MibNp( z@PbIFLDYcdWQD6z*6`5Z^&cZ`3%O@?y!`bq>WK1KW2ttJbk!xMI{~$C!^r%XmeP}i z$&Xu48b1;$q;AT|eX#1?VMx{D=5nHi1@(a?$F5~v`rMpAK)xg0T7=P+^2b`I14E7P zSNmw)+!XEVlN_B9_gJCb8S?gaLu^a(gC&NCjt4XtZa&sp2?#sMbg79l@S3lp89x!x z3KjU`s$V=%vgrfm5m2KMfP{sGK|IIc<`>1nldMtUO|U%B7mBk0A_()1T4z9nAj~&u zy#y*e{|L)szhH2PFAx~tZGm{0Xh%pd)5*ufTF|__jXa=CpaxX^+|a`XBA^e*NYtmX z!erUnySs`ByC5FM1-|RSG=Yxw-#cWL_qC{YZA<2q}`>E2A=%;i#P`$ zgGosVf%=r^yS~MD04Bx2(>Yj}5(7_wurMtKo+G#Tj$=~?EL8wFN}@=u34kh>5M&QV z*{LF&p%7UZ)B$u9!c6P8sbQK34r}11W9Xa%j=kFTOyq-RG`if z888Y0!hK;JC-4-+{3%xkA3E$21PX;8Iz=#28=@J;Be4URVD<} zGx4jocP(dL&@O7K3a* zd_lf8EU96Q<8M7Pcp0Eo%QxS2YX?5`ccbgv(8$tVPG&!&8_9e8r{^y}q|Pi{8MIU9|? z|3XJjcG-F}-km z&9j5*SHfu}QT09De|1DZ|U&j$9NP zj=HF!{3VM&nd;33Rr2|%_b2{oKYAvx+_xqU?tbzfvG9PqknHy-rBkAr=g0f!Swo#z zh}G_syAL;Bn{@FWYF%>nZvA4rQ&c(lEBR=|eVtO8n5&9!EU3i3Cfqoct*)-#YJD*# zD|nr?zP98wtI`>*bR9hrw!t$>ZEEh>CrX0p8*L;eLjMUyBF)XKKCZ(|w-;Oo42FAe z1$1odMBE7p2{|#DU($2KS-`eM%y(r#mV9#3oGm5@0wZ{|Apcn1N;9UV`dUomP(F)C zJyKu54fgEThi-Z8oHw71qk|?!7;M=sK3{RFLXOfT$E*rA4xZI6)%2KQc-=gh%oY8F zi{+fa+I8@a3({Afo}MRUFOn|U5v>@S5c3J>(TkVv?x677TIn|%epf_kXU9GJ;_CE7 zg>-OjZW2F<-6;y8X8|ut=-kby-`5^}n`9ttGfi2cIiv3F&RQx(7tnR;VMkERhuddN z-9#v^6+OyWIrWd_c8_Fb;IyKhp!_4*M7PJrCVtL*HruK+TO;a6hlWUwNBgFqrd1ZC zRUBjaN2c7?r-IfcnfchatF&UKvNWSbzrL_J*~d$&&5YVNzR5(}9Q(0p2G)Kg6LJ0c z1!8V5MSWUD^OK!}+tiA( z#LgD^(fZth-!#ZaI?j`e2rM!!URk*__u$M>eTw{d0m-}I5fVP_#<1+H#OVpU*_L!N7UC`o8E>DX=*%$tb{y`yseWl-sigVGqaTT%HoPchs%|wogeBX5tiG0d$EPY`t8!~*j!fd8Fm6eT zV?dM>{{79FLm79Z=szS?)_>O@M7JB+#@a@36`aaaR!Uy=30d(s&<|vItBfA6qKjG| zKp1z$R40Z?NU)!*mizg=6#h@VWp&t;cH8*%lQceS26v21x_c10Z2GNAWT;Q&>}xA# z5Xm>sd6s$5x?9CvFexuTlSvu(^s zBDmbzCbCTz_v=LCMe}K&hojN?FUs!jM4h4#T$T&~zsfsS^2EG)I&OokVqST;JhdWh zm0eMjSY=zh+sSV_YbOCrPb}4Kw$k0=_>5*rchhd(jqCH=g=^ffjHTNWuPFxCc_#ZG zwrt<7FbMeJIWy|9K%Dqm+3zJt1W1L9irsLjkd;paCKdWNfu9OhlIQ{F$fbX$LuaJq zceAR#{E-fY1^|bXki7a|vLI~l;Vh`1;xd5vNU4nmqai#(m>h=)mBt} ze(G}>FZH>Mm-<}BOMNc?nfhG)zotG{fb@bDFV#4Q2Vcj7Rqga^mq!FcH!TNxhQ z{2!^$JYLE|@V`iXF8%LQpE-(afHfpxQlG2;PJNW%U`zDj6zD3j^P(UUX&|WvJU>Q= z>W&8E-Mf?zb5frMp18wf`zbInm(3)A?e@pI^4-dgBaa;JQ~Jk$UgB6I&x(q_fGQ4@ zrl+nVSE=UU6SHoKKeZ^Am zC%4Vq^!>y)=S${1eB?D5vA>Ufnuziwg##riJ`sUH*FhxQATUOIu`_BXr0MU{@SP=q zd?7DpIWx`8kfdd+|^vWfH5 znNOkllGNi{dE*X43^OnMXRXVOI4&ogs zhN5vaA#AaiF1s%`a+UnfgYofk)6?D!y%un(7L9=C6R4O`uTNX+BO@c4={kMNDO%-Q z6(iUGVR{g8(k-s(LYPhVkqUvQ-y=7VEn7Ax87PlElM=Cy5eRKq zf;}%klb|}5f5Oh_z3!%YnHX{}ns<>XpVP{lip6Qii!WB8$ zE4nGSLS?P4-(N~(H0M9J7%kS?)ti=QCg}00uS@*5WL~_$ls2#JDfX#$+-FfO@%e?z zpu#>f?1WkQ7p&fV+U?Ts-yp&3gH)QYL=9_7?8D6?d+x!Z!nGN) zW-+a4E3|i;Vr<}k&yLT)V8Ppt*^N4MHhu;9)!I$$Hr}5^+520CKM%&=-${5QNjl{L zm89SWVxri7L1=02>$@um`^HW4;p;Uga}LAKpkuO~H6TzKf=ykLq8y+VKggMMzEHjw zq-VdF3cqvLuNbOnwtQ=Mw_Suxk38r-rFa4xxn-2eqip-w)R!;$3>}Cn{J2_ajakd} z#J$?B*WOf1ZC5wZd!6#?=+lB#pIq)|ec77aYG_1hFyFhj^pN0Tvf^CBLa5nR`@{02 z%HiQzALOsfq#xtEa&v_4TM5ix5$+dm&R$4RUlDMWSoaox=yHGa$)fa%a-tVs4x~F$4CJ}@5-p!=PkVg*($9CR zuT58q39Y4WJw1IfiH+0e^}0atoqW4kQjY=h!4ApRJe5W5?&auTZ^T-UXz#Y3QhMa5 zxWTKcUE8rM9(YXGqHW zQ=zBcbUAI+i?tGD58YQb=?>y+Ed9Q*B%-m-Ku*MhjX$487O>K=Vsp*-w(9$nVj>jK8>pJhf{DT>Pb_q39i<8Pwf+S2Of04W* zEp_$DFXtMOkmE2UsFAOc_d~RJU5#I7Xy7@Ema3wwk0h7Gn9E;`eCv_63yh{4sH|GO zMqM*+s2Mj09!_+U%~JL>dv(cQ*M}&}uJ)P#8%;)~(0OPq*ZKM5HY0N!o<|2?o_)&| z_w2zbr5_rRZ<-niyvhl=s}xJLZ#|jYKF9jAykLE9aX?UaqoiO1ZY{I;h~-Ulfa2w{ zlh^8Il$2YYbPG5|UwjpxF?I=>9b8!#2$FPN8rprv?_JLvJb$80l0qBMo%HYTjyF^G z*I*(2nOpcIPrC8Bb-RJ(AhDC)>(-IGa(Px1C&up1y?nq@j4)}X3UvtMeFPwfU4+~c z>PHiLZ*RXDdfWHe&r+~zAhH^!I1^!MMkXNJ-yP;9A3teymhB&#)7Lw)9cwG>pF&7r z=HJ{*pVQc!KG_@YT*duib6BW;^zgN7Tr(A5r$ArFpvM3}E#zw`5e{D|<^ z%d%!n@|uL_S5NC68I*E7-FFN{It#K{LBlqcZNyg*&+-YbT&UtvTs&! zSEFPvo{w2vkA1Q_9(JqZ!WjqB%U1gu>k zR7_!4!Tf6GhS$c-3_HE3FBR^dPv+1)AMxHjpCC0T>O1D1j~mdv?19~Ol;5l|XCxgy zs{Hm?ct%zM&&xHUF8K@p6cbZaKjyjNKu%kI{3`LA;}1NJQmnl9G`q_ESgTE&)7X93 z;C(~f{FSV((j7x~^O{s!|K$f972SUPYuPigrHh`O3xYO!NQpeYBrn#4LcXbap|p&D zB4tmm2U@E&^#l?{Gsz3Z$=17my=9d5HE@m0!K)m{BG;HOyK&dQI1AF6Dy>i(lm$EaPd1sdF zc9$e=Oq!R8q`e=NOHz~pdXzi-Uo1*}N$!>Su1PXFNY|PBQrzne>u^YHU?7~8;(KUS zA*e&$3nMt?2K-up&d@6#pNhH@3>Ic5K9#swOBhxO32y@BmN-V!5MI;}e;nN!S_6v~ zOPP4^O)$=ILb<)#lbpT=8E?SLb`s=))y0uSNxOjLAJlRQp5rO!XFb7^1AqXV@`>nn~y9iB= zdI(%p)oZ2A^v20vW&PosSD45x<(P%;{BYL3a_2UHwIH}?Sm2R>HWf2tf+4b zEqoFw2q}2En=yaEn@&uuqZvL^6;zLEnfLTTOuo|E=JsK`oe0_R3+&#p&J6Eey~EWT z&&5(TURPH)zP?`KH}}N9WvXWgVU#$zg#OXq(9jUTLmo8iSU4|Fisyt&X#^ zGcB@Y;8R;$8=nQo)6P2;SE^KhW(~p{omQ$vW{kn}JPECOdA+Y0mO{so>w|rLeIV~u zN6rdoQO^5fTS|;l6g@Z6I&W**-)NjemT>5M{BXFM@$xJ!a_(G(&czs=2-0f~+?$fO z3u5oRyGIh)@N0Z_7Dj7UR&D+g<~| z>-=l}<*Z3x)_Sb-!?(#N6%E5fLTK)vz2_g4j6$PNeXz(KSy{O}{tM~ty+fZ{jw~DO zsAPV%ZPZ~Gu&F+D-4}Vha-p-cll4=kR{E^`iEzTLKA|%bQvLbw-od)3(9X3_?u6Pr zcwT>*+o*EWpue`H_{*ob?sgTw=F)~qeqwX?X6B8j8YnWo`zW}8L_(R`;p?>BP7%~<_fo9g^cK}9 zbKm_V=OigE0Y0a2_%jZ{n9n$zXfL{vj2KOvA5NSfNt{2TG;}81+t=Uwo`Sz1$nl(3 zC=kSyd^300iqj!`_D8oivbX{gvhmO;>!k&c|DWc-f`_y$rSha z%n8}+3+-3j%1tL+#cmUxpo*^IU2u~~u&x}kBRuh-=S)R8MZX zTQO2^HmPBb`AOk}3`q(Bz=&@C<$yKk;NYPC(A(Q#A1RbU z1bcT-tH4v`cNtPm31rk#rypwke0!z(0hwgtP=xsuj~_ZriV%3=+rIb9rTINIO%3G_ znKTYp`p}j1pyy}%CWfrZYO4rt&~JK#-rydMDX`p4Ae?uLzs6eJ^i5kV-+A`>xnan| zZ)3yAAU#*>xl>fnj~bW!9H>n~R2G4nL{y(q8jt@ZiC>tLtalvKFx&XNW645FyPQHd zH?&zXiS5Xm5yf_x^%ss~J5r!**p7sPE{WY~o=|5vi zYBqn6^&x^U9s5z(^v!Fv|IO;s<)L*D14++uNeayWNL0oD7?=N%Et`8;B;e`j{7pJ? z?M9B9O)^)=dSCBSYpXxEIBUf7zN%UMtZ`0^KTMa$|H%*}P)SiuNQdveJyWVTI$!Ds z!IzuVBa6GNmn)cSzg@Oy5^eficuX!+=w5?g?O7oz;&-fQ7+g>UarNWp{HWrbdiyS) z!1Zn>Va685_Y5lmO-W)|TCIFmOA5-7no_{dR`nKJN>a1~o~(xN$%NAMcfntf@t^)F zYd!Ju<%qBFKeShm-?>MA;$GBLqe4B^E5l!<%(?gK=t^2bRpJ>!6gZWgB*SmiwlTv- za`mZgHasPs#sd}}FnV=l$-8pOQ^JVS0^^FTq4jl>%kE#M(0PotfMKeBU-Fcga=5Bb zY4M=y%#$0ZY5`aN3@^&ZVMSw9f?Kz})8?G*&fVh&7=E5~F8gAgp9`S<)OnxWyx+R) zp3-?6g2Tc@pED&ij>|NTw`tKE0Zvk)!h2GpXK-nK0M~xey5O4J3$q5u2@^ao#~n-9 z_EwK+gIO?gvQ-`0P@uILF3kQ|eNK6?%lJ!wBxtQ zdSO6hW9a{3cBxX@ z)b^v*#gbX)vfaJ{JJX_m)%!=5$W7k43ZX}8?`tM~aXt3>wXMy_gz{y0sFWTLx4vnm z=lY^*RO9%M>FLGJuC6v$`jbP|{$y|BMV+QadjdQ>JYt}deV34S+|GOw*`5i_)>Q9z zNmk0=($zIlT=o{U80`pgZXOWrqV9Dtx*R`vMm;`xo7Y)SEkUB(@~*S>+t>blpXWbC zuegf6c>0v7&&J{kwZhJe7ss#k8GO#;>aL<~iCl@IozT+nKC4SBqLa;>vlPp<*pYC~ za5)i7=NUP`CkcEd*_b-Y)ankC77d2i@(|wuNW?^P#CY5*X7H{hq zm-rK>2o==r6ptUTBPS*%UaG39UTjJqTc3aSsY}T{LAzmT>9JFUSz7AYI;2r8P5VtZ z*T;OiQ=ui4^ZHd9V*Xd9a}(=Mek1JhX>5%*~A1{9*3OW~UK1-Ia- z^&f-RnbQ1GRK0U&_jM6s==RD)a~!hYd+p~pDo0z)Fg=Cn4qyzO_n zxw(_W@8t5Amz}aGm6er`L^g=>ldQ`y8 z+Xg^x2HCX6Kbf6sPxIghPE!AYOP-5ckK$q6HHPx}o)WvA;@(^OCOaQO*fm`Tg%-Dj z;y+b*|N5@^MORn1B4d0U;*{wp#bYJHW;wP#DhBpiRIM&au?CXen=wCr{Lu7lHges) z;I;!&hbJ)40aksw%xAYkm)+9RGW_Y&r&r(UvIUQpR}ye$ArS86rh~2me0+~*zm|K* z$0Z~TW!+txY|S4%k9ww{yi%G(IM|w~uQb}gK2YwVmv1bf2fwTH&n3sTpWwnD>+G@b zJr>-QHN7WJJf9pG7zl!0Hp&BzcjPCtQuH~HWkg6lt7phrE=&2X^%!)#%a4KHbCC_6 z%6DDG;&XdpP5l1#dMn<+j>en!HkRzC#B8jsC7!6IU5bm37wGHg=pfzn5+EYg4qs{HNv z>gE}sq_MclyM9TXekk%)kjMMvr2w~i?OgrW&z`z_c=(h0OB*bm66q3iFRoMg_`T9wE7vtv=Z6yBmqd8Y2dH(49UBMY zvvS>!bL1~a-_mxAjjiW~R99Eu(AJJbaz$vFOoo5kzH`xy*LlI%;VQ=qKpc_yAQhw? zSIpNW{xTcC=Rt1^3m3ahM>Ce_W8z=%JV;ygWSB_PpSWOLOh4Qr8zCw|m(HlZycA>& z&Z^<)jqd0#&|BPETsH@Ac`$M=qvw_@7k_PfN|cLLUI_Mf+|qu!6o%A({cE;C(oFbX z_Hp#%aj|4AvCh^?P6a)Pm~P(^0`fC?QoC`yp-gvUX%w=U{4rAO9OijKJy@&(`#iUJ zN*(wO#`TLeE>LrdqVKIl^#~7D^i;&WDh8VzAI#|BYlsD1rxud8*v?agP=6!~BUxXATKflWy64suSvSq*NH z8#pK_tWl7pDr^{|1N1^^yqkUdJ5k*n zXN58*yK*;+EnhD#&@s7(YDrRf06Ch*;Tp*qsF7fE41pghnMvLF`=Tp1TYUnbsP71m zsTzD7W>RKf0vFrR6>Q(REwQ|P2P)yTeW%}ZdX1!Von9>b_}NgV2{Wr`?+;c+k|GrlKy&|trrPH8k^NN~l@k|g z9&xV;-UuPonDY+I9;9NuIq^y8-Y3Cf&_(L^S~D!ux_%uyHa+XgkNwo6{Xn1?nmn>( zF5Z;{@M?l-;9E5o?po6O)oVP&f^uUp1?x{>sP^yw1o@5Xjv#$q-CHgC_qi(e|B(9~4WRGX-3{$D68m;9z}W1L z=$co_phy3sIk9=}Aw~)EDoQz?cqKV|o_DaF6>#l{aj>`Qty=>6Sw~&?zU#4D8t3%M z{A&E%`WQ0xUiQ4Z=*APb_%gxqC>w)`_m9m|3!K59)X%3FM=zqb8QRnP^YgjGM%^`v5_8ArA+x0@neNP+*Iv zkk7}DRtb{JY5pLP&{IfSu=Nz_R%%d@54vBC?(tckiw;Z}A3=g?g-W}?SUk`z*eAkZzm4=_H6&}3wK?j{_!xc&V( z>qg?MbG$Wtm+mpat=s!%$%-AiPvme9^KEk8DJGxhF1~#sA~CV&E&Z_tBh9Vi=ZYsk5#f5Ff zWPFJ@E_5|%H~)+6v%W(9u9;=$aKp&$=L^2|Z+=$su@Tw4(D<%;m4m5$N{25>dH8rU zw`lRe>v~YASmYdSGbaNaY%j+3pch8^EKMt2k1;7_jBxJKd(|}oCaP~aiV-#v2?(JW zmG>eQuXHobP$kdQw!Kc%`Q&M@@i5gY8*`5?tWm{!B-}Xlq2}A?;Q=F`Zz7k z*}7k<2(*mn2jZ>_!D^IJT6>LmC1Pnisa(;Q>DdFX)>CwELllyDLi{}^CSjM^FHxVo z=~xikJdp;}8JA2aHzkhqJSAVz5D(VPJndf2g_htQm=xxwPn=gQH{CVmV@ilkotpIM zSQGc17jU)Ry(~Ehzw$o!k{q0I4znnwr~&S z=bd6K;B$jF^4`)tr@8Z&=uF?8%QejM<(ct%->2eD=X(C$!sYG)&vrOjcWy)|!-}L8 zEqCPucCnSE^0{lS#!YjR<-RSY;!#`uBI9qq2sA8R=(*s{QFKI-gbA=wT@VQgh!Eq{ ztvQpeJ|_f0=d{?*NK%jhm7(5mukFRW5h_nsRH|#ARnS$MbT9ZUf2JboH?MQ z#kHatSB8DErk?%a?{yF#e9)CCs~(d5ZsEgNkDkl(ODv#fONCz^gT+0yM9%YVi>5U^g$%N1YfYVlm|kmp0oZNdCmd}`;g#=D}p(8)Tz#v zY+8xwi2(|yRbwl5S7mHc=5Hh=)jbmXs93y=+~mp_qHb^w~fzF1h0>{=YDpEqEHOOT2pN@Y!?$!jqOBHkUIh) zc5N>O2(-~qAsW{1R0)#}{m7@m?4`siUsBkiAM5)%ij+rV-)1ORF`5{v%9h$s_otNV zv2`aqnGmLaZ*ymBv)3LJUY=_6L?yf(5P>R3`JO9%`y}vn>bd0#XoXGGv}wA1n_;fO zK-X#WV1Yq3*)CE043AWG)pEUz$)dPAg7#=3QO@mQAtEX9lhfkb2?G2NuT{=5 zZeqpQ7D@JqH~QY2vO?WGcz&=G%STnVPh8vM=}dphla}(fS1yWJ(j<}OavQ^#9A)M8 zSogp(Z4M?nG)44FWxBSo>&*u6loHF0j*eEo&axDvW>$D2W>IX($IGBM%Plh!Ak*zB z?vp0-PgjCH>NGIx5K)m`iM^h>@}mq9HT~ShqX_*PGelHPcA8V$V^tgq^sY)fR=Or* zy4@cKa)`JLRi-IlUpGzi$Yj83NQn&@miqnZ&jJ^yP{I*2JBdm0jqR^BBe@u*PdTz7 zdpv)5@MjrxoR*3LnY3Y^Xo}CLO$ZM^F~~(>vj0N0o&NK=u~90rQBf6@qMWef@^hDE zEpL<6WO`M&w73`~Aq)^<2P;KMMdA2hhoLEe9_$13SBl+cUxBHk-y?7jg3@H=MCDRq z0Q3`ZQ)d_!SN&>7@zriheAsu@cjjoKGKM-)8H6Pv_}ddl@>6j-qB4nUtK4CS%Ooe^ zONzH-(l>{-Z)u<)xsty<|Njm8eJFA9ugfq~O(y@6l zANbO)l@fc-nUp@CcdB&laHdEMZF{JQK`wffz73zxHRCu|U!V+PxT+?*(*8K)T-n>$ zH-iEg&&avTU%?;G{3f`&u74zL#A{)GqL!#WTaoj zGCFWJ6D4#r|#FxMZtq3aG|sDjFWX{!OV4Zb#Wv0V%?R&2}`dl$4dNq7nQr# zS`C&YQwR`k0nE@^w^*SYvd-;~mqo18ZKAR#6HFSqA9*LZoT(hjbQ$vbN1&}HN;OU) z%d`8}l(=C2?a;4~xo+Na6?TEPVE0L{=%=t0{`1i0<#-drrta65T!xk(L3?In;*Sko zv1gkb+6lMW5^CL4H=lUd$mSDwX}1*GwhEOUJWq4oML7=Ic+*f=DXOn*er|$qRj@M3 z!*J`G&(6|pzv+1IPW+@NQPb;ggBeMyxyl<<@hLRw?ZH7nTq#3M4i+gdJujPIoCs-W2zG zv}IHLlwg7^OY&WHWT05<;AXzqkc*qH`DL%Df*n4)T`_*wh|AP%!8Jl2DeTRIS_uNp zPA$mH=N_qjsY$b~fm0)qTM`bxjBVULEX_{(_G)#n8gy+z*&HHx#Z*q-j_mVD>1<(z zXDdc!U$QBw6PhgPOZ9)o8j9?e__)N8_T7%L}b&`k<<&j2TZ!JD)53uf+Rqp6`-qOD@$b z6_t*f5P-Hf|3aMPfA?gvrzPH=Y^|nv@b#_{^t}R`<5C1~v+C!R^HFcpzh21_@iJ^o zFuQ)s=$1X8T$53D)u68SfWD+BEnaQKye2V;%25T-b3VHEI&(Vqx9n)5uMIj?^r3B2 zrfS;G#EK|ImD;m)r}e$+OE0|D*jq%9Z(q`$n376G#XY52q~ulFQ8<++(WziE|2Cta z&)nIm+p9ldolAVW|J45J3p{vZb_pCH`mT}`<3KWG@cUilX39HKj0$yDH&4FjJAeG; zcd|TH@n?!0B`6-_uxyy)*p$fv&|m`dZ8Lm`up>`emZTsxU|2!D`tVV?n~x z^`i@go5x$k&5x=C`j)OYt( zXx~^caW>I}Si~tupD{|3$x4us1A)t;wSjf1vu9;S^(BJyIb?bcC(Ys~OMsS2{{e~n3 z2e4GbLm!B9c(+35$nuhl6l5yJ6(ULD17v?jzm=h>{9c2x9`d9=B7*-s!}(Ml4Qc-G z<%pa~3Ez`~N(>=FIY)%t!;VCp5?4-;p-HFf+O1;!SWLtJy@5zlz_?{+a$r~7<$kT$ z4jUB@g_ZS@8aWCU5oPyob#vRJ+etVhLx4i;)CGya8t_NuwD$WJJZGo`RN6g%iM0X+ z$~nKFG5OE%qS3P_>eF>I`}Nh)CO&h{Wd`z^FS#O^)hp)fb3>mglo)@lcF%zJq3DU- zY|{y|$bNCwb0HUp2LvDX-%LT8{PU!XWL4T@Z0`8glY{Q%KSUo1D}~#+XX(zg<-NYc z*BEQArrXm^c$Jj5IJ5IMjcs7qYMjcWc_WcZrLXEJf#;K;fnmPm-&8aPZ?!Nt2h;{2 zf^J828x4Odw72LpI9C3GrtA8MgpHT%m!hnN^6$7$4!PCVUopOx0$AiZU=xfF-a+fo zRQA_kB>O33k;xw|c&{(Gu-iQ=G@0Z?13g7D*akcwC$QR7d9^&PdnO}uH;duo2}viDntQ8q%MDT+&CsM>J(`Bco=oxt+Fv8{X<8J9 z!Zw0BSYwpdg}>T01}gvHHgx^Lt~KUHs~_rORddNKDRws;!fG!5ZFW8*qqbt8yTM1j zoiV3^#|&bSsuUqIHGvqtO8R=zia}nJeQ?W(C6H%v{-Y5+v1;l1;_{jgyn$#zyft!a zqH?2xZgJBjLUD2A>Z8QCN~8&M>`+>9eLln>al}&zD zuvV4ROTB*jEVm`7-`=`)YXMZJ?-zYvX6c%r{?TSndRK?h4>WfFtdTHY&eLy7dum1= zqn>VdPl%h;Ff%jrnysz3hrB!q9ZgfE=h(+1J~T8mtcjwx<0OwuN)C~qeM4L;Bc+n{ zlc409iiwE{`&lw%5vT)pyY@m;^Cu}jQW^$i`x)d;spo8u(CuPYqjeB6lT_r{IVa)5 zMOAt>pDi7SrL&2WAka@`<}%!^i|N1L#)t7=*BV7B!wzqJZ1;)?DZ(ZYozGqG^Lxa^`-H!oU)!yE}eC~&9gvE+VjBBGjSEs z2^pGqiM#*9t86g(o%yK#)4N8ORFnD&A%tz1x61AM3l~`HHM3?u5hwGT6SB8Da*XEl zJ#a5KRgvl=+pq8`BKD1sD->QsS0vg+(!GXa zeBY9&m@|+_OL50Yyt37ro3QKRCiX<6F-Z9Xk%C zimnQj$n(lOrS!0MbU~1vu1vz7fT3p$8r!CrN(T$(Yy5t)o$PX2t01-YD7ZU~zd`~M zKZ%(-F5_%)I~g#bB9sm`oyRwYq5Bm+x1@dR$->m;SD4uB21cAEqwY&yRvT3lzotrC zaGhS?Yj#?L8fIo{##YEOUa*%6A;)kALVRVGnCOA^H3 z?4-(Oh4#4=g)w8Yo%f+amw$YJB`mO+Xw>RcKffwOx0MmDb-SlDTSS#%!R^us=7(-^ z14Z5R6;~J4lqZ%t{2l5G*1X~?r?*fEkzKJ9ZacT(O+=OD>g3->HwC@dvOmivY)eYD zEQenp9kgFVwE47_5y-_$FG$jwkzzjAMZWj{=H%g(Vs2<(J{ z;AlDbyO0oPD8dQ#TOzJKjI|RC222fsz|9cW*88$?{{;)*NAmoA=mG2Fdw4mBHP{J; zRzSefG6zT+iN(8z zvczm4ZuuAf{Ie#I;9d_-+c1bV069R$zZxX;7na!37xAWsgM{~5aEL3~%nFJETfhLZ zul?5_PJu-CFlZ>2DI5*Det06xN!#$Tkg-f4_=&z3D$FQ>$!P|1ss9p0#g1PV+Wjrp&$@Dj4!Jka-}`lRsXHhgXz@{ zPro-p0N*;~oRL@)RR6ng?+www#~!fPJY?Gk-CBQY4!37l|1#}?U26Z;wXyorIiwjh z*aCFxFFT1P)%{EG0_pvg^?|hdduXr|+7>Ia6(BND9{tO}urnC`_cj4l#J_f8PkqLJ z8s%QU$)8FGQXu>-J`mFE@J1f=n;+VNJ+9zCv;YH+6C|jTu~3N&1f)tJYb4knA_Srb z48d?0_@M(4Q2GKt2kIFCyPWQdYXpbUD)mWVA<)F){lROp#5K&5+HK&5`9$ zRHc*MVZ+Quc5yiE=rnyT!!7|&xbDl>1hqYcQXk4x+)bRZ>7G zV&B1j0uU$ed(_r^tg%0flET=Z8Oi1*%+IW3Yz*e7L=s1LN(%c@r6UD8^kcBs{<({z zPv4^_-|IiS_bRaWI=siXcaQG#-m4rA@4NR3Qo_Fa-YeK^uSssDFSMyzXzY!j+HXta z%pkQ>$X0@-T=!fTKIW;l{CJks4Tz*gx);wFSd%AUKiLoa`+i zNHQ4&0tNxYDOCZR$6@Fc058nk*;Fe$~AcXwxqLIU? z0jHYZq5)k9Cp4`J_C*zf23vvA;3K%E4j8$=P9l9(mH*NT7=?nMQ8d!n7gaDEP&1P2 zKWJUBszZ_DR7mUuoTo=|lW75G0t5*`V*XP32)-Jz^HZ6bNoxz6nF%;UEJ<~N6(Eqm z*MLTXp=cCVF*+EK5~CR0vT3oLu)V(-Ye7&5C!{6zkD?h4xL5*b7#IqNAW?KmSTfoD zjw5)Rj8hQ#zNU`;=8xeD10oXR!8pAArP&{V(JC8K3U$X)?D3~iJJ=8GK2YJJq!StnLs7~>u_A(zZdA9lRQ5OVxBWwKE{UR2 zvIltK*iilsJ|_-|q<~@U3`U~lFyCPb1;a4A!f}WMh${F<8k`vdD#Yl8SPqDhOn(m~ zw6fS24J5)Db5=7-1Gxww7}OHWRu15Yu%VKML6B%1%8}hJ zNw15|1%7uNJtR0Vv8x-yp)Q;@SpMy>I5VKZs_DRf4*A{Qf+=xZVFN+fQ)mGW4EPib z!i*ma@%>B*KS+~kAb^;{{vS~nQ??M_z{J`^0RkI!NO5u>)rMF)0e0&4+d0XA-BE#} z&@A{8;7__|I@pjzg7r!E!^fcjW^)kO&;&uz<9jXU0H(kV2kaGNlQ>P#01%*6I0S2l zYzO_?E>N_k?Vbr^!UfAA!aZ-oAZW2;z-T8FE^q-&MI^$>f#pw)?_2lLgGmk|G3(!$ z<3bNk5X^8V81?{R!*@IZB--8qwLb%+mX4~%0e4{Qkx)w%{ULfQXCyliT4li~^xx(r z(MCAIt!Myivq3^osJ)P_tA*o;Q6jeMFi%GWidGY$jltdkwhv&#cnEKg6NCmQ(B4dk zmtl)W<1OQcj*iBG+VD5yIo8G-FZ7Bo<5Q|bT@ z1x($8rc^*!?(Gl#zBlaiq{fu=`<=v?1~o1s;zA{0k-cA&<0 zbjE|_W2DCD2LVSNJ!DbXv0VRce*)GpXC?&|T^+CuFdftZ4V(*LTm&PjWM z{1Jg1u$a9)+&gJ8I|%T_=HS%7yMSZlPiMvEjC=n1+vm9cZIED0ZnZZHHP&gRt-uaw zzyz@kU_am}Ye4DrIL2BK2LuX=@uQ=M!v_#lP_#hoN7w^=t*~}<2(@CS;;Ffp?nS!eJ4Fn2(bl-8X?s1UU;+zF%*O)_+TGI)PNorMqvJFP3 zfCSrM_E-*Z3?N0KSNdZ`N0ol-aZkIHN*D`Of;%{&>GmVT-f)_O^*388Q8?H{wm&hy=RATZuQpc4EdN@--VWjgemR5- z9D8?zB*opCaQ&xk;fe^HiRyx3PLLzNNwpx3PQWscV88qvsCCi6dcY1c2v^p9HA`Ds z0tX#tc1(l<%>Njcb|0unH6COi@&TIS4?3H z4IpCJn`NIDW_p@K#RVzu93->G#haserRH7;qJ+YMm18q@DkKodkhp6GN+9pvyF_6D zGBb*_) z1{qLMY6IM8P__t{gLi>w5pZC8AXYjE?4=JCrue}e0#Hjk1|YXOxKP>O6rc}^28i)H zsqqPE5O8e>8ZZtZqq2fvS{S}s*g_NFDC>ko0?Ne1DqMz6`P;OpF`2-AfkbMC!U}}D z2gP1Pkwf9PvG*CYN_&7R!U_n947igE6Swqif%*{>w;1ey7vDFvWssPVMSm0Q491;{ zxDFb7%v$&FAlUv=N$y>9Fyd|P0X?n#;pSm1gXKXzbkN5Llvhx=9uzP;mxE4HGb|qp z+>Pq*dJ2H{vKY$Wtd9Jyvi6W9U`*+D6t95WLr~#O#{RdWZ=cQqYaZA#l^XjzKw#1k z+y%f9j3#k!5$^TSTm1269Q~i~&e8oA8#po0w)DT-Hz1f>dny!Gt5_s84#puUfxLX5 z>!0se(jnl7uIxDfxSta}RP51M;a73AutV1kH1-fM$_WXv!b(89-@?g2w%0t0&klD# zapKP@|4l;W40tZ)uvJ62P-9(8))vUKrO|*xXknca+or=h3l_wl3k0qNZX_-kX-I9c zQqY+l7Ma%Ukj!*uhlQpkhqE_rZsW)jMWfqXuyC4BdxB>w*7Rl-_6%bJ*F~&A1 zK+C*%5$|ujzjuGhJzHjFRuw>c9AOc4^5jxkxt#qBy&)XNupVbO{VX0f%b7cW!_b7I z5o3;EZaIXy>5QiXHv>l%YzLw>0citacw*Jyrh*BqqGt3QbqinJGEyc^;_9GwQzUa0 zR^rdYK^{qMi?`o)C!|2k^yMpY6ZyISofwk2mTx5@S(FvT7x2&7bTplBV8eURFRbL{ z<-!)#mgHQna#wux9SATiw%AoCAp_}tgf(;!0p`{8K$^l6c?ipaioEg%Af&Lv=Ne>R_VSoj~*)A2kq%- zgu6X1KbMQch!^*GsxmVqWVPtB0OKT5>Ks-DD=bocZt+L^;g;oN;=)i!xc~!5s-G|{ z^&1Jj9r;ZcrZdD<3SlBOPV>Q4(FJ~Lr_y)EXQ`Lzp$6x%4f4OBMZ0y)f9v{)>B}q2W>F#_? zdzJ`4AuHpK!cD?7sAitup*!n-fwlfdcSTwXMJ8lF*zisIHy2bHJ+#@|lVJH#RJpow zNl()KJafI+P2Z#S7K3r}kGXJMaZMm3;posuG@l#lF$vYQ)LTh78*q>TS9IwDx$9+s zZi4YBq?p#6K%>-Ql3S$TIR#WYl%i3nU^z8ZjRap}IkP}s(ua9z(mVhoK##DfEmYoU zhx!a5D35}R^3zE`lT#p}4!s8LMmW570w6{VLisq`Vm(!6VU0MqoXpM6y`R;pi{)VwLdfWDRMwwV3(uAQEvmk)AGAVCD|p3 z2DDf=rRW!gWYh!W-Ve!iP7EDK7C8OO-&<2S@;)Q8`5-u0Tg@2PUvL}mjj0Euf(9J~ z>uSB_2F`N~Ubcm{44Y)pu;HPO5DRF3~o9rFenKy6-*rW1FQjG=xAqOMVIZ+ZwI?q}hCw{l$td4&DoR4Hjq z<|AcsFY(svyR=z)3qwOlMolysCM5r+pnGK zMXUQRrJib)dNr#a>dkVc)_9p$&yA+jY4+M@)zqu`_AR2$9S%U1+Q8f@dn@9^jp1KJ_ztK?kC)+a2^7IzxeDMc93Q?)$ClH z16KnS;k9>Umz|hpKdd#9II)Z*c9AwWR}q)u6-mF6*S;b>ey!BDcx6*DUWhi$&r$_1 zr!I}t&!VEG-p{7X$sz~02T>d({Q^KX@Vq0#;F^j&DOgbAQ4gXHY}%b9*5Tvoz5j6% z^t(G<^hYUaiEwbk8s9Lj9tm^zeemn@_6>ny`|kK17^uY{6fjGAfab{=00Lf~wYmmy zi>El@XylY*j3w##y%|P1XK=rH4LPY>5*bQDbA&2*Hn> zLC_Ihk~7FS0u*gBk6;N$w**9pG<6v0-VoV;v7C=K9Qfzitz3yMT1oPCO|zQ+IGz9A zhq+nG%|FlikO9%gN5XNxwc&8ZjAsd!;}E^h-SEO(DBajzaBM7X^Pa4LpO|W*HpM3;w$;)y@HEUjKY=~Ha$MQSOn-A1!$SR1= zp(M-mdieWMB*uw>@nwYJ(@DVaDN75+=O7AddHA4`)VBEj$5CzDO{XqL!`Yee%~`xq zuIUpJyKOv|QJNA{LX1RT%bb#iBm>V3U*41%%=;ftbqjF&C^3Xh&KHpx3m6imM}{=W zQ-UhR=;xfkKurLRv@q&>3(fYEIIC!ZSfrKrtBEY>Fl1wPqIsul;r?+N=!d*J{oeT9 z{S0i6Z}+r;bsj`Z^Hh_YL!79%r-<*YuPQE&hS!rc>_}uD_$ld4`m^q|HT>j`5+b_8 zO2f(JXgP3e6K*^P7bjZ#|E7MtOUVzKhqOHK3~Zor_!mIiZj!C@7CTHNXJSDGg$eoH zoz7D7lXBvw<>8cS#1>N)h-60n|N873du3g`Vg2VM7Ry1CqB8YB^~Clo&9&r-ij@5q z7pbQN)gl|PB-i2J2o@_a?nNGwop+7yt7@nAuWEa*u^f#e4A#C|Yjt{JSe+*7`Xd~! z_|Q;v+xZ(5LdWK0f&df-DpN=|aWfo{sZMI{UI9^YLkDjh%?Qqi?r0G2s$a=V-`yr@ zxZdPG1UiZ9977p>Hqi3e31YGYeL6vncZbZkfe100Ci&AgaP>H*B++2B5WK@E@{Efj z#Upa&Zo`)%?K*ER{27}p$N1Mn>I;9Ai6+Ber=M$sgnyhDl(@q`1XIG+Qv>-c*m2GI z8DSCRUbx2TXLTDq9!@??f42&$Dq02!-CgARmhE7AW<6PDF`(P28LKjnPGCqbO3U&*1*d&j+xR|56$ zz?9z||MxCx#>4&YS~_A4&W_>D;A~UFC|sy#jq+`z)$K`G6?!yVZD{#OeV~;X-!sPA z$rCe@d(N7k4q@f;*aW*fRZH}6X4?*(DM|ix{%B?yG^wR$V0>j`ur@r@&X@ca(UUC$ zdMJxMG}BU^{_UcUauo*tu%6YnaKHF89v%8DOb4zj;QS`nLN%sb9JCVR0+q_Oo~$?; zt&VJqPa>NBewTVD;d*f`dx@0(FdyVg)sVveas4FN$VGfDBrnuS0t`TKPe-6+`Lp;I z=pqd@4W#l~LfRkjKz9Vff-{9z(hTbPR4=A&QFK38AzhQP#J%x!xXPvi2EEtiN3u!yT!P?k*9R4x~xdm92_Qe*P zG;E>|9gY@oTm8uv32O)2_)%e%Zi@rr2L6r9K)TZey*Uv!ER$necn{y%8W9`EskgU^ zh{eeRVPZkOhp_!lhw#xCF6_T>jmOef@I4KbLufR**gHU(Q=o|Hp?l;0r}Aht{pb$D zo$e08F9oymupilrF5ma)SGc_+E(nbT%VGm13^vwGT-$S`_*dPXTrX}!Jb)OfzON~9 zcg%;k!^KS(h_Fd)Fdwt1hkwk`0M$*vLv=F1pK7bwRw1mG-AE`=a)zvK+y1#a(R5CBLftSq~KHv$HzI|lev zuekk4D4>61_O@nMeSb$hX!5Z&u*gH^tJ_hap_n75D*eFejXUaGjXUaK&EqdiBu(h} zy%LT-NOMl${4F_A2e8BEZAc@f{U2|+ts|VIzVPOk1>ayx+4CKQL889Q_$A0uZw;oG zzqWiEJz?zcr=PNHb*6Qi8y@W5?GISyxm#SAcYzVSBHmk>q0NG30;MSv`LOUw zlfh@c0_we)7e$A^iVE(h8PK}!zy}?S*&1*-Sx%Rp;zqD!TV$ILk*SOFK9NayGB(Ke zRY>vuHF*szFAj*CqFGYS20x?|Zat!fjQ`+l{VI9nF zrW2!Rmy5{Sc@Y8!{qIl&qxw*0aQy7;E6rKZ+&JcltV{TiLClf2%^D1B9X9n7ds3eE zy(fSB$4LO`mL+7{?~g3XT__34*sf z)30ZA>tzM3c&_i{`F3B-gD6b$Z2U5+B;c%h7=^=JQBjIaQAzrZDN+s@xLT#V%*pWy z?rX^YvSPnPV`pF4GVO=KE(7J?+$!|p9`1L#?dBRohOZd{OPR%4gNQ z7sM}NBpPuk0V>digK{(|khGKa3h=%0%-J7&n0H9fj?~=Q2o_xP>dHfN-wy_%a37w6 z(jvb!Gs0xw`tboiuEyT8=yM;Q5Spwrzf90TnPs7$%(A4%rZ;Px$X*=w*3cu52li9J z+cC*MN%Xh}dm`!(Pk8#h1J8d?gW55n~zp7fOIbsadET) zqYE@x{%Sb)$ht?#VjiutQdlHN@mWB4JC z7M^U;H=HO_w=~Kq)VlXFC^m&QMA^A3V!fczqktKUUa4e(Gb3b~RML4jLJ$LGsk`3vR-Z z>@M!H`JgBm`+5okX2I~0jd|%#)tA~;a9TpXHw_#v#*CvjTU?Z~{OvR$yzTIJ zF7d=!Tfy5L4Cjl_u}h2;0|UyT#u)v(-m-Yl%h=22!TMFTF#)QqMBKfavw=*aJtwO9 zeZ6&*qEt$<0n9@mQR`u)=y*+}f)jMY+(0GcCcXW}hoSp%(;>j9|K1&?rZX2`oK2*~ z8H;SvFJKN~?wdxrq6LqzRix|w`us(ZuzM6u?i=xEQWL|tIqjHFF`_+d74Pdin0^6T zNCTi9wu=MHwvFzYybVKh&dZ>;8Jk3fz<`_aNFSoz@6b-dM?+&$Wlk4&R7WXOBJ(Ip zXlvO~Z=iv1PC~wDE9SIi)2zJv%3|hS&^iTe<(+Y?8c%{>Br2#*3N8ZQpad=e{g8Id zqO@a{-4B0kGc?cd?&r-9WNiUWu!V&Kuq}sxbPW;oamY3`6j}pk#e$}kaU`Ba`-3p; zLSJ$>q5zH7#8?6O^fR}W9DRas(#LU0kVh<3-^X(yO`D#J3A)_<~n{AE;|H(S; zNM^)hGg#^$r}F`8-Gn`k(?bo;g0%jHt{q$6^8I+Y*t$eEXSC_yrbf?7f|7C{p3bO{ zo^pKj`~DMO4CZ4DP{ixU5Z&ULNY1E+z%(-_@u-r2JYK;Y8xdfRg6qTxP(&7v>^A}H zfx1DuhJLVZAWLu^RZ5f!|I*^wNCQeL`2voWLcodvKwIh1{dN0e=etvoIdvIVXUTHlOF;tk?%Z=}YQ^5&UC6#2QF&u+WwP4=AfSI-oNC$+AsW7Qu-hptjBS#VF`TA<%3MrA&k$(H9 zJDF0LHL}z&64_!BPsbL@5AI@guWD_M&?Rikp+DcKi)J{do)no? z^8IB=>PXEL4Is+75Ox&20SsGZbT&RUbe1Xoj3JryUNUKc01#+_JyYvxpzeg>WI(UC zrDZ@LfC6UPF&ikF0ywd>`)-{9vV|E86hM;pj~9c(W;Hshb2Pk(lR zV5g7++YZMZ_%@me4o8QC(^RSNGLB^iopS6d!3fI@Eqi+wB^*xp56lb%uB- zGWgpy;Q_7Hy)lHU+5TeDzr4{AlQvP{F;5KK_b3}jV==`MxF0io87r9v1*E{A?1dy6 zCF~&K>Fu#e-7CKNjW3XAOH}SO>G6p0nkk4FsN;iDQrx-e&)iM=H|h8zOwIKumfnwd zeS4g@tUu1$r02P%z%%=9`9N{*3Sgxja{xO|R3m030z5RMPMw6KBVyzh(E+DDGcF_A ziV#L=5}_ytGFFFXOgerW8OLg5$BC+39D1R^jVSY#u>teNQ67=c;$Ppd3j}v!nMN0p zLE;E<17snuhVGnn>kO139Ec_pUSN31C31_1j#J1*tEd!EXAt5ytF5~mQ|z93Z13sa z@RUXPzuyskDrV@GYmX;}d-AdwXJ)>8!cmsxv!wh)`=zA3D~6fcnM4f96AROU>g5z(%ed6gu$&@oB{s+(@=kwG@Vx}0Kw5> zdVM{z){$@S>C-?QX-yQy0r6Z`z{;ewU_LYPw6By1M%WXMeXL~kx`J7nq@i-HoFlKH zh7=K)aYm!#U7w~V6>`?GCn4ilv#=XH1yv*fTG0Abycc-30@W%-$vG@~??$Yu(^uxx zp2s`EQvveiV9XJ}CrIcafTnx$#TB2ir!+PJc-BW{2E}X(?esAyP|GDt1BC9Qb4qzK z;16RIq-OqaFV7-XIhQfUM{cf0E3$GUWp=m1ZFAk z1Y0*CGN@ly2k1Rn>w2+|{?+UVV@3TnI2H-vdlK|yiHIg)_^YH?7O`@tn#I`xk3h-k zbH**oN?2t~D-ID}$}_@`Zt=V3q!nM)0Awnh)@XX8VRgFH*7sdB0{8u zw4i#4w)7|i)#7#ut)N8QY1#qmDeH$@B%yIG~NPFxC+jUaI}_^pv~lL$2AI`A`>pe@7&uWq0c-y^Lvk} z5YUOv+jANFy@(B{3-_=`RJB&7mrGLdtzJaYm_;S>F*FPZL0q3;hG|WAI44hGX!^c{1s(wFP&TiO(~tUA%; zFjM?omY4)3f$yzP}C!cT&M zxo3gE+)wV}+GicICwHk~-9IN$VUyG7U9YDliBDAyk5Kd(uk!qw)~T0))4@2K9xdmi z8p|)d^NUV-HX8|9uM8KDq8&KM#w+7keWx6w^O6(Md)BeLf9%}a|2=2T08*x(;#Vub zT{M=^dXbq0w)i+MkgKzWREnzd=+;KJ7fhiX7_-8mnv}!CuD(wF%CB8@k6Pfp2pAG+ z2Xs1`(ds)G;1*_amr8tWpwltQK+(JD&+T@+#KgS@_71I)F@kkNKb8EU`?*8Xzq_CP zr@Ro6KIG6@`NAGPTHj-hTkh^af?bn$ zOA8Kpq$meDWq+@#u5<9^@bU7Utib<;rMR>hmi_P9){xFhSnTe6&xszx_t7@0QF#O& zVAzr2hk%2*rU5d}2cwerLsSzqyTAS#l&Jsxt|=2v?34-FfG@JnsKA%~LpR#LSlv~5 zCwRQ(oIs1pgiSRpr^@}czRBNP>tZeH4y!NZd{)DFx+>+%NhErfo7B|7v%6`+HU19A zB@_Zfr3U$*f53G$(il8B@E;x;zgrUD#xyzKQ$$7i8biOp2SgjyiC4G`S(2apfpG;4 z%pa^DMNEZ6+iKN&FKdl0mP>86%I)$6de8R9ac!0z*A`ow<#xOLZnKXGOEznb^J@Fg zwaP~KU8}mo0&dl;(`r}GYrk!H^GhcmjGW}{s7N$$91{d1se2jDfT6D8AJ?lFZR9P| zJN#pt^$-8p2|7d(mH$;ptsR9G*Hlf&#zdDS(6Nv8zXi_>xkgua&H};pop5yQq|nF+ z`c<%}NUW5wU2JPDu{6%7b9UimL2!4P_3hNC0Ck_51<$-kD^dNJg4;zuq#d*UBWJZo zYmTj)yP~%5PGibmC>(T93PKSo{nyHWFoM+41ZGVL%wLY|4Ge^g0YFQ=S>H7KOX)`_ z`(~Yaq9GfL8o8o-7wn*#Vs}n)VTA{AVI@;Qu{B69C%&ot;4qrlq(~_&4L}vqwp?M# z03Km6M}V6Ss&njAb2P574P6K&>-!heH!WCx&ICfqP$TFMz2lo?n7ZsB6z%Ff+pBZ_%9R@~XVDCp3;a7Kp!*@cS+lh{L8Q6=MYlMG)n~jq1lC??HY3j01nRduHFEwUE zJbFOeu%(;Q-r!KN6y=Zmhy!}Og4jVX5 z;nv|mp2u$#YL?Z6enYwhwc>HMKB`r`Z|@W?9T0DuIKy~x;|ksrtQzQcHce9Vm z-WZnC;}8?OBsili3ee)@ABn;rii|{o!Bj&SAZhao(<~(xI`2|US@XtG8*_=CCkgr0 zTrQrhXIUhQHxWxT{Dl7@9X&lA35}@gT6Cdq=m*h~4L?LD>K(nAdzo*%$>w09lGAn zD2qLL_Uz-wk5BuU8wMI2Kl}Ol^S?doGsi};TAxugl4qm?N#68572Fi1ZTh$8|1K%I zt_r7=0_I(KaCvM@`y>QyI`@+NBIJo7d1REbg`Y0^vl*PCHZvTR{BT=tj(aP%EZGlP ziDAh$^yxbElMs6GjpcVouob3C5tv`Er1UM1G97LVuOR4Hph<7nrnsbe-2mMLt&r5+#P+RdmS0OYxk^ z%0;6KK8m^P>}1*!U)7027IooQvI0XE{!4A>eYHa*TqMW0YjHOFn(a2P>nH_c)Ly z9UOE>++rbUV8-#%pkLptucPs{ILXzfgI7xe15EJ2``s6g7Cz0h6BUm!g4a!W8^+kD9}*l zIkOy_PhnDr$Wm;%00-f0hCvMwf+${+2f#^MFbEGO+4!haxTPI)V$h7wC${5aPTia3 zj6@S0IaJwgvHA0DX*JA*h?@(%ATxSi=)O!6kONib?ILv4;5j7xxKld~nS{csqujnV$sbn`pbTP-@?A zZ_zsInp^DCvx(pKXN)HK(oC+nKlB1A6(vv6jv*x^zZgvU;$=9n89SwSrzL(gQ$cp8 zMFtvjgzi+5%W+6*N)u7Ls(ylvuZ^`Et_#HI(a`gjE|Ss{mC4tuU2z!(Pg#xzHHAT8 zowS-CHN9raUw9@*S(U>tjhUnd>M2F>+9tf#O6G%M9-`7YvO3m()+l7m^;v>W%@-N- zc{(flk3C?9-j9afO>sE!fL!!5w08T~=qZX{s7&025BGA)A#gG%&rm;bIGCQTz}-Y& z+G}_%AB_3^h|J~bD@cM1Zi*!4DKXZgues|CTo1D{`4JABi{T^^-2aqt#_D@!B}Imk zXy}v~^99SEG1Qt8M>>)*amyJGKS5nzl6-;BX%@JP<1ieRG_*tKKaCZJufxVpuxt+0 z@MI18!#HsI{tC3}?5R4&5+yG^a`j+4_oCxYZcvLh=xA6z0K4|~oWK$gv!Ej<;@eAE z$`QE{gF({FP%;Fp58B~z3lH*I5&g*Yj0g!O6Mjs?ovj%2-U}ZXSi~gf1rrp85 z536~S-;%u?oQO5)K@&r^dMOY7W9cnOaUjNzf#jSqXYhfX-;&P9{t&r$3;;Ope>!h< z_GWfwR}T8-&X28x#}Nn=58U6CM0o7kFs_fj#RSK=9w>c1b>S#;@e6&2%l$L2TT-3P zmopB33g55}b^bZ+FyXKRBlmb4=##}A95{3u4Z?>_9`VI(3;Gyxcnb+G5yzht=&*;Qck;Bd|Nf$al& zu%aP39neD>NJ->(Hhv@R)O^ng)hnZ(uMmbO9ly6CT~K6+jtC^y*s)>c7=hO|AO6p7 zu_+C{?Y{I6^B?Y0iJ{PXFc3r_=_KQ>hUJdFN<{yVm&Wg2Ntvy6YS38oBWlHs5rvugooU9v)sM zoiW_beA#EAzUjQV*NL9GpV#!hqRMVG zAtPs%N>99&i;+vC@)842otYWWGQ`gMqoT85H`E$C(8Ia5R0l0ZWKeW*cHj+7bjsS}4q%K~ z$DSLNtU%imt~3G{OnmuA14Uhm`V?>G^jw7u#;20B)HZ=Te(E!$JtKz#ztuY1 zbjJ8`4MylL$m(O4W6{B-H6eKs7UsR>dsH;McV$YwtTd(a^c}D2OCjv|b6~tx(TBG2 zT!GCzKa`rCaM9M3#wGzmd@aeIqND@O-#6j96|Dx+mijcpzl6yP;=VK)WMOZT@%@3B zbIc`AK%osXI%+bNZaIX1Y%7++ruhZ^^)zUOm!2+9&?qY|Y}Jffi2Mzcj$ahlv0Y2L z3Bw6}#T{;7h|_svy3pjcKUi&SvSP5hJUd^KCGP2xgEnQR)?>kbL`E733d)61Lsqay+WCQDVhA!V4&??*JKR>7WWTemI z4wB2cmci%8L4EX*OEwt+q*^DI~wG69~t-yW>vn}86(5U)P>ka7%GB3t!^u=wR3M||4=N|tPUMbW;% z{E-2`{S|^;{y4|v8rYi&`y1X?zeEh-wmOH%t13WuD*KBT&ylmbEVGm*d1#L#VuJZZ zHc?nR*jq^3_tNb36%Ia~lhMN35pv~#U3s*Uz=bvOKRCdoMS6U}D=Q=yND3)%DQmdztL zJ%e4{RR=@Xv0viASvB?pXVvQ#oX|{>|CoAHIv1>0EjrxqjB%q ztsfAbUw(Q1vxwH>dO3Zyh6wUWrS#aOOyV3x7fGNo+CRmH-Wy64u#L3#Yxi?b{vu~c zg1?MoHE`tn?uMd9eH(p(g%P(!gAad6;)W4Zb;v2BhmZ~Ssvbg!8O*%nTk2;6CiV|} zRw2qa;D;4#MHFt%l1^cCb`eDRvYmqC1x4;V&ce{UDXM(eVH1XcPVOiK_S-Hw5lXxR zCrXQl=*MA;Jnb*upZ^Z0l5!-ENCT{jHqeD7G1CSMn-qmO>G+VxYr0XsE`r{l?Wp5s$6lZfbAf5sPP~& z>RK)v?k7$+g_F#B0vgYb%02|U=4?6|i4&xPvdyA~KOkW~l0m^vl=j7F8WXqb_tvr# zdh#9zz3NXwUiC?UYIW0ag0l}rECrC~=H$(EiMLUj!vLtHUKs5W#xX<#H}pD@-~R~n zomVf$!gW4X-tQ-PRVtr)@uiPp)+W@9ZxYt8x2Vcida(bnZUiT)Q_4*& zR8My5Cx8%a40^zz_Cd~b$i@3qd^(*jU`O|7!FmBJAHO)K)V6AX35ps( zW8qYaGKzhE2=`y00;^}njp(y@jmuv0x#G9zwd>iTr^RCE$Wd_7GUyV6L8v8Cgso>B zaWuH1M2#}TDD03G5O!ojA5j#D;IK`Mqv^yNzgc!4Es3lbF-!N!C0H5`48<-W5z{tK z44(SS3CDMENi6Cmhn_Z-&nQpVp@*oP1d%^hT1+kY=>WDu^kOK!53hrShIt3?SFMKF zSXMzcuu1-Ux9t_Eg&dG*`o-8tMouqF+-0D~|9!`PR@D!Mw51M%Zh>p|=f((5neF$y zG*bf?O*rPCab0GtN%cw*v+w2lfmOOKU#u80MU!t?^StG!0$${FZ|-6glFq6?}=dWp+^g^y}T7rtOOV_`}}Ts%}QaAS!%@ zl7g#LVG}rv3XQcW@>B-28Cep5X6;q?hI(BbIN*Tj_mL~(e$=QG8 z9{WW{D=EJVE|Qg)zK2V(|cO`69 zeiDr2kg*`%uJx$HY3y7DdMANh3hg7BOQvbEe)t6@c={>`1ANo1^NSAjRn2 zEq;qh$8R#`NNZaTHGYSH4$PgURWJn-T-+Cv3RS_jt5Btt$oLDzK1Q4D84ON8M)#^RP<%S_ zrr)enWv3`A`e@u!u$Fy%7M*bYyczI<9m92u3#HJ}kbtI^bw;Yt z=X4W%%8`c+1t?@c`sKub*k|n{^I&Y_&J4xAaf4X}_l<%wy#^{|bZjR~K%n}!>g}=N z^#_+iANWZz|9D6cCYFwrr(9IL4;?UFv+ur}YTfOB5D%djw|MD9R?06vPSJVDFU(Jk zOrk_oW&K=j9D~25^R(XPq2*)7I^sn8%`H_FURrtGvd1lX5Y^qQMc#rVBtd0u6q6OK zLINc@<0S!#+LPCZWsGvnDinc&K1wv$Kr1aDRxrvXn#5rQniQpgV${yWC50!s^B5=? zwTTwKT>gG9fN2#bsPH|Cxb-`91SGC!3Ik8=QV@sS&lCpkvJeIWbGnV8NBdzv)Q%Ly z@TNr{w4DAX0!Smh-JFa*)3|p`?`j{aaIAN{AH=mvv*NU-`q`BnC4rRTX{N}q31~@- zW$6AVq+Rhalh;u`W|YakJN+$3{ueUQh?wyKI6-OSafzYY)Dx+yjZ%z?Kwc@Azmppt zc^8_1-pnee**5`{2F1cyE>akAK)wGqC3Nf6($^|u0+z(Cr<`GO1E)9!>x}IL$dEmz zKCj+o+JP>mAlP(9^&yUhp81kV&woX|i^*GFI>O8(sXq#kI8z1*SvDOSY=ugyf-bfre&yVjb-vg73=9RLI{X`5EvTdRr6+12uteuXj76eaySxAVzeAEE#b5FLdkV|1tDH zBn(X$AZ5a3Ki%ODvTF#PVDgBX90(Q|PT#cXG06Vi5+>Q$IU|`IEvmwTvfWEO5CUZu zYHsLpSJMb86)TPYuXlW3yH-xr{lME`5W%V8W*OZ~5I=S^Xp+zI2L6cOpiUVdH|bZ} z%AkA55v177*1_N<4u=VG2MP8yMJJ>*V}0z;kr6ns>Wrozb(K7q;4npXW#iJJAekQy z4BROvW^f1eOVT!IZ$wGkkdq3ybqH@y05W@e6h{pAhCDaylIi?CC=v@L&aUrL_Z9ptKtomwrx7V+5f%;1DLqp#$ew6m<_ZhL*y@t z**$i{FM}gb`Y$|@fuj`183^&Qw_=piA8tJdQ*7p~=5baF)(D6OG&`72M1b}*~=+o>+ZG7w^YrgZM|9&_8O%SaRKFIDxH5qt!%<)JgL93;m(DE=A zSj437g=Us#VkfYiWM%_%S290U@KoYYqM!wH8m-w@?@K`!zFQegrX2_$lMf}h4~Ha1 zsGVMm5WilRXZNj+m$AjS-^L9LOuVu*1K@DkBOe=0BmVXx6c_ZX+c;c$?QMK}So>Qn z%-fnHiSZl%dACUdBFXE6x2#H~Sp76yRObC_^j(KP*DAYjw%4kZyH%&w=vLcr%JprL z5n?7wY*+rii#gIQvx`)BRd^4TCr?rHl!A;R#QcLV@mu0sn5YT2Gb6FO>r+rQSD^#QngNo0+ap-@ChJHHB(m}+vUr{4m~Ki193jYI`EwId2~;9rE)Qqei_v(0jFRZGSR0iOeaBq_N1fiFVNeb zgv8{y?I(U<&wVcGUl;W+T)-?DlH8It41$*vw|O;Sl|)EJscla$4B!EyP}qW+QoPXU ziblx=y3!%7Yz(b`y=Oi7W6Jt)8du4G_Qz(Vw~(Ri>u3pqg8M#d#5nf?rE07X0`Sh~ z2_6g+sb=(FyM}84$OtF6Soc?1-x5w$1z}O6lupC#wZ>$jVPOwVR3D+rDyOJUw{N=7r z3b$g{LKnrBL}MCy&6zvdz=Yapr66V_g>XchuWtVaFuxlB8pQA)%Cw9>+AhXOL0?bn ziRYeBD;%c{eP7%U(8%V;`EcQG!(EPzB!*sfayg#?wG^WykHi0R|9Ypv_^~|LvT=J# zf4n;^Cmvl2?hMv$z?py#6s8Ct5;$Dr720Skg0^6^;5gJw+A(X;lWxrZ+9bof^VjA) zh5U-t{P%a74ML4y;oXYUx_vnvxR4omrKcQyHsf=~BI8{mGIZnUZnD?B1;fGFphPRnl9D3#QnaWAP(_b2T7((FEii>$a zd^Q?OxfEO;7-s92Ke(i@PRNiwe6!}fz#`0eRufrr|MZX1EvW2GCkb_A0JG}^o5(tL z8#yP?2vD-rO49M0`O9kOv8cc^qRC}?hM{x}l85oY{gfoZITsXW?i^hN&!`T406qZ~ za-OaVlei;@<%n9a4Pp_L3sQMM+-Zw2Zb~d|i7bQ%TvtpZQou4;Lacga_Y6T+T1{1% z2*yV$1{g;!q5_p{joaCl7W7}aaW7}cJ@~nfoG(M9f4X)t> z=Y8lK!)37?Ei#V9pQOY<@D4GLOw5Co0e(toz8%OjNi2_*Lvx4R4Q#CP;%MjvlWl6- z)SPbu#hraSzGKqS{5UwAf)fIL=iIfq$EyMc_`XCGTb9@s9W;SM=IcjHSAZuED=O2n zvRH?;gEu?bIJ4lMPu~L#4fgicssUNS8PX)T&}~zLO)=17T>lEsPY9W!B90bY9(h0FwSkWqUKyWb&|6@U8RMXmA8!8!I%q;{F2A<< zho=$%(5zgW@fdfe6DvL=@0dKA$IUVP0(@24qgm02s#7g?scoGj{FyD6ket3a3}lWnbU!@{B8dmrH^vS@)c1c+Tj7VkI4~8A3SNQeYh9 zB6lsM9*|v^?jU13R%dZHT=daak~w?{$hUNNPNN)XzmM!K67^nrjbH6gk?pLj5!a5W z4-O7I^$`EU4pV0p0|c2p1=UoueQ4WF>V<^leKeDu$LRzlFi`7G{2-gxAc#iECCN2XCYNUNGE&`Ktf+ z2SX*8b?;qs)*>PBU}D(DiyRM*WPXB$$Peu?g|pBRc+p6EId}IJTsz6M-7AbZu&WBV z4Mpc^`7-L!uSV04am-9l=LCH%DecWi``Ug{0cBi81FyZDP+E*+pJI_xOrGMLN1#V^ zI{hSB<4n*#ON+~wm+ov~7O1S#8b*RtZa|J)ktQnz)4mc52c154RDtEqt>7^-)-mm_ zxo4~wpLfGW_As=b?DE~~B`zc__LFUz8%%Ay{U88MkB}GK3l^L+kGQU5T+9c0(Q2@u zK7#vx#x9tsBAbSp(Qi0p25@d9UiAeGJ}T|~Z!O=j7w578IbxDIyZ544Uc;0)f*(e* zrs(}XoCUnk_Ac36Jm_9mBK2kf_+|96u_i0+Givqewf0ewU9hj7gUddt3eL;5tTTgS zf($Q-piet+M(OiD>%2Fn!u5)QXY|`h86+_v@WVe1#ysPAL;{P`;1;ml7`2OeWLmIj zD_}9Y4h<#g&RVC2nko=*N~ zq#=Lkn2PJ7Qtq2Dj8qYSy)9HtT4nFr%B|a-^kS`%FM)>eQzx&6#Q-$z6=8=JB!b&a;43MK}Fac#f z*SZ(dR)B)_E6hSYSQ*A({Q_874TxFO`98^yw6Dm=M?{cGBgDeDw|{S0TslGm!k+)p z0md+OC>~~efn}-SYZo5l#?D_{1jLRjaZeQPe%MK#U+Ayv-+V=_l-wNu#N3!Magg^g zSOXjT;N+0_Xai^Z$*N{JU-nNYh?MB-v}FlDgW31DRrOIzK?mGdQ*Ut;2$p5Kl5UG1 zD#mi*U~hYr`Eax#BOj9cFr3Yl_%~ksesEN_?NAW9+O|E$OY&cuhL{RV{%?QS@6UHE zlrXd$&WA4uzi`iVK{S$g?U?YE%8|QoLf;sPcmMeK{6ID*f83{0Ibm|17>)xV)|Bcw zH=UeeOqQi5L;U02XwS`@H@t@BDJKK$%dBrO#u2CuH&25j(=c_|{dY&A-CPU6<{2T6 zDVPl#0MK^*c5RYI1M%SsL}ePAIiu&5nb!m8CpP+BJXd_@u9O3;bPKi+Y%z=xrKHxU z%lGgv=RVD7E2Z1aJ#3pM!v4n}B;(|jx_HC>t!9g zV#+aU{`%jM)3G+pWM`8G_ZtHq=gLk+vQAp*vw;b;2;l|1ebe`lJS+@M7kxUHisVS7 z^$S#xmBUUMjurZpC8|3$KxkH`jhG0uHJzXhRZ$0mnl2Z@iWX4BVuRwmrvQMeW2~5T z`~k-t88NUgzWtiBoR9b|<1k75tDtQ=NWqV{XikG9Q+Lq`zjvAp^QIEsA*Y@cpRTi_ zquTECe%PR;O_n9!-fsEAh(F%x;|Uv<@O9@$YZ&|lg)*iZo6hgU$slPc-II=A`gH9m zO<6IGIBA$eY?8`D(nuLI69*;TWXVcK@P}eVB02-u1swSvZKs2Vv911a?jb#M9#KG{=6o^i>1UD; zDAHCHltidXiO3W%XPA9(GA7lthc5PMQmyN7SuCW7jYz0!2<6Mm`4aeOL#(fg9^uGB zotk4O478D4iBZ%k82nevUZLFDcpmy<=*i3eEIA}{j(+D!<^n&o5-|Zgu-d=80oaZ) z=(oegO>OWJ7X4lTifti0D;0Id9!GynZ4wmmHFurJ&-wf=%g2pb`1NK_=^|T99 zr-31M7Nm6MrIUApV~;r^ir99TYRfypw<$Rhuak2E?~@nlF|A3u4zjj98TPHbBcj@` zRB%FX`R(mTiZG_Kp+vq(E*L2DK4N1UX%^0}>9~B!3aL+IeiQnzC4|E+8^{LNaMN#fXC-bW|%We5R%nJ-DwX9II`r0O^wn-iQxB%1OCamwo4D8aUA&I zjy+L_eo62^<4TcxJED?39Y=&wpTZ6@OXySHqq3Ky>HCPnydTLBKP)u$%UyO;;H^rs z9MtG&TkazN7=|BMi~sbqfA|#i0i}y~oT!#>8)DQPrmd4MJFw4Oj3+8OBhzO)<5;zT zhO(>eInnigz2gA+L*SxE&IK<-+(mdS3j$mblz0T6)!Tf1`@X^!|9T5r^kPW?{jCki zez@&54BUVFLwC5ndiO_BV;Q>M!FA-S#S*>{`)F4G+WkxhiF~ddIICJabXGQ3tePU4 zyT}J4D*SxQ6hv%>6s<2Q(5VqPf)_724U;98cFZazC!&t;4x}pGmQ-TJ;jk^6FM-+` zp4|*vvZ4kMwJ|ZZKa-A+lXYyQ+m?}e`fNG_ifmASTYlGZnhmGhY;EzMQmfgib!+g@ zd{b>Z&GYk4wVSyp|HjX6YnAS+1N+hGT$J10)~jZtx)UhrmQU-|ZVKA$0<6}kRDUb9 z>g9KYgMSIMciKBYueNKAmo~hhp3cjassl~5I;o3lrB-&ZjcWTaV57^cgoFhvt2D$-fiOD_jw!N2Vh&Ra<5aZ#Pxh+u;8?O_L@hORt{SvPu^(2jBj_k?P~Yz z)i!=@41Ess4R3MU{B7f3&F00%e@&<3(nal}>U7_=svW1(Yqgr~Znd(*GZ}yu&wA}P z&P*4poV_YHURLu)P!N_DWh=dQnHC9S=&;LN96M`Xv|t?71M_Ra2SndruCY7zzm*a7 zXalW<3mzLfdwvG<(#^oT;OrTGjG#RL`Z8`C&MHdn6iSiiOA3zaOcSUxf-6dS2Y}iz zygLPs4kH}i1E`8h5XyJ**cf5JHc7Rb!}=T(i??td04>X0Aq!_89djzIB#n+Tg|HE? zcLWeA^b;aCCnPI4gt90dG~nW#ST^?pKbWJ27r27Zl*ejKUUZpG6&3}qW_nDPJMS82 zQdDlg?9oP|#{!VAPUq}Z^#b?F8(8lZ%B$_Xtinbt*Xq?uo>v6!0fFqc>b;k>h67u@ zgDXlZ-WPBUR}yx?>rG1Yoo265p@pTIX}~UMHX7A4!fRLm7yPPL9@*e>t5vU^SxuE} z3~p`52I6Lb-HuS)ZsiNJ=R+SVe;Q4AT^!)CUvv(rSl&D9_S$-S9{UK5roRiFZX5SJ zwXs)eL&NXj^t*7xeV!(JAI-eW9XP{!r=7EQ?X)W6*;57Z0$uzzaE8}wjp`F!fjg`< z&YLh#-FB@CW0A_a^A|E!8DWf!c`o|1&2q0&Yi{w;w8dsgU%=Qhm3NKuMeR(Q&6n$R zns#e%st#2#BN3C_e*?e%2F~C{r&@izfwP;b)H-}IoZ^T30>=8q;KMu)ComsTN3tGh z<=`!YBYy|)*lTomU!T^xomR&=eb=pay6}Ter~ALZA1?ejoj(UchrYKSf3}fRRQfY> zB|8CBh8_f<*gTi)DIGp4fl!u(cXV$)%E1f5GV%j~KEP}G2A3yRv1{c~hI1^!G zKKtqE^J2UD&mO#xbKa}t#%foqjl4*?{3uuVBd}oUwBZ^%uXPVX_+)c_K3wd-sa2{? zUIyx-J*zi6)twKx|BF9^&j=0F$$;f=KeCGO|CwI|E6NDlYz7*WX0Dm*V}%T9C$cagH8|X<497 ztK2SMq=plcAhj^PLZX2)LGbtl-kX3&=e-8+=8GOo7Hk(BbGuflR2%zOGKvd0P){j{ z-F!Fzo*hUex~82npjA@+5nb1C>9~Ujy@tPE`Bba&Nkt3xXgTqezm6Gn6s;5P@f+3} za3eP0Gg+M+P%1nXXt!+iDAizIn{_0yBC4t6dS9`){JeULs{IQM`{B2(%KsI9%;ODA5Reu>SU0W_$*m3kyb7sFWhn zIreDs6s*M@h@O1gu#*+b%lvpeu|HwDO=1tHMleNir&^xm#(E7t0}!5k{2vT};=Ei)-WasxxtOwRJo;-Fy$h$^I&;cE>0Y$DogKI-6qVFE zQ?bAwAbPJ+{jEim0Ic9P?iyH}E%+GKBdFAysKle})x=&|o_m0|Aeg=tk3UX|?e>H<~`R5-#ldxG>p0jfqqu zY5N5)>*Fz-pr}aB^e~)qz;e%wWuEB!k<9xNjhvScYPv3OT$D%CM@-`-_0knX&JsI9 zida-oju==&=_xkUU-)J0Z|+JHlPY7@h0bRW)|z2Dw+oAkeD74M zWqD@-i@98r6Wkpu}E`V395zR)IS(TY++IR=rV5_Av3dy(+{948V>s*|+ zcXb{Am<4d=>cs_4fTFE&HStn5)*CHjS#P-uq#DosD>}nQmTF#$QVy&%oOf{Rz=4#v zGGsO2MA{K7bre^Bg9ENpWIVaRs-NIs^GZIITt~7JuFZPApg)i1)OG@Ru+@P(DO!l= z$2fLViU_F;FBkVE6Ky+^FiBwA?8R`gT)2BqH0@GC5*^;A4Agmug$)q9 z0-^v7q0_y_>qhf!g9rQX<;n4K^7{l>>SJP)j;9zd#~nO9e(N6hXE4v#!~b%R;aeRq zZd{-ifKmA1PKM~y`ZWEr+Nk0NptfpQW9}Z`^glp9$Funq=56d9!*zIbtaAh0sa@Cw zZ<}oq8P%oTCE52MFQ&(mP6B^oW!N2Pbb67ySjW6ZPuW7?_8VyLH;^cAFQwiUzDTT0lp>DYt95HNLd@W)yxZy4g`Q%RZ2e z=e3tg*haiBZxb1tkWp`60pEo5VZr2*nWNvRSI@g!XI0!tTO5dWvt4`ns(XwieYq1w z-*(G2c-MQFP1Ot0wu?U8UGvAl{@hak0kA-8TG$1?#pyPK^)bU%cWT!;YF96STXW9a z&5I!ZJ{!Lyi)~j*Vf$yVYV`^biYaM0bs3AtDBh`r1JE9%D*3WN2<(qUmo z#s>cBw?DnxBw_p3t15ohm=fS8DmCCnQKr`U0uMc%sU_WPRU5e8NID&7t`a6IMl2-o zj48!v;*=$YvBXJE=}QjKlge%nYGic*SIVd|si&p!ur~7MgLB%1?=i3=3zu*SwVQS4 zwA^-3`dw)^TLnBz=F`z>e|{=4MGvCz99-|aVPrHAIgG48yJ0U}gAy}jfsyK+QUwyq zl>*Py-A)ilP44);jxKaj^4@kAXsPs~iVml%oKM^;C8rGo2_z`Y>^*4{!9$Y+wrDZ2cpaFs=y(4&AtjY9(I;9v9PxQ4t8hZV1N5IPQCe7`rI)w>(h_i z?QR$yyDkQhvG)j696=B@Vi0hdL=6Jy_{c#ZdT0=U95Dz)4GjWNaS#VK>MJ;^WE8t5 zHYPLRVeCazz;Tp<=s1ulWE@EdnHE8>anb7r7l94Lo&q3xGu4lAlIIKIoRX_Xm7w=|@j;bHrzmTu=Ch1r=YZowao5OMc z+Wi7*f8l++dO%6km2~d{IYPAER^q!txHvwhRP3K;Zb@@n7iH9`kho%B15s#Dubp)} zqCX8_iwLV&>%f{gYqoLnm8H+n(}D8%`{evZEFbW_N=?HE1x7IKg>vt;DUO&6k?@Z6 z%Y=|d*&XVY{ZeFQjM9!yFqK6WPqU3GG?x3RobfWgSHKsuMoP+6j9*#GR30=*5ZnXA z4QQ^!MG+>)md{9)ouOATa|ju)K&#e&1@Z!Bp#hf4G^t(NpRm1>?gDvJ_O>>^rNMo}ay2*q2uT|KqA_W`HCv`{NDst<;%W(w&s z)p~O5yL={EWn~o>pDB;e94r5fRiu*vGs0n`cM+KIj-c*MmSbzmJ$V5*q?(Rs73Brs z7@o2MQTip@8RPiLpwh-aeKNv9tIsBhUbt{`FhLD8(+BET`WpaY$TxuU#on( z#;8YZoNEKDQwmB>@jm%+P3^e|2Au_50@%V~`LqLD6qdI%rPYL;Z`QQamy48|Xjkie zGX9|^=5n=S6Z=39!FLZg@YT98OfGMxbNYfUpjL1bhU$O4rv8jweX)VOR4jM9?HW)} z)y{Y8I@Uh>)VY$0{Grap$_X3TIc@&tga+`JyA9y|^b@v`GWCZ?k;`^IM#PM-+C{Ui z$RTPS?=uW5PwUK32x}{zAJ*5MxC=Jk;qjs2#oFS;Y{{ZsC0LpI{Evx*?U=w^U zoR&LPH076g(;Y51>7WKok2; zEKb0O5bJ`22+Udqkv0LTHrUk%rWmKQE~KPX+>%9ww9|*DXkS=8KSx7?b2K+!f6BhM z!@A%nd=dPF;TFrkq1htvmlcLoJI8^BE`p(9{(7fYk()J}eH3ms5MSn}TiaD01nT2F z2(;O;1JwL{YlGTRLACfW&|=WvO7d<2!M-Sx#b#$Yzv^GQ5@spcYn0!VYjtGwlgo(? zh!E>E&$}=i)tEQETEIKI$?_TSvsJW3swDfDz{I*}gfuup$_eN(AuRZkCUenRhDQzWZ~mn}_lxbu68po?nYNvHuK^2`=uXdqdEFBe12)d0TFW~<%&?cL@KGs~yp zcei=gtUK-QMQdZe7|${msI!SM&jxl0xUhj$0=iinv${p7u7!KvLfosF-#dQV4crD9 z3)I=9bIiv>JF*S59P{zeeC^%7oKwh+k;%ETH-8ve(AGu~C0I(1qT>;(3itT^QdQcm@je# zK{12H%I+&;TKM`6@xEhwT)hqg1v>!=9j@tWg~X8PXwFNQ!#ie7)W*xbKuzVUwQJW^ zp75n8QDD)=t(jkU_1&RZB=+7el(JVR2QwnWIOOG9#;A{Pub066#BUBGU!{SWq- z7C9_GZPHkdR0~sFz^A>-=?HV81{0bV2WVXiw76Sw z-;bu3lnYnGI%C*IxFa4*!lLGEF~k_(T1~^*fRIkvrKFm#DxC@j{%g%K-SMUCeZ4BT zDtmOQal|_puz_()CMwm_dh-lLHzf^peBcJkhPFJnKfk<5X$H5`yGUt<86N2EF&YNt zxr*UwQm?}&MPWQl#ApjXEzrf#&KwBglu%RTNRbk9ikv6nn$C)ADl1Kj&sMwEM9;aB zo@eb1)UKz79uX-7-vta5E|urk9+0?N46Mu=flMs7UpnQ+yJ7%@TVgK&Q`>{>58!g- z%Jurgb7XJHI#7u^;4)~zB6~+?=8v_G6Grjy91SFf#Cfe+uNcSu(=BJ*|BvbXPd~$t;RJp>Pdiir zlOsWm4V1xcv8Z#`xBeC4fhdVxo#W~$i(H>ls)C&mHl6}IA!J;};g-+qz0Rv}%jXza zKW8}ou}__kCx+_*KSKI&B_9hH!cz*tTMS_~Tg4FKbhZ0v2Z5ISoA)44-OrR}tPkzjR693U9$6|s$T1+sdO*UOKbUlH1uw`>cc?QUc;{ZAW*qCnVHr1{pwKD80o%W52_erHFgPU zXq0!XMn^@BthU1du6#ZuVGjcpMUbM%;VN?}1M?Z+DBhCvVpmtFHf)8gspqQILnP-{} zeWCypWDFgtGv+^tDPoruCJ^(a2rwrlcPSZ=)Es0q3i}tSat;@*m{X!$D!71subijy z^C|g|4m2(=q!qa0cc^eXy|Xi*dG1Feca{`NBd4&H=l6qXbmeeVQ24S;%dOUNbPZXo z<=JdU*Fi5w(s%-M_Gm@5!HB&0o6E%`MaGxkyyWYZ{JuJ6oNh8EwlGL!MO?jskw(%+ zb6*EO6WuAFSK;0z880Abk&#BzjTT(j=dDhWIOwxiRipMdsyFOOGv?4=i=s5JcQ_F8 z8t*Nd18XrPGxWrcbIm83U#wTlZTYrrt=!R_=CK0nNYyeM1kz6&hh6ct)ju)xn$xrS zevJOCL~G~Gw3YqjUK#F^a@}{fLn)(@QrxRvoK`EOChb*e2X%ZV^5-bY=0f7TKXZZn zK=0bKrAzq$NSkn^Bwi8C{j|0@(HL5-W$dpO?>13L2aE%LV{(EN0xheYBIP;5zJO|; z(-eJ5N2E3!1rsyvB^V{g6>=QM@=OJlO_3duFmO3-=p=yn%VxLfAWH0dx|m|Tu{41c zVhX`6v4V_xy(#1W^H0FUlt6+J}<(Fw|Y2=!mpc600a z`N{L=$0##-$DX~~f2@;a)|K8ZLCh}CF{2_%$QU#JpHq+V zl0aUu4Pm32lHX*Yq8>IB|g}H}etvTd+*q7~FD2#{! zA4V*24`$rjls4%BW-5D)i44%1hr2pb&k?N`RhfTEc$sebCCRIJ4*W-&p9B5KZq+z7 zY>H9965wiH!t9^5-?h+bMoWsnl_prrcsm&5%Ophw#PAfC zg5`~Jy%(y)3O`+UmlI~jViAO<~ik~|@T|P79*Qx%cFSky&dq8T|U!nl* z)kSK)oRmk`)A?|5Gk#P7!dA#oQ!@S%J_6I_1tM%z-ehvtzHe$FwP(7b&LYhrSTp&| zOpwfBd0J-_(#i;=lt!42#DoSDIs`x#i!fM>6lO4U@5EEZ50KphswL2%;(8wXY@kKg zD!%95is}>|>Hez96fP`l;=@t<{R+ztj8Q-|pdT8(;9HKW+JCvN_S{Utyl?g`L=w3p zJ^(%k$aT$Z1PG{o;*d3YMdu^cD=Hm|L>0gj_lcsDW!)p8ssrk2HM>G$Q^-(xMz4Fi zLLWyZmwI|-X045D<}5NR?$h@w=jpx{96SF69t8vR)T?jcQ28OUUOzGuZ${Ca%=1T& z@6ybcnz31;=o)=9(d`$o-}a+leC8z$ZZk5`?$d$J%qx)|o#xqDuf-pjX8HT*iHb^w zo0cY+^?S6YBF9e81y$2e)>P4P{ZghDIx?ZyQ`gUUn?~I`egfiWqQ^8hvhp4Uqf;9C z@*UGOgl$*Roh1y#mHIFYrY)f?UQ(Wszw*HfWHGu)dVWgF$0jOElxnbMdVE;ZRrlpO z6kHO`UUwV6{B*f^vJMw_bOTPh*htds9j|Q}c$baAbmB&2Yx8&3{fI(;6{;nn_vz!P zw&=_1{KO9;P>dCD9I|oTFG<5IZ7zx_AhVT!Jc60^Hnf+7*p9633fuT%aux;5z2!>T7c|O zl47`clu&GiIcJMwV?bMd%%UMGQPBx8gu%Ni#zlbBdz)>V=IP7n>@x<`E6?Zs&$(*n ztlT0SZk7XW53w81Ju(GZ0o$>AW?9ezEJ^gi+h5Kq-Shm*dh-;HL*IgTiz679#Mv1| zVZP7`bz2y#MN?(f2KiDc8*-NuX^H_l$DGCwz-Mpq>{YvYQMGIiqoM#xvKzcO<7DXm z3K+$_{-q2<_E2dhJd1KJ!i}Bqo#c`RE0{nsjdRK5Ob!u_o^Hl3!#tN;T(osVkPRGb zOfj3==*HIVUnh-?n((dFwqmO7ac4zLGqRip-K$d zV@SQ+epxj!4;gN?Cq+e)k)X!Oul1dZy7(>28Eb8bQI4k#FzLGG%XgA@f^NizR&e4FSSBcr4SHat9=xCXm;7&;fXL-Qztd@|~ zHK24Xh=&VCQcVjLTbW|+r+@TT1s$@jlaAS1`{^;SmRjX_n_@N9D*w7IdeMr8?hsc9 z)169(B|pgEF+!>Hw2A^l^PQon%VdgzaSme`3K&fu69g}hhS!r=S0bBi!C4J^Cu!I$ zr7F!H@(^eB+S%((`nNEcE-@9(Xb8K2FQml(5PP_1|JN2q*>>Id3?>!UzlLId6)8&AdgTCFei?AKu;rFmB_{_kROmcYs~i*Y1_&G&cHj>(d*^US3BEZnD=2`BhDWi%}%A8`^SB(Pd?_T+28!~6Vq{hRx?S>Y*#Zj zJzmmRoFbF2v>>|dg5#DUa05DDp5aV#zUm*dDrDj<*ZEmZ*OP{eU)==nG%SeX z{-}ns^|#*IYQ^gqc}dPV@R&_13!G1j>aZ3pn!D=7ZZGm5O0L9eC1>~ax-a#)MK!&m zWj=7;Vf;8hyP){7zNKDQuAHA+*LBs+spE58f6C9U8~i*29_9Y}dB&ge>vDmBMtJ{i5ofN>!f3r?x{Yxh|>`_X}$N%&e?;P)c!ALRPlZ zRaW}D;A;1(RZD#Iq5R|H2vrd070wa?pL=2??%+xDYxgxyGgI}jeeYgmxW1X}sA`8dtIeCN{y9+sc4J(HLFZ<$|bIur4} zUBItaI`3O%Nj4;Nva=H0x%gC}>*33OS?b$JPAROTFjUpH`pTi?104M3NzR1Eu@RGA zHsTSJ^R8}f=PlRR*BP8uA0Ik9?JVyfRb0j&aV#_6?dUa~mM@akFgIE+r%oZix2x;` z4qo&kk^$hcPzOc zExj%xqN3NCXitZIB`SN=g9y)SX6fw?>mc{&Z34|NEK=2sPXH!f$GHjL`|Xwz@F;7`t@09nJ9Mi z>*dsrTFz6loci_6tb)u&+$Q;S3?3fbf00^R#fbJr1dWvXky>89<`^ljRlr}wlb@Lt zsg>Zo2FQxOYDB7L5tgcKtQz5@4XEwmsOLJo(cH}Zsu92YRm1Apxeb#`xY-i*MATPC z>*Zu+zfG(2gIqPssK0hY{i27JMzsMMgL@fRH$O9kcJ@-f$XTm%ukd=Zkk@Cggv51HY)j!HB zjKq6SVXC3F&56bm63MGmD!Cb@6OVIxErQUokGy0gsCoP%Y`Ipoj7XjQsIXGrbvlpfE<^QK71pnCos;-Os`Jrs^D|;&`US8o!Zfes*?NRqGk{ zN1{?!Uj!=kAp<>9KB7k|_>w-$FS$b~nyo%*`bg*()qDXFX2RK)*nHQ;% zjVoN$3OXN3P}|f9bb1F$c-G8QUZtY?BsNi~iY*pZ`d7~PTik8&*vgmQRh^l;=La<+ z@l0FQdd`i&3Bdp#)QE3R_Bok65-n6e?i;Y;kje1l=dx|!euW^SCPa)I{&m@F>H6`# z>=)hfVv%?~pr%7Xa$xg0wZ$tXngndRen-$}V{;5gIO~4otL#W#{Nn`ADbp!}n>FH2 zUXSfaOD4x9y-EudKV5BpbucTU>bZ#f`ngJ{b6SOw_*V*kT`e~fnOx+eobcZSk3v<38@> zGCZ@)QZYvAsNsgc;I|*p#w(0Ctx>+-8^LwYjKpVtLE3N{FzjKNFe-I>;Jlm(Vt!g; zzv3okJ!Q|7$SIG_()_dd*Tyr{&|5^G%M&bq)wy zJ=2-;p2t&Z%FK;lPRBfmIPHT9Pv4{X`lygUc~VH{JWIyjFt=3vmA-4QNPL1HH}tEe zTJX*X5F(}LaE;`Yno|B>K8re+GOAuSji}kP-5l%OFN`ejD>g}RKquSA^7L<*3!JYe zL}Fjo=C7ybk452ujNvwe-SkEA^CLPpx5QgIy#BC=>gB+OKy~n=xY=CXn2XJd;HTU(_h+D+OUnIlDij^437$}}1`KRBpi}NTpmgjM{4b*26A`M_x{Bwzy%_8b; zvxw99j;K!Q?>y!YVneT-vH^Dk&g{dD;D#LZpE+wLB_Nl-cnP*a+t^h@dVHfA-0T zrNcNAvS8B-?gNmgY!0cJ&*Q~sZeDIBmboFPcZO{;wa*(3B233~A5{L>oy%L@bg>+( z%FnW~j*F*;c%d2_I!})v))sqeh(PRj;rT|@XBd9UVRe!Be_7Kls3KVn)jg9Ld8a<# zqHz0}%D?f=HxcI{LxhvNSE%H?NgdlOcBi|0$BZ9bG&QeO_3sRg+fZ5OykBCMx%92c z+sBE5x#4HAF4#xXjCxdk4kE&)NN#rhD1H*g6*tZ*6py5immvl2knPA<-$vf6{;8XZ zUU$Fq;r6DK=(@|yjeVCz1uyY3Z`o?7Y)cK-F3z$}LVw4mYgQ!`K_z->aA#zy*C=q! zOYL2e*MpWF3P9`;`(bc=mieWECO>jTQrw%Gw^yTt~bxEo%HZHRSMp*+cRKTg38rV`Tz z{HVCFj(wyc5|7p`jPS$%oGGeXkk>Gubu=$e@fY1yX+?7fzUt9wRn_Gc)_Wmt zhDEaSvP;<}k?L=M5@E#ey-^(-Ydg1)JM&%CxtF4EJQje_NR@GP1rdpm@c9__Q#kW@35yX`$472pRDfOU3U9m;dP0Sm{p*`~-jX0(RM__-91F zBSzJ2^@Ph4ZB*y6KBM@?8t#a9*GvrM#y)xFbSG8I%FIVK`(i9u+_-j2yx0$2)yGfG zzso*AWpcc&Iym?xcQuTMR;>Ekt?FDslOG1ANA+WBRlX4~`TvAF&@m&b`o667Wz{c! zj6|376?;qf-c5DK^A$fo36^@s;!aB--DH|y!Sv)@h@Px$q*T^&j3x1fd_@`NucYw= zs&RxuwT6XxpJX?JrSQvl)Klr$w-0zjXGWNL>t`3DMbB9vOW9;4jj@7kb}I4V$QzHx zlAVLHs~}bts$#XY0h?h~`R3>9pY<81n*2z;Y3)ukDL=(^!;PI>Gy9vu_tf339-8P4 zGQWAg)T6Ku9(fk#`{nOGsOfY%dsJVS8JpNjHgZCE8s_p+s{Vu$mO0BYx5JjBApYrB zIZo+W;&Nm}VqNyG(fYWxYQmaRv)=pE>m+nVQ{Bfj#ph!39DfUIC{_9K(=hx=_|meE zIjpYgwKikrp;vXj|IS(bUSylRf-JlJYUqOVwHdF|XD6y!Uw$6_@n4~GX4TItzlFbY z+AqrK<*QcEzx=#1^p^JJOWsW*;?@|?;%U7-Sc@~4Ey7$6|@#l=m zoL#lV)22kH5mGHTi?7Y5J9THgffs9RmnqDvTi2PCFS{Vt2^O_tLvpebV~>GVmznt` zEk~S7QtVL96UwA$snygHU$t_5G9UGkAAGEmne03%jVDaHy>s4%1@%A4{!5w9+^^2W z>jgHWlVa~Ap<&V>Ge04=S_k`TufB>q=soq%=WJ)9ecTrPw!v3<^%F~#QhxVJvPawN zglxS9P@GNEE}R4p&f@MQXmEFT3-0c+1a}f_aS85D(BLi!i%S-F2<{LZ7CW2g`QHC~ z>p!RJnyuQcx@)IerswMJdq&lZ0`OaARJM!kh%Wxwp=qc?HRDW8D+ahF+7L*7@;Q@@B?x*C@z6f^gJ= zVg3}bTYsje&Wbey`j#UiKcVWS6WnQCYu#rlcpL^99S3eXi~@Owf@s)Jq3s%;T;!!c zNK76`Z;w1KFQ57+=99>HiPM^1lpHRr(ZEKhwdJeBh_$?rLchPVSqS`kjX4`$Wr(-aHxbZt5WDrCeQ$rlJKeu3pZ78025tGx zVjLc*zRg=tyOMk7E&?glPTE{|(5w`2PUi3+ma;fgsvv(g>y0*G@uXD>Jq6AUqN4(G z7;q`1X0smUPrq-MACe6#d;!jV=((!P(+Vs(KEE@{Az#LSkV!wvt9Vo_opLK0o49zN z4A*1oxeETpe~nHN%dV&P)HKl@m&&7$uXjj(DMN?V6dtsl2JWS#45@GbG%l zT7N{%gzNu+nW-*cr^At>XuSJnW$FB$XA|!W_BUc5y-vq=QTv&gldrmNQ#rO3z7{2x zwYCXb9!&~CcZJ$13Zh;)wO@l2QeJds-@H>l?Z8SzpIGv_VD8=v_tZ^aM3mF<`u?`+jZk%zt1$hGp=_LH(vD z4rilmfR|!>?QUs%fd6bE`_bfPtWI@cVAmMf{#~CLe_`>DK%VU1E=%7 zUweF3mEXzVS`LQ2o54!?=tZh%rt)N~wY%%W(j8YuKD1T(8#C8POz@ZGcx9FDVANw( zxQ>=o53jw=-i+!lU<(J%X@$|Ciz7MjQrYuK^^=*PD>=Ch?rFzFS>4P&w+T>d4=r7N z!nSrPMcE5^iu&z3cS>8xU;MZJEldlifes=F@3N z)M8S4rK18j0mwR}Tf=5#KdWafiXjy#)&eYg&oJ{)5tj4>u+62%q`5#ViL{Cz5G-mr z)3P&668gMyyHiy9)l8+#>Iuu&E9qNPntVHTWP}CWDI_ZPlJh9_)fwrTo>iny%FE)iLVdsI$WgwZ+g4cn@HX5SauD3saZv9$cppbW%%h6o& zSxGo=CWh{GR*zxNPMqD$cxT%x$eybJaVy$x;=$@CiF^x$QL|nKI*fy) zvzeKy2vifc+Q7Mny6W%hcdn1qN^7Jl`2^<6#C-8+Yq5Kj*W{|w-Y;+ashkNJ{Amdg zrN5@E>Ksd0j@%D@;N;byqv6Kac{HdwAFOgtjRbQlcAjd+zugkVy=9ymeH2(e8TJr> z0GoZ9_#4@oXoT^ri4%TA>`o{fvG3N70A?8?Ec!3q#)WRFLIs+>dea_)ls$iNo-1x# z5#U=^nj@Dzmu4M_j5rqu(mzUhx}B7z6@T9+0h=?-ALPJJjGd}ka~(BZv5e0^reQO)U4LzLW&HllWv}}>Vl>J!f&DU z%0CaC;VO^!DhwYFmPRvlDSxK92kNej9;Kevy;F3DPeFe^kDnC@c#01iyA$Z}oUP~? zw(doXduyJO95c|hjI_r^vkB0EqFx5-JV};q@ecd!-i;dCv_=!(?x59OJxyi&zF#`Y+hLxiwuAL_R@JoviqCq#lgZ_Yau!=+<~sbGnglo-Zx z|G=6pouN&X1{YYCZS!gMeD9>qS#@>Zzg3&s(jQ(@+PLd(SGSV#g3Y-%XosdPCNy1C zu>AVC7PaYfIY!ox&4%=JbYsrlx%wV<_2zPh7P>NDx6)>}U1N@sAmg^r=T-wuDZ(c8 zp0p-NpXz%@M#}0hz9~^Kt-Vj#pFwRU?DWe?^>Jj`(6rhY?0I8=WDjru?xuaXmVbiT zSj+dkXa~=dK}zvBxuVdoL+XcKX((o;{va>z5fiJ?1ATsQY&^PLq4XW_Nq0JOneX!J z((Y*VgP#bS_tE7F!Di0Xc?4~n&$%1BJ?{1n9=-PHW~DyAdXtH{BW(?%2#yw;?J*b5 zUCz{-7P{kTfpFYxUs@b__wMdPj7@I7+#eDjT^g)Nl(i*y*0f8R1_x7ybv~(zOvOUk zdUn)?eg;(`&1%3Au7`olFWyXUROf;O4@s)Ag4Q!t29-8is5LFWnSnY73X-&;NS$~y zw}MrjE9+XdKW486-}tY5$D;C&y?YLa!U)~%hKs$cluHPwA+k>n=HBd|`UTm7S;PaL zV5QmNHxa3c>iB~5;MiXHI`xo?r2{Rdu~CcHnre3%Agl=kz4(Z4+oA7G#KX)PSF!9J zs){W=tx*hXq++pjm zxk=PJ4fr+t^$x-0OCI)i>wE7(GMT-(@QGk(4=1aY%U1<7NmsZ%qhZiE7eVWX-xvve6uF>MMhoWT`Rg=$ECzI5r6c*Aahg1VE z4jqU@f7H}!`=Ce98&_Tcq^<@?YPG-NfX+%CD>XWv(EJ{!70+Ltfo1f+z6Ec0R&wYx z>Nk0b?EIm?tvEgT!L%KRQL!bpDHOR`=^3xGdEtE3LzN^z0n`;Evw0P2fAk%fC0AvH zsC%2|OB7P{kD;iUcS8?vZ`NDR)d6)j*Kxvl@6Z1T71apDaBdz1UGU*Od&wI#N_mvI zSr-V_y*#NIK#V`b|b~^LSymlxMutAFS+QZ=$Yh0=H1--^MPp{mFS9N z)S%($DRU2!==g#2nq@={E1G)UljEwMo=M}I^WD`^zKA<_EH<0R!cyO1)c^oO%gTCC zByY|}g!&5frFX5OBx2yLALCchz|!+sJiTY#0%wRrzv0!btOm>4;iHW76=tsT+&n^w z4A%40q+?RgBK&oXFCFH%34LOIc!U+i^S!1V6lOOW9EYibfA=Po%5Vxb`;&F%_F;CJLP) zzf;#v@A$OX!e$H?R6a5aRSe&XeABDrd*k)4)7SY*PQTk@vmCmx7`US%RTM6F{<9s9 z-VTm;XzWS*zRxy3H3(XBeRn8*99q%&y!smGX3v$!$+)ok{(|g4Lv*k*{zYj$d2OD2 zy)Q#{@8H|r4^1y1&bj~a$>Fd`(Q)=?<}&$=#K)mIwP6qLP@@c-T9MtS0Gp&|IdC1n zj|Ta8O5F;6Q1pG>iuNH|UczKRq6~l7^~^i;pm5^0su%~sxt=5=te}bNkAOz&g1^u6Pjl}1?lnqX?UWZ(%ct~>Yn}yL=hUhmNr&GZkKJfO8wn+*;;P4z;6~- zk5{le{BHGUa<*VC+G`w#xqh>4njDP6z@FQ+>VlD2C1SLu9Db;&s&(hnoxC7k#-YEL zvl99Kflcmtr3TX2u=!=N%7iG^YME=d!ww_*em0cyDz#@F z)tH||e6`jpjQ4Pb*Qs0G9Jo)PR7A#sx9wIooqxcQn|;lB0Z<^v8cSQXy0x z!(XtZ@Mxfl<-n!rap@Ml+M zkqpJ@t1&Gm{ojgfgD^!qwP zy%BBMsp>a3N4v&S;Bn=7D6Bvgej9Wk03hC;sm>pE*ISR-`<^eQel zR=v9jhDU!*c%ZMLb!Y>zZu{ql@)E_@ue2>!@2$>p)qM|f}@s;<=-OlAjCqc zv-QDTjE7hE!sey@jvT$(h?jm||LKx=uA0D4YsqJoiu0(ibEQ3xDunw|#D0OY<9CEA zre0x7`|-5ow=J#M$Ni42;p(hviEed6?{8FI6Mk$NdhwzIA6FwPqu)hewl(3Q%eVc-*^;Szo_3ab$(<0f=*4n9L zNau{DjGhlW0?<~`9YF$s?pJT7x&fs&uQYSvJtlJ}r^Mid*!7866z7#*W}2;k7|RL| zNHY-h4n74l#|sZy{3`jBGiV%dW!v-})Ai{MFiQke$kU>Bb;g1Bc8R5HC2wECoz534 zpz}tIRTjIN7NWn@S1e3A0kO4AaFzCiWonK7@DSMte!t0K%F}SXi?6+8;3>;2*~jb`Y8799%$_P7M`8{5 z#NtPuh6<7fYnbEJ#Vtr4Hyp#I21HI2fl)SvfYbFZdW>dX%nz&qnb2T-kq+)OCy=K| zhj5xv_JWurjpwTaqp*NDCTTGDCeI{Sn3rnQYWS#%lun^2>=9KZ zT6(}VC<9Dtt{&ADGwK0`;`%8@b;VAQfkie6fuCCwlGdVqPPL<+f{&CneQXQKCPVfU zD*~aQZ#R}T6IA#(iXaa#qB#@rjhyU_V4l6nCe*6XulJPf`vd%O_iI1zU{R-Da=`aN z#AD!Vzc<44IG2$KU?U@)JgAyo~|__XeKEV8L%6+>r5MK*`Cq9e7;0NQa8g}rmG z2dT_}sEJQtt4&5A(|C8X^}2GyS;^w<^f8j%O&?bW5aNu}n1y&^E#Bb+amH>mKs?bF z@9=;)0~(hRPdvqQ6(FbBjedwH#^N1bkW)b81L8@bct;R~9IFut@kCtQ&lN(B(-?tx zVkYkA4I#&FltnyI7x#0AkOLYA5l?{Pe*TbLtVRaJ6M1nzH^?bgV;SO!ow%PbBp16; z5aA?4+)o>lOV+ptf6^xIXAH@uXe59?2^05IhZvJKroo?-i2Lb5jL92y;7_!aRuA)` z-+16pVhx3{8Zm)BU-_i75ynu(ABc6JU(K571_0Be>6{}Amm>>IqYIUz#cZxgd$3RtgdVXe}vF7a1gO-a88d>VE-!-dmcWEJ{;7_zrc;$1hVos0?+J)RUAgS5Fb4 z0$EqP6P!(oFYVg{Vn?&Y%D*|aG@p1judX!CU-}M0tr@dBQg%k-QlX9wN zZX2X5WJoU&5qEt@IEJ^)Tuo&2iz`r#yRr=@wy>5S+_iHJ?>)s0BepP%E?j##$dKSo-r5eE5Cw0KJVho8|gAC#*Fip_LgUCiF?IhHq1=B+H9`! zFSJYlVy?(cyI>>v`Oj+_|7D8qQ_O}Dw1#FhOm$I3UvY23d0nG$Js2Ls{^B}J@8~aV zXv5EXs&4dB35^rWTlbLbmI_ALI{&U46S+K3yTKdxRr3~K#G zK+XiTW*f_dW$iIH^GA1CrE6@)ZLu?hx5K{rQLi$e{p*Q&?)bvC3|;U8!o|KSoGD`f5* zTKt~pjIXgV`71O+7+_6=YdsA3A5eXfe)vPEY%383uP*bo$poN(h|EO_0~f*OC8W3Azx6xHd%n}+O?qK`+lp?ded1oww_{gA=Ye6Au{pj}v|Q=w6~=D^9d1)Z8o&znU4f@4Gbb;12POV{bI_l>V!MxRLl0#k zav}V3QPgLqi>8rdWQ@tr)ZxRS8+`uH$a-#UOpG!kVD$yH519-PLltsd@!tJ}deM7O z3X77n+FYOpW%Uccu~Cmkv`r98Ts#5u*M2|dM zR)43^KaKd)beow}_ZGAsSmvev0r+p42pSYi^g5kAu)jI^1b(u#VJ9f4_KCFa4z)>a zsnn$$_o?5mm^DIvkr*CbS7tW9D<~ZMK!x9D5vlvr5(BU+7ebikR*P+(!KLcm@5V1i z+LsZJ&s0oEi8Fw*Ve~$k!L+5$JjIZOC{6BM8Q@To@LqcDn|V$sm-njuJZyS_8Pk_Hl10N2XZOA3qf=+SK|k!0 z&G(*i>ftuslE+^=a$NxdCdijDSRJbre;OBP#;1+z(uk^u{Pd2K3q!PM!RQ{&^ZkLj zdWjz}hopdN95$=?5tin%)nDjyg~v>E1gRAtn}0z&Y+nOEYBOJW&czLHUBJ^I-?iIq z7C$bJ-U&Bp9^!~@Qa$gURc?S)6<4|f8aWvO_m6Om4I1!RdO;`Ip9CMsFBJ%jL3_VO zQRT+OP72-o?(?>patYXI(PmluMd*#6*y)rcg8+H^M}Y3o#3iEI zTDhqDN+IbrY-fqbB5rmC2fEr}N>(H0IACTg)$GQAJ+IZ+@?Ks($RO^;`=r^=IsW0k z%ns(7+*%z+xl3qmH#9{|bp?V@vFhtU(cC5u=J+OA(tmEa zOI{?ZGZt5lnVv?u>m(`(-(9dy>!-6Qm+rE&Rp~o4ZF^+?X2I1hYU1b@81GScaEfwE ziRvV2AjZ>fDS0@jD9(`#|Q!O?S z5>K(wJ~zMmk~wzID?RzRkg*w}cMk z+~x8Nkve8dx@JUV7J@{^94j!(`bf>966qC#Q=#uTA<`5l#;p@j!b^F)+uJa?lhSw( zIQQ8>;f|Dmrzz? z@)`o4vh<*=!|ndGr=s7y(pM>RekEwuV@7N(IP9T#HU2N>bd^Q z=#)Xm02JXlYOuymos0=0=8Lb<-J4OL(W+^kbS5J9PKAd%-h<6BtzE?I-!cJBZ37<> zP7zmIq=Uq(w4SrBJtj&PN~5oLQLmONT-3Z8|IYv2*?J{X!gH*3zc7@ZSK%el$Wgnj zOLg7c+2ax8u!45YnjF%SB}m#6{b#u!*BIiJ<(Iwv@k8ytc`Xrt*wjUR_pe5UTBwwi zWu#8ka;H7sO%~Fa0aW}l;h?8BS_dOb_K(HdbbLF?x$um1m<6)tc0fLb?7O_{^7z>q zEQT=(E^%jj$84?u>jRH-xXLi9H)ZKVy90LFpCm~7yasUb2&Emis(dE4Hvj@eWayKN zYGIE)m!B_D@A9^zJsPs8sHNAUci*e(Y$e&H7+>G}5xxdyL>xOCveydCR}jGRt39~` z+?VZJ^GJa9>+sTF19w-Uluk2eKsH42 zceH_+IG929NUE7%SQPB|h9T9d(jH+0sB0OMcTuU#MnCqZwWlxT8lG(Dd@cyPqvA;@F!G%APpKo^(G4)I4L-z@tTLIuZjVF z(HYIlV!=Abd($V-B(hfyRhDRn)GC4HzDBSg?o*_*rsydh!h^7I?Y~H*m*r z{Jgphs3o?OUPDQ3-Rv?~YE+ovu@L_Geb-wpW$fl_&gaJuDX`Zf=jdwxD7VbS_AGGr zanu>Rd6d$n`daIW>c5U(#J_3Y)itka=pNwwmFc8+$x_#Qu6v{>7tcbjP1-H3-9Mh& zpL$T$?l8xrx=0s;6xLw#ZHH5_HfuD2qizMdJi08*#OzQednd%i(g^VM*4CrfR;;RS z1`{jdU3LgLupH&fb_RDA)HYyv&uy)Yjh1sT&n^jXEZSz23BL)uqz4C0H4uRsVcfre z3L0aRg%E%8XQ4o7!q;B8*o8xW zSjN0U5x+MCW3XgDMjGT6UHw_Vjf}C-w)*;ojzg#A$MxZ9+#a5vdAE5(oJM&kEg zvl0ocYt(pPuW_9DS(VjJUeY{r^?biG0qpe#tn&bwmF0(C z4hsFky4v^_lu=w4&Ak1s>+9R7*Tw_Ozm~@asfjChKa`fWv8e&eTf$U7*6TyT9~x3> zQ38LUtj&q!-A6{G?GW$8aliEMEZxQH=e;|iy1F&6;O(iucXB##**dRsJp1MR_|MHpk!NF( z$>qU@)t!^APc`Zhj2gBYoW+0Sj1*R-9(3R4%{)%Yea*EzP?nBXjpF)-P@*m4D>;?L z+SNRho9L@MvRCYH97Rw}lsFfy(MfB?fACar)%EyzDWMRA@U4sbNi;P#ii1j$UOQ2~ zR^iNH>Y*LiMeapZ{#-NT@zeVXg)>pbvmUv#tf`0EsfX07X9?d*`LpGzhd8eFlwG!x z``nqev}Y6fGo(nU^uayv!Bf*!;5$I&=+}75kwK1rpYX_lF}K{8P~6#%E?pbju7w zJ$lvB-O-tzp{sH`~l> ziY6e8d6{AZ5jlegYZ+1eO92%!=f@#}2-N#2xq%Ql6H+=$S1vA@A-AplZ<0MJA?NNi zyS?zXg$cvSShgH*ltW72zAr^N$fMfEw4vGMmni*(HlrJe>C)Q@~v%2LavrXcPFBL^xgc166}@SK$;0_z=UZ-0$#IuTP&zooO<~{F2Ty{ z_l&1RNB*ircRfK_XZ*4&*I8ik_A7J2$S%xDKm;l&KF4`vf~ZLNCt;OeVz1NMB3z--VJ!DsCVlrSiLB zwY&p*szaS&#E!2mTqE`pyi@oKK68uxoDbDD$ujr-0ER6?BkB_R2I&s@I25rgeEdxo z0uQPq{sQxNz2oU^)f-8q{4ctq@MPg}VzS)#s)PAk5S0C5dQFv$?`3r-%MxkZwrthlI3-*lLKj@vh9I! z?oXr#Q2w~{%hEp%h};qSVk`yPY7XVGtd*M=+D_3{g5|<9uMd$uJ_|@1<=1ph=Ot=& z{8%MBe0>dm{wqbr%6Qh7Hi{Vv;{4GdqDZ>9`(I!3f5^>a!36n+7@>z9qH9aaMV|Re zSxP9`{eBl0`M?)&5b)plRKfb!Y!Rq)LqD@3i~-A*3?Z86s4N&xtt{ctCt@zp$>0rv}*2q-N!hL-1{x8qt?9PJ;ij zRS3B)8!QP$0omz@+)6_#kc61sk%h$_TnOLwVD{W5=By9i+{PDu77B4HE8v9a83npx z2w)mPc6y9LSr0De|2%L%igbSdAPwO*3UntM&4RG(^SC3mSB}P?{S{_=)j5{E;}Eg3 z8VT>0Op=RaeBEXa%kjDJN3?@`^r=gd73&^xUnxOH2bZCB&tL(G9JKq62{i)A=K_+M zzhVsa74Iq#Q8Ow3E5ldlq5n8M1ZIb!pC0>MnPtUj3e+LC$kP231E!$OO-zeAQd!X& zlKMH?Vmn4I^h}KLU~7p6wEG=LTMRCOOr-G$d@E{X4shJOj?lC6#dd7QPKXm1VMJYi9vQ4O~LvS)%kO3B;_nK820f`FzMyPWLI7(E7M`N2zQ8b z{n=MCAirBpv|NOXcA3doWhiHOY2^Db>)~WphJK&d7%>#(4reS^@tSwQQKMNs_uWG_K z;}Ih%P=;9BqBi0!?Iymoti~m+f{%8~y9LwC*D`U&`u)wi2y=nfpx8!0iF6qR9z^(jrI67enzp0l=`D zN-1n$Z0iIiZ)6sEhA*n$+WC<6CMz&rtUK^jglwpIyk9c@iuZhE#@hJ6ZX>0-t*yyc zTF0RfeKOT{FU1MoIfmy=i8{&TTC~vb6epr)mM=|K-#rTflZ#BtsM{4co3BFrXT>Qk zJg~+=sZvaZ+<&VplrA7=<3)M*+Y#16hDlVrqgcu7FsS%b*Ocfh#jkJ86LdTYzJRE} zYUYIO*@PjS#Gr(t0+@tP5n?0g#Q+8J5KG&)TzHwVMbcV~vp^5>-&R>54KcSxX~fk> zWQougV=B;s*xRBv;_D+-!%XsjrHbej;VC9qU}U_gc}%Z{dcECt0|TyKWEc2@IYnI_ zpBO1E2DVcq%F68rBUxAtgME`P#I3cAPkdf}6BnrOL^*-8hdhHV-0#!QibViYgyme{ z0#n{m*I>_sNWjXQ_`s}I$rZX&>{}2LShBDVJ`+nBWG(fn5MfedWbMthuFH?8s@SiE z)!WFgK5DDUmUGS^9KQAV(k>~S-_+<*cZ_fy{!i?{Vx*s>7<~;9v&G^{f7U3)=ywbK z`UIAH{}8RNfq`Z58{zU(f>;T^?%xS-ZHQuL!YhZDifI5^k~ zyV#c{r1bcdV3>g7->@XR73->0QEKB0%~@ z6q9*`VraC8*#B!YW+Qg~yFAJ<)G`2z$T~2exe$9ux?Hb&_5jZy7k5PE`rCaw>8-Z!gFHPrY?8!BHU`I{*i2@5& z72odnHlV+C7wo!pT?uBo)C{-gkwPYAe%0QKYzFN~goi;xrx65mvbtPY)rgh{I}5~8 zYWS`hXW6xrtkjU!^Jg9EXFOKZFgBcygO0(k(Fie{{pM`VClMIwZr}LiNPjM2@4s^& z`#RbW+=K^CePsgMZK45F`DC*hSkv9;IHweVi8YD~FH!GxqAN=qqxM^63>loUctHkW zr%j9ynL&GCT8$q#K(hwt!<9BjTgt&Xz*ONy(%I4RwQ^)>s$pOA1~CuD{CB+X;p4&F zj=!qS`kc@W!W=$oVtRbHHItvjv9}ubsB)YK&AB&GE$L6KPb4)7nEEmNw~_v%h?&78 z66ycH3KX4j`dB{ZLu?iGEm+!&Vi@SL03dm=rJ^%Hb3ao-iKZ058JPi3?6cg@JUYU? zt%C0>*iWi>ihT(}NL^tN`0imn4ELt==5-xB$jEwF(wx8Uvn~qTS90?vy7)+Lu>M`u z|L4ombn&2SFps%l-IoRVV`@)>i_itd{A-KT7E^e##%&^CI^So$IK7K(F{ZohV3Z&g z(ujF^#atVji_d)0^Z&}#W;lBD4KT4)%8PK4@3%`NzRAZ6%Iv65!zdXfyA(SteH^{I`=q z)&3VXwp+=!dZ9dX0(Zf2QVfL+sywspIIEGTQkbySZ4nu-CTuidSOynEppc^gMTVnLs^I?o7UGr>J&zS+h_fwc zx>V0FtS-vP9-AI_XANOb4!&Mgmt?9a;z2#12x-km9lsn_S@Ji3U6-H>|3ZgVh^ts& z1#!zet|}l~kT%$W`@0S_UUt}49_UL}NiTS~S4F@%)j2Q8P<#h1C^=HW>^JfRjA71D z7rmf-d_J6Z3(XBOHr!hhX%9pg46Gre#Gvk_62RyKf*Jg5hnRCM_>SfGzpCEMB^dZQ zlpP32=Fgzz_BUUOEXqoLTaqGF ze|?^3bj>oDEbq8>mF5(H8Tm=T)i@2VF+wE2j>1-g>)Jw+vpo~Q5($ef=KOFirIoQ1 z_+)*}Uy6ju$Rc6VM%-6|)pnsfV&uLFb2+SzWMkWC)(YVt=p@sV3YPE;KN9rmuZy*|Go-b+Cu+pRggt<)- zjF>=L@Qj7O?R&C^IJ1V5GlwowYOY6zmwXZ6#8R`z@}C;fuO!j&SN791eeS*qeO=g0 zn{I@;Mo;!crGVtJIKhRKX_?8yHg|4GK?cdnNm>K9?%b!wuE19(nfyy~aKYpJvdg_% z3mBhZPl@1#wvM5fq0w%<(!qpo2uRJF^`McRkG6Hb-etGDY_te`MRzCUl*I}+_~a&n z*%M4;_j;OAW#d)|Jtt&BVlV$Puubkuf4f|V*!+JYL4QHiqZ@m25A2*`DreKdEWUmN z-L;TY=nlsTIWW)rciL!Egwz&%KFTDQxVEE=?B7tCWGmgMlEBo+gJOFjc2W?hRtDdu zaP(KF^h2}yyoDVykg(56S4s&EO~xp0IWiB`Y@T3`h2C{rxS*og#{;Ho#b7uhv!b~? z*6rxnrC05U^g{|?a4bz-Kd*o*n=8u;NL@p+|0nU)?~Gtv&$HiG|eFdg{2T1hd)a}iJ%_M^DPH`9vyrqK@t5HrKQ zT)?;GWtjFfC)H?y58-{p3?%cHZfpAkj|$Ks1Mog-%TkW?%~%G2Z7L^{x*V}$q$VgD&V_roP#V*@ZT+n_h+GkA3Xd8CzQ>A?;7Cu zw6N2xh5F4OzIuk&G=TX@uY{UmjDl`xddbQhQ1@TqSLU-&(GLlMzG=RqRa$3kzO-H^ zuqT^%?tH3u@PoTBB{@zkAY^tW_@Y=TS;|M;L57RLbjJu{x@A0L3O0i1Lu%{R5$8n?j@? z;rN2H<3azsodW;uE@u5}sge3NiSuFTdt9wqV;=F6B z*8IZ{m-B^HEG?f&4cncp9c5MFYmP@FP~fOKat>@-NWmVtuexI0DhM_@M&Rse2#j|q zLNjI5LHe-pB(*3V)QgUZT_umBq*abEgJYjU+i_uP)v$0O4jW`_a>UD3o#^MC&!AC6?Kpoq6u|9!(V9hXp1BeteeJYkB$O`O+hgz4U zD_uqZpS`1G5^14Ju>;Kb79<*Zf~(z~Xqo{-Vv^Tn?k7q~R$h~J2KRvf*mwe;6sgMR z5NtcdASnAeB0AI8x5x0Y-M7+GuhN5~;?R;`+eP&^v9CaHnPxp{t(QtF;D8gj142TSJ+zYByijAlSznNxPc$Y9crW57H17{Xj;IGUs#p#ZKB3j5r+ zQWsM+iMR;Y5HLJ51N|rhwAivuEke3oEl-JHi3hc9P=X9^NMd&`42tWV{+~?|m>JB) zpvP*i6n(vgldd=~bjK!_s(2MP?Dnnuot{V!pC0Rc8qNo`T$5C0okOO`6fmPXcU`!y zVpX5YQSy#`08QQ3g}DHWOTk3Pj$*@~ack+Vtu}bREwJ_NDjn|}a0EN*52o5a1 zi3Lng|4AvkFQC9o8;3mz0)XW=>)~DP<~S{?=hIwUG>3=cb~gCNv22od5T6|DSBmo( zSg}5w^Bxc!w0~tbX;m7;dxPS)VPC%@apokjB)@#M3-+j4qjctIHW+s6Si`2rjc@r< zcVg-&*t(4IgaJ(3IGyy!^A;1LB`zDfP}WczD;>%aP---S9T=65Fv%f}s9!eJB|!Yn z&nM)DLz-A=AA#<2MxwG zr3@*}B8-_PNurKFlmwZZ_2STEX0Pd81V(7zb69+e^0#t`>Kta=E{$vcp}h2- zS1(w5A?|~q=C)G+L0#5DGBwk2*zGf}kB;a+yfy+v6M1GE)%ol0^wRJzICmdn?z^Mz z`3m_^augCVucyI8o6NujJ|$AB3G6-W8)|oyb~K}qn$jV98TBYf`~Pvl1#gn}e^Y)` zE6pruy5lS{5$}7+Yfc#wM(_tj+Es8gTYW=ooX}SI@PdCB7RWQ6W_?^7u~liLOqkOi zFneQH4Z(S>UpB%cLsG~R^2({T8eOu9({vbViRPnhxn{+&sXP6j4v!D*klB>|RK`(H z+2DVP2ht(x^%tllTz<&6`XX5Sof4XSN={4xjJ@-*eSq`~*0kcaAZE`IQ(qWQ7oS%$*JiADt~fUPOOsps{0J`(GL;BwtWCu$ zj_vZDrlw&WiwYuk(9g6Ut5RCETkD2XpRiY3lfGtf*fEr+WaRaL^&9IyuPk6^m5MJHkU=Is z@((RY$8d$Lx}T_5B7R>-J>EGKF&Bk3_sOB{&QXD>YRGp>jNZ4t*3JV)VUu2cf&+$% z$Keb{VhFgBqVS;_x2>lM0WRC|i{>c^ZBfE1^5)gmjBRH2au_Q$uiW-D-&8AerDZ@Hsc4ws|xFlxX zO)(g2Ff`A`d_@o$4K4|0_Tr~ZBd&Be<*xhO`a5|vCK@b--rLn3a|`9z!g*o^=tTaT z+f!MgglX8{R*i;gKL6--+fTk-Bq+lx-qxrXodbHZcQlNvg>d~cCClzBC_@Tf2d%Oz z4CGjtpaDBEK;ipIX5|_VeJqyg;#o%JC>}evrjUUv`!AUEvD)yNqYh|XTJwZX)4`s| zOCriOB`^9G6|B{93w5Y7=&-EwXQ@9`rFNH z4(rDKswumYJL(6%;6kGUc)+QX(luF<*(?WI8UG&DKA(rbNb)z zTpsK`pYPaU>l*5YYTo8@WHdV`|e4ha35Ub?$I}Js)kwq?}k1ED)E&6uRs4&zY3S=%in+?+y0x22pN#r z%0Gv|+fs9(WTGjDluAtJA3)G->A6rd(Z@q}CH^g3{daLioL{U8Z6q-_@dLI{Q8BK= z?=F0Og0B`r%I^7DC@~Ck(=G+?2Yv5~%>WWk;mu+O1y17pKN@lf^Wj!Oe5VZ)MA7wdlz zliJ3@!^Aqr7y9$&Tml=5t<$CRCC}yhQb-7i&-&%z{U})ocN~I1KLY1PKHW?jGFTEf8D=hhT%d1h;_%2=49@90qp{PLSZvo%g)weD}Lm zw`yun)&AAH*Xkv`p6=C?$7BW%4zEe#2%n6nkEMgma##vyY5=}~03e_wk~u9+3P%)2 zW}-}nWQM{p!!EWPU>0Q-z>VU=EKJ7X4pYYZ5jhKOB6MF04JpzNem352bj!|?MxO}h z5-|K=XKDPgCZhroL^_Tay9%O*myWAV<>*DiPx?Xv_6{P}3F(2>$<~ zKRniYSUKF^YWNpY*$Rf1I@!;7UQ#S17%V^nN&-L?rN}b4)@nuS^%oP1Ik~wojkf;C z7-y{X90%FaXVSQjf}FvLD#O&&p`>wysCKma+<+966o5YHJ?JOML6X~Nl4e#3^<%oy ze8zS_TP#T0uUb2T(aarGa!&ZBPXoAjV?w{K|4#TPh5qQHo-KL@*T1 zQ1niRoL2#0?ZW(Ty+aKVq@Gmy%N3&mvn-ZiN_Q~2vqMk^eMLMx4y0ULxV)sa1czm~ z{TDTjUdTcwCKwQiru|A-lvcqsL|7EBG^=FBnCXe*iFb>A?D`;T8(3k>gNdyMFpLYW z?Q@7EaGX16E*I^7uLC636ZayHa6S7}!Ea+lvQyzIOlTWVaB#Hi^BW;k1=kk2j9$lx zno7#RQl^BfVJJFg6oSLT_P&2v&ovWWH&(^Sm69#@)6@?=*EpkUvh-~?dYv`3yz0T| z>`@mwoi&Yc!`huDuC*uvuVI%({t%Zo3mKy2C8b#w2o2=u^jV~6 zIaxuPP>!TT`3&g{rD0kn5++Jg&5=~)VVYgsVw_^U&)AnJ+<#q|4_A`L{5?3bCRR;}i6#|y6lDys2OUv8e?K(;*uu5#aZ!7 z+tQLVkdrXw5f7mZ0VY6rpcD{c-+M_Ga2!O1U-^(ahlI&QKr!4MbOl0#mr*zn$8iVj zef20Hw#lo7U)=HyDBy7JySWul`n*BHG&8~0C(;+t=Rn~tUK|0E0}X-dK5YRqWrtuf zaEYagCqE^b$J5Q;^Ji#`q{}(tdHv$#5W)i|)>b8**S`R8ivOrVy`^ zpg#H7G8J@LkO}!<%ljY0ASHhFTbdVffUuW_$^d;Rgg;3!UOvp#f|R5rnxv4E^E!wZl2=!HC34eEmNElsO3*3A0xLLMV+O!M;g;bu(U}Ai_S^2t5ln&fs-d zn1unwaT4++sRiFYlfEwg+Btt{-y*VG?^W0) zGyL(hBaQ}e`lk8S6-*SAD<%{te92sL*3yyyd5RNbMzPxyt`@D!xQsekj-XrqaWoaW z=z562p?{8^qeYE@qbDv~Vq=O+k_$kzN?iB%fC1iwePxuob)`>Sg{}V|q{(%VlSDIE z2x45yqN0^`hhiIqPBSXh%1IUt2spuGnm;{L`ylI%&at+H`yA`oZB4D zoMo+9N~pk~6m#XjWqaR$AcqwycF!zi6l6flRPJZ^OkO-vKm>|1s2@ZJVg(g}ev|VT zE1|^a?dA0ReU}N={JZmQ!Mk?Vfvy2h1y2yg2E_(&fN}sJLdgZifD}PvAQn(L!ga+T z=v7p(>#;;P`>cJ0eUAL=VQmF|e=YKT@`F5PMXz8pDf?bHuMtRdsWCOSDZcmFf7ImE zFU0+7Z3LG#2SH#GksvS5;dl6)_{AdR(urB=yu#~Ua)khlUPLL_Z*Qn6UWQ48qRX#S}j6G+hmcCLP?k!a;nZy04# zcXgoFLZ=JN0}(96EelzYA}b)Z#cL3d@VA6wAp56kP|9!x@ih1t+zAo26$8QuqVR~v zL1;<=|EF52<{o0psoLX$YZt5{QK?2YhnX8LSO8@~4#|O(Z7?2^L|{dT^&u*dpbg15 z!bzMDZ{R&%eW%V9p#xOI)QEssZCD~8N{Iw8BgB^IvnGT;{hp-m*d|r`x4CNAOaVYm zFcnrA#08dDBm77(8eA;FT_Bu(U#-tS8NM&>4t{`0GEp%Hp@L~kiJ8Mj!Qa#np{xe7 zw!}QtDFasE978?DJs@nhSPeugSQH>qFatCzL2N^Us<_lY5hVO!l43(9)ZHP&TB2AY zZ@(f(ssB`i#s&pICipD=PYv0b97-V!DfBTM1Wn}szz?ILpC#&%r}^Tpf3A}+LE}Jh zn3|{-3@gbym25@87z#azOHx3kiu|46_`g;*OM*7PlD;A|L7^12ESy)I2O^6?QwPN$ zP*HidV#{C+x9SM~L2ix)YU{IeME&Qh%Zz`H{#Ajjl$xI)PaS(L2^NAv~A?{|G z$gDwx5;0(Uh=wf*bm2?vK@>{i4B#t6%L?pDk)UW;aFc{kfuQZ;)sArE^wpf~lqQ)- z^~#|{jy)(VkI3tAR?rh6%@W&=R$IC(LJMQrwS^}|2>4&!6`F(14V#q8h0sIQ6{8Jy zJ>*Q>7@A_xToaRu5c6P>BL9&50$r5wSt!<$DFq*FnN#7FL;oQ)mP2LIM7^L<`MmDb;)uGcS&=}gG8l5ODkA}x%=9EJWEwld|*QeMJd|9t5OvyhDC6G zms1Mzso<{~=||YnAO^`yh!qoB7V4gOE99fC;77~I7UkeIZJNDa>;F49Qu_fv82g)+ z3F=~@7P~;w_6R#^0!NK4n4tHEccfkqbg2MJ86W%+*K{S@)m(M9^b;NY`en%Hucs+Z8TN)B^;f z3iA&B4Xd`wI;360rb5hlKQgK-)lP((i#Bkmf2i5RBV>$L{0wU@U)Z9=po2mnLBIsY zC07JJFhM&7c``;b7vB zy99~P?@{~z&kpA>Rb|Pc$N`47faG@JD&mY_!bAKy)JBO@$dR@if_j{kqgLPgRr>^~{68gnX=a?lJI-Ig{Lpd7*=r4PY} zsy@d55v?*tI%I}a)%v2FK%8OIvcuBT{eQl|LFm^$h5)t4ci0dK399$zql$`AU)HNQe zuJSDi-HQd;_&iXK5X}Qh5k^2PZLifWqW_K|<0*BdhV&69 zi!$`jFHWe+T1!DyR*+BY562}+J&HD_8D{1_&VK(8)P?+yko;%R5jyCDWu64!5a=@f zTO`|3G@y!he!V75o?FmT;~YZYl8z#XsZhX3HN62sOLsDqP z4HoL0Fur+(qZ$Fzs~ifc(Hv|&_`@>vh}b%jul}>;;fo-`u&Ejzjl7>>)qwsFBdQQK zlROx6G}2NORbwTouQp_+@P&&bjN@CPa)EQLd-7gam*mbz)CBT`>y-R@G*J=#3z8Oo zEU4^4K1;b5w2oY6sC2WZf0#PaXrn7^_yoc|icXc0eP>}xCeoBwZa+3ullU>#qmjZ(vKI zmHENO_51Kqbn+g#X!%x4UZG@~4&#{dCnti0v@=oL($oghoYjm!$1z{N)Wyc930)Jn zA`13T(VsvT=?{>rhgm#b+d5m z_|Qy0{4~Oru82wU&h+HKS0#_^k({~L{jz{nr!7A{j(6?OY!O?4*5DQ8;oG4?vR`S% z&sKbMTG2DaIYFiyME>ucTMC}N$!N-<|B2#=c71c(!{wU|yN;7Wf%;z#ndN;Zo;9Zz&n$wgB0K#%E2Fjb(EVb$OMp4MoxE|8gnpSf>t*F-4`T!?CxU z$oll8K68~(&%8yCW3!JLymDET9NTI0&~;e)u6x_FMa2@mg2QFb zYccTcJ(mx$n@*ip(Y}vni{z`uIiuNE`VbuRPqWbdV8CdbGR6!oLa;sZa zZBa_baJ!rZxZ!gb&y`hXx7E0GzjC2N># zcXHj4_u6oa!*kdGBgRudm=ND z@p$kPejj{azj>YbS7pLc+r>req}a4U+=<`S#+!+6PAP$eEZxu^w!%7HBrKbe-vUWl zx^Y>$@mb#N5`}4yWhUZ$6!X40g9|&ub^=+-25)udJ`WkH3#cbvRhE*dJGX8mvtDXH z5M?~Xc@<^0$~5t_z8n}ABYY|3JnG!_zWb%v|3LZSHrow$(t+oXUc%?Ly_ra_-FJ6FZd?uM z`yZ|-mKipZDt9PiX(9trKhCqN9=U|BfO$&?ZsSiVTEjY7hU&eH14Fk5SQ+c@zCX41 z<(?3pjoWT-421b*t=@=iS2Y9f+>Be)D-*~z(>LS3mCzOL`5l_P>UhecC!Tc|-JW>9 zz;GiBG!L^TV1@~7vLdmDcfw?)yp#Rl8iVtn?WU|HE0_zY7=i-`M8#Sg9`t<;F zWC>3Eu1{V|u4kD;fB-2s@B1W(kJV0xjB7tj-TBo*VdX zm&jt^m*{2k-#lURDE~L2>FR0LRa(pMPo~z$tZJUbjJlu)#mh;A@)g_yGtQ*b}c7=^w6FV*GwhI;_h*s`K6 zHkJHc^?)Md+7A8Nj$%uHx*D>3+#5c7V_zkPU4)7h%F_=&jSj6@xwM*uq)XGWu=qQp z?xeG~HFaB6sTn(7aiq69ppfbFLH59 z?U=E_XConyX)8%co_8&>D)GY)&r-iEg#P8KtDoMgU*e7{^Yda+ghh)fylUpG9TLB5 z7PQ#&M3xO78@7=X^C4DPd>Szw8fCowdKr4ROW(5QPK_6+S`X9QvGeK-e0^gL48}ad zs+vYuCa`7PT?y8-vZIf6EiCB>Cv{zCHE9X{t$aubT&1`f<_(uwcTF(g32S#b`d_Nn z-0>y-(o`K}nQ2d+f|kR3L^);j6W^41FkM0YhlZ9ojS7(jOU`-g46ze#%M9|pbV=Sd5*JMRU~(74*hd~O`Tb61spQk;?}6M4+lwl~TCJcjS6&+Z?&H3nd0cfHlZn#cKB5eipjv@9m)zi837<%klhQ4BPXcF>Vf^nWFHEETzA0f_(T}1k zl-A+?xHow&suGLQu9KY*y0w^s6|3#ZA=lcWZ(~-$$a<1X%3_zNqV_0WG?Nz3ZtOAc z%5o$!N>a>4c)PA#O25{;i2O%2t;XVzit*ZLKXd3(rVLURfLv^tYO0+n@#tz?h-*1@ z&J@DOgpY4*xE{~zgsb$Gpm*}fU;A;z431h)56A3LE;<-#o=M34k)Rxxl~tpxyl&a& zaMiE4hABrO0L@coPJCr5skt+9&s-yak!rEDUm(^H#%@C&}^35Ey3>bHrB zvW?eJAr1k@k%=Tx0r%S2^z@%SvO_Bjb2@NU!nn0qvT-DA3`zp|Yzej_tTE*Cl!n5x zh60J2Gusa>*rNa@Z5gG{H#DYW!z9Duj+ktO4l#1%O$qg|h9YiMQr`6Zy0Wn8cTs5s zR(evle@vCYMBKWZh#Il>UJPRj-lBsF8Rhst>GKKBfYz}MrY-Bv|vK~ zhm0pU)Q7zLNjCu^Rh1}iWO#~$@>oGfTN=}n#jEha zN8uk5u7{6@PY+|3Fd6P-C(Ya%iwHA4NAcnYd%uY`Dmm3G)*VjV9tvDB6qFo*l@5Jx zu-rW&T9@5>pgb2MQ%Y^p;R_fVgDiLL%(GColDLkNxb|o?rL3H>*|m#1jbqlGF|Z`c zE%<+Ax})SzS)7meRp6@O-xpalS$h**GaiT0N67t7CM@G}Zc_!%Pi|F(G}`;0-x|`W ztXaUgUmd<f9{MaMj zzcX6o^_mcO3LE0X)14nV_^r61?d>G*`Fo8Re+sE2;XTR=0Nk267T@#l(frALuNN&$ z!dySx`K@&Y;`u1AD}?v*`A6i}dd*$eoG-x!BST;IkHv8Wew?7Elx(}D8BK953S3KY zn9!g2?6-+i_@RckplPiJpP)3PjC^|$a{VkyTdayr_npWAzO4g+1|fyRdxPuFPavE=L}dWId;tr~=XGE^Bz9scr6U}8ti*%m_CtagJ# zMZasIh)G3aMov}Y>EEg`CCVr+EAHIN#4*h+gB;o^Ib-un+8gM#d*dE)Bhj$oCxZPW zP2S#y5o&2A!v>y+gSr4kf(B8UGwKLb{aji_BBZEAPVc;K0Obqz#E$T}n_Da3Z#- z7AujtL{|K>Bkhi9M&KhVxljc2c;(q%As6_S^-->l`Btt@kT-v%lH-s3SLqva@5m|> z-h$9?7QH6uVr6F>ZA^jAQ)9 zp2>Tt`oB&tN%ftuostyG*v=CNb7kLfq(lDDj^U(kn3n?FR3XMkZGRMC&+ztrXO7X+o+FrDK#kW(34LxGY<|>7DsMo3wm)he_ncE|Q`HyHh(| z%=Fyt!XKxvleF0vvQ?-2o(QhBozB#|NXH<0;2kf$a=dQO+v`U(gslYqvwv{BP1|qu zZz>7U#z-f6QkmKFrZ8R_Xt}eBm_JpPrCm$;Ntah4#~Kgsbc;-w^qwj)<+o>Hq0TJt z)Z=#52V<2e#l$a<_-#(i#(dfdqml4uN8&LUPGo<2{EZl$^^&Yo4xl-M@@w4)Rpzj7 zexm#WGRFv9Tg7ayRG#~=JEqShSlk`RSxVYm2U|vR7Gh|gbDZG*{@$pKHeDG0V4JYf zmA@tmQU&h_(pE7uA+K4+{D`wZu(h%eZuPy+;g=4zWc3O@_-zG{Ni5UE{6icMmr)!; z=sx9A@PD>;ToPTx5N)Y7>9(=KQ7#!SAeU5^SeG1#62F8uK1L2X+gQ?6ImN7pG+IS; zf0k1tUBVexf*YNx*WPr%!FF22!8Gf^w8;MS`u=q8-n8=Gblm>5NZ-maENQa&ppga@ zh}KB?PM3fW4;FWlE0&@jxQyeDQYrAciEWCrAV%p9#S6A}X+x0QmaYLS{Y;?Eo~<>H zAtK--85Bi|2$NA<6V}>uPyKP_(TXN=ebj>3)-eG=al&bX^l

3+2W#xUSJ*W;nC7j{9)0&7kKtfDWXHd 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

Di3&g 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%0Dy2 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

wamUzoQ? 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%0D0~wm8Gyv@8Ei>2UmY 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 table + .Column("Id", column => column.PrimaryKey().Identity()) + .Column("VideoContentItemId") + .Column("Type") + .Column("Name", column => column.WithLength(256)) + .Column("Description", column => column.Unlimited()) + .Column("WamsPublicLocatorId") + .Column("WamsPublicLocatorUrl", column => column.WithLength(512)) + .Column("WamsPrivateLocatorId") + .Column("WamsPrivateLocatorUrl", column => column.WithLength(512)) + .Column("WamsAssetId", column => column.WithLength(64)) + .Column("WamsEncoderMetadataXml", column => column.Unlimited()) + .Column("OriginalFileName", column => column.WithLength(256)) + .Column("LocalTempFileName", column => column.WithLength(64)) + .Column("LocalTempFileSize") + .Column("IncludeInPlayer") + .Column("MediaQuery", column => column.WithLength(256)) + .Column("CreatedUtc") + .Column("UploadStatus", column => column.WithLength(64)) + .Column("UploadStartedUtc") + .Column("UploadCompletedUtc") + .Column("UploadBytesComplete") + .Column("PublishStatus", column => column.WithLength(64)) + .Column("PublishedUtc") + .Column("RemovedUtc") + .Column("Data", column => column.Unlimited())); + + SchemaBuilder.CreateTable("JobRecord", table => table + .Column("Id", column => column.PrimaryKey().Identity()) + .Column("CloudVideoPartId") + .Column("WamsJobId", column => column.WithLength(64)) + .Column("Name", column => column.WithLength(256)) + .Column("Description", column => column.WithLength(1024)) + .Column("Status", column => column.WithLength(32)) + .Column("ErrorMessage", column => column.Unlimited()) + .Column("OutputAssetName", column => column.WithLength(256)) + .Column("OutputAssetDescription", column => column.Unlimited()) + .Column("CreatedUtc") + .Column("StartedUtc") + .Column("FinishedUtc")); + + SchemaBuilder.CreateTable("TaskRecord", table => table + .Column("Id", column => column.PrimaryKey().Identity()) + .Column("JobId") + .Column("WamsTaskId", column => column.WithLength(64)) + .Column("TaskProviderName", column => column.WithLength(64)) + .Column("TaskIndex", column => column.NotNull()) + .Column("Status", column => column.WithLength(32)) + .Column("PercentComplete", column => column.NotNull()) + .Column("SettingsXml", column => column.Unlimited()) + .Column("HarvestAssetType", column => column.WithLength(64)) + .Column("HarvestAssetName", column => column.WithLength(256))); + + ContentDefinitionManager.AlterPartDefinition("CloudVideoPart", part => part + .Attachable(false) + .WithDescription("Stores information about a cloud video item and its related assets and jobs in Windows Azure Media Services.")); + + ContentDefinitionManager.AlterTypeDefinition("CloudVideo", type => type + .WithPart("CommonPart") + .WithPart("IdentityPart") + .WithPart("MediaPart") + .WithPart("TitlePart") + .WithPart("PublishLaterPart") + .WithPart("CloudVideoPart") + .DisplayedAs("Cloud Video") + .WithSetting("Stereotype", "Media") + .Draftable()); + + return 3; + } + + public int UpdateFrom1() { + SchemaBuilder.AlterTable("AssetRecord", table => table + .AddColumn("MediaQuery", column => column.WithLength(256))); + + return 2; + } + + public int UpdateFrom2() { + SchemaBuilder.AlterTable("AssetRecord", table => table + .DropColumn("MimeType")); + + return 3; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/Asset.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/Asset.cs new file mode 100644 index 000000000..60134a6e7 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/Asset.cs @@ -0,0 +1,139 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Orchard.Azure.MediaServices.Models.Records; +using Microsoft.WindowsAzure.MediaServices.Client; +using Orchard.ContentManagement.FieldStorage; +using Orchard.Core.Common.Utilities; +using Orchard.FileSystems.Media; + +namespace Orchard.Azure.MediaServices.Models.Assets { + public abstract class Asset { + + internal readonly LazyField _videoPartField = new LazyField(); + private AssetRecord _record; + + public IFieldStorage Storage { get; set; } + public IMimeTypeProvider MimeTypeProvider { get; set; } + + public AssetRecord Record { + get { return _record; } + internal set { + _record = value; + UploadState = new AssetUploadState(_record); + PublishState = new AssetPublishState(_record); + } + } + + public string Name { + get { return Record.Name; } + set { Record.Name = value; } + } + + public string Description { + get { return Record.Description; } + set { Record.Description = value; } + } + + public bool IncludeInPlayer { + get { return Record.IncludeInPlayer; } + set { Record.IncludeInPlayer = value; } + } + + public string MediaQuery { + get { return Record.MediaQuery; } + set { Record.MediaQuery = value; } + } + + public DateTime CreatedUtc { + get { return Record.CreatedUtc; } + set { Record.CreatedUtc = value; } + } + + public CloudVideoPart VideoPart { + get { return _videoPartField.Value; } + set { _videoPartField.Value = value; } + } + + public string WamsPublicLocatorId { + get { return Record.WamsPublicLocatorId; } + set { Record.WamsPublicLocatorId = value; } + } + + public string WamsPublicLocatorUrl { + get { return Record.WamsPublicLocatorUrl; } + set { Record.WamsPublicLocatorUrl = value; } + } + + public string WamsPrivateLocatorId { + get { return Record.WamsPrivateLocatorId; } + set { Record.WamsPrivateLocatorId = value; } + } + + public string WamsPrivateLocatorUrl { + get { return Record.WamsPrivateLocatorUrl; } + set { Record.WamsPrivateLocatorUrl = value; } + } + + public string WamsAssetId { + get { return Record.WamsAssetId; } + set { Record.WamsAssetId = value; } + } + + public string OriginalFileName { + get { return Record.OriginalFileName; } + set { Record.OriginalFileName = value; } + } + + public string LocalTempFileName { + get { return Record.LocalTempFileName; } + set { Record.LocalTempFileName = value; } + } + + public long? LocalTempFileSize { + get { return Record.LocalTempFileSize; } + set { Record.LocalTempFileSize = value; } + } + + public string MimeType { + get { + var fileName = !String.IsNullOrWhiteSpace(PrivateMainFileUrl) ? GetFileName(PrivateMainFileUrl) : OriginalFileName; + return MimeTypeProvider.GetMimeType(fileName); + } + } + + public string PrivateMainFileUrl { + get { return GetMainFileUrl(WamsPrivateLocatorUrl); } + } + + public string PublicMainFileUrl { + get { return GetMainFileUrl(WamsPublicLocatorUrl); } + } + + public AssetUploadState UploadState { get; private set; } + public AssetPublishState PublishState { get; private set; } + + public virtual IEnumerable GetDisplayLocators() { + yield return new DisplayLocator("Private (SAS)", WamsPrivateLocatorId, WamsPrivateLocatorUrl); + yield return new DisplayLocator("Public (SAS)", WamsPublicLocatorId, WamsPublicLocatorUrl); + } + + public override string ToString() { + return String.Format("{0} - {1}", GetType().Name, Name); + } + + protected virtual string GetMainFileUrl(string locatorUrl) { + if (!String.IsNullOrEmpty(locatorUrl)) { + var builder = new UriBuilder(locatorUrl); + builder.Path += "/" + OriginalFileName; + return builder.Uri.AbsoluteUri; + } + return null; + } + + private static string GetFileName(string fileUrl) { + var uri = new Uri(fileUrl, UriKind.Absolute); + return uri.AbsolutePath; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/AssetPublishState.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/AssetPublishState.cs new file mode 100644 index 000000000..a92ffcb2e --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/AssetPublishState.cs @@ -0,0 +1,40 @@ +using System; +using Orchard.Azure.MediaServices.Models.Records; + +namespace Orchard.Azure.MediaServices.Models.Assets { + public class AssetPublishState { + + private readonly AssetRecord _record; + + public AssetPublishState(AssetRecord record) { + _record = record; + } + + public AssetPublishStatus Status { + get { + return _record.PublishStatus; + } + set { + _record.PublishStatus = value; + } + } + + public DateTime? PublishedUtc { + get { + return _record.PublishedUtc; + } + set { + _record.PublishedUtc = value; + } + } + + public DateTime? RemovedUtc { + get { + return _record.RemovedUtc; + } + set { + _record.RemovedUtc = value; + } + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/AssetPublishStatus.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/AssetPublishStatus.cs new file mode 100644 index 000000000..a1a8ad85f --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/AssetPublishStatus.cs @@ -0,0 +1,13 @@ +using System; +using Orchard.ContentManagement.FieldStorage; +using Orchard.ContentManagement.FieldStorage.InfosetStorage; +using Orchard.Core.Common.Utilities; +using Orchard.Data.Conventions; + +namespace Orchard.Azure.MediaServices.Models.Assets { + public enum AssetPublishStatus { + None, + Published, + Removed + } +} diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/AssetUploadState.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/AssetUploadState.cs new file mode 100644 index 000000000..5a2932c43 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/AssetUploadState.cs @@ -0,0 +1,55 @@ +using System; +using Orchard.Azure.MediaServices.Models.Records; + +namespace Orchard.Azure.MediaServices.Models.Assets { + public class AssetUploadState { + + private readonly AssetRecord _record; + + public AssetUploadState(AssetRecord record) { + _record = record; + } + + public AssetUploadStatus Status { + get { + return _record.UploadStatus; + } + set { + _record.UploadStatus = value; + } + } + + public DateTime? StartedUtc { + get { + return _record.UploadStartedUtc; + } + set { + _record.UploadStartedUtc = value; + } + } + + public DateTime? CompletedUtc { + get { + return _record.UploadCompletedUtc; + } + set { + _record.UploadCompletedUtc = value; + } + } + + public long? BytesComplete { + get { + return _record.UploadBytesComplete; + } + set { + _record.UploadBytesComplete = value; + } + } + + public double? PercentComplete { + get { + return BytesComplete.HasValue ? (double?)BytesComplete.Value / (double?)_record.LocalTempFileSize * 100 : (double?)null; + } + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/AssetUploadStatus.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/AssetUploadStatus.cs new file mode 100644 index 000000000..78b6e8539 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/AssetUploadStatus.cs @@ -0,0 +1,14 @@ +using System; +using Orchard.ContentManagement.FieldStorage; +using Orchard.ContentManagement.FieldStorage.InfosetStorage; +using Orchard.Core.Common.Utilities; +using Orchard.Data.Conventions; + +namespace Orchard.Azure.MediaServices.Models.Assets { + public enum AssetUploadStatus { + Pending, + Uploading, + Uploaded, + Canceled + } +} diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/DisplayLocator.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/DisplayLocator.cs new file mode 100644 index 000000000..038e5d078 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/DisplayLocator.cs @@ -0,0 +1,13 @@ +namespace Orchard.Azure.MediaServices.Models.Assets { + public class DisplayLocator { + public DisplayLocator(string name, string id, string url) { + Name = name; + Id = id; + Url = url; + } + + public string Name { get; private set; } + public string Id { get; private set; } + public string Url { get; private set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/DynamicVideoAsset.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/DynamicVideoAsset.cs new file mode 100644 index 000000000..a29b04917 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/DynamicVideoAsset.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; + +namespace Orchard.Azure.MediaServices.Models.Assets { + public class DynamicVideoAsset : VideoAsset { + + public string WamsPrivateOnDemandLocatorId { + get { return Storage.Get("WamsPrivateOnDemandLocatorId"); } + set { Storage.Set("WamsPrivateOnDemandLocatorId", value); } + } + + public string WamsPrivateOnDemandLocatorUrl { + get { return Storage.Get("WamsPrivateOnDemandLocatorUrl"); } + set { Storage.Set("WamsPrivateOnDemandLocatorUrl", value); } + } + + public string WamsPublicOnDemandLocatorId { + get { return Storage.Get("WamsPublicOnDemandLocatorId"); } + set { Storage.Set("WamsPublicOnDemandLocatorId", value); } + } + + public string WamsPublicOnDemandLocatorUrl { + get { return Storage.Get("WamsPublicOnDemandLocatorUrl"); } + set { Storage.Set("WamsPublicOnDemandLocatorUrl", value); } + } + + public string WamsManifestFilename { + get { return Storage.Get("WamsManifestFilename"); } + set { Storage.Set("WamsManifestFilename", value); } + } + + public string PrivateManifestUrl { + get { return !String.IsNullOrEmpty(WamsPrivateOnDemandLocatorUrl) && !String.IsNullOrEmpty(WamsManifestFilename) ? String.Format("{0}{1}", WamsPrivateOnDemandLocatorUrl, WamsManifestFilename) : null; } + } + + public string PrivateSmoothStreamingUrl { + get { return !String.IsNullOrEmpty(PrivateManifestUrl) ? String.Format("{0}/manifest", PrivateManifestUrl) : null; } + } + + public string PrivateHlsUrl { + get { return !String.IsNullOrEmpty(PrivateManifestUrl) ? String.Format("{0}/manifest(format=m3u8-aapl)", PrivateManifestUrl) : null; } + } + + public string PrivateMpegDashUrl { + get { return !String.IsNullOrEmpty(PrivateManifestUrl) ? String.Format("{0}/manifest(format=mpd-time-csf)", PrivateManifestUrl) : null; } + } + + public string PublicManifestUrl { + get { return !String.IsNullOrEmpty(WamsPublicOnDemandLocatorUrl) && !String.IsNullOrEmpty(WamsManifestFilename) ? String.Format("{0}{1}", WamsPublicOnDemandLocatorUrl, WamsManifestFilename) : null; } + } + + public string PublicSmoothStreamingUrl { + get { return !String.IsNullOrEmpty(PublicManifestUrl) ? String.Format("{0}/manifest", PublicManifestUrl) : null; } + } + + public string PublicHlsUrl { + get { return !String.IsNullOrEmpty(PublicManifestUrl) ? String.Format("{0}/manifest(format=m3u8-aapl)", PublicManifestUrl) : null; } + } + + public string PublicMpegDashUrl { + get { return !String.IsNullOrEmpty(PublicManifestUrl) ? String.Format("{0}/manifest(format=mpd-time-csf)", PublicManifestUrl) : null; } + } + + public override IEnumerable GetDisplayLocators() { + foreach (var locator in base.GetDisplayLocators()) + yield return locator; + + yield return new DisplayLocator("Private (on-demand)", WamsPrivateOnDemandLocatorId, WamsPrivateOnDemandLocatorUrl); + yield return new DisplayLocator("Public (on-demand)", WamsPublicOnDemandLocatorId, WamsPublicOnDemandLocatorUrl); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/EncoderMetadata/AssetFile.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/EncoderMetadata/AssetFile.cs new file mode 100644 index 000000000..620619c26 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/EncoderMetadata/AssetFile.cs @@ -0,0 +1,148 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Xml; +using System.Xml.Linq; +using System.Xml.XPath; +using Orchard.FileSystems.Media; +using Orchard.Azure.MediaServices.Helpers; + +namespace Orchard.Azure.MediaServices.Models.Assets.EncoderMetadata { + public class AssetFile { + + private readonly XmlNamespaceManager _nsm; + private readonly XElement _xml; + private readonly Metadata _parentMetadata; + private readonly IMimeTypeProvider _mimeTypeProvider; + private IEnumerable _audioTracks; + private IEnumerable _videoTracks; + private IEnumerable _sources; + + public AssetFile(XElement xml, Metadata parentMetadata, IMimeTypeProvider mimeTypeProvider) { + _nsm = NamespaceHelper.CreateNamespaceManager(xml); + _xml = xml; + _parentMetadata = parentMetadata; + _mimeTypeProvider = mimeTypeProvider; + } + + ///

+ /// The name of the media file. + /// + public string Name { + get { + return _xml.Attribute(XName.Get("Name")).Value; + } + } + + /// + /// The size of the media file in bytes. + /// + public long Size { + get { + return XmlConvert.ToInt64(_xml.Attribute(XName.Get("Size")).Value); + } + } + + /// + /// The play back duration of the media file. + /// + public TimeSpan Duration { + get { + return XmlConvert.ToTimeSpan(_xml.Attribute(XName.Get("Duration")).Value); + } + } + + /// + /// A collection of audio tracks contained in the media file. + /// + public IEnumerable AudioTracks { + get { + if (_audioTracks == null) { + var audioTracksQuery = + from e in _xml.XPathSelectElements("./me:AudioTracks/me:AudioTrack", _nsm) + select new AudioTrack(e); + _audioTracks = audioTracksQuery.ToArray(); + } + return _audioTracks; + } + } + + /// + /// A collection of video tracks contained in the media file. + /// + public IEnumerable VideoTracks { + get { + if (_videoTracks == null) { + var videoTracksQuery = + from e in _xml.XPathSelectElements("./me:VideoTracks/me:VideoTrack", _nsm) + select new VideoTrack(e); + _videoTracks = videoTracksQuery.ToArray(); + } + return _videoTracks; + } + } + + /// + /// A collection of names of source media files that were processed in order to produce this output media file. + /// + public IEnumerable Sources { + get { + if (_sources == null) { + var sourcesQuery = + from e in _xml.XPathSelectElements("./me:Sources/me:Source", _nsm) + select e.Attribute(XName.Get("Name")).Value; + _sources = sourcesQuery.ToArray(); + } + return _sources; + } + } + + /// + /// The total bit rate in bits per second, including all video and audio tracks. Counts only the elementary stream payload, and does not include the packaging overhead. + /// + public int Bitrate { + get { + var totalVideoBitrate = _videoTracks.Select(videoTrack => videoTrack.Bitrate).Sum(); + var totalAudioBitrate = _audioTracks.Select(audioTrack => audioTrack.Bitrate).Sum(); + return totalVideoBitrate + totalVideoBitrate; + } + } + + /// + /// The mime type of the asset file. + /// + public string MimeType { + get { + return _mimeTypeProvider.GetMimeType(Name); + } + } + + /// + /// A direct URL to download the asset file using a private locator. + /// + public string PrivateUrl { + get { + if (!String.IsNullOrEmpty(_parentMetadata.PrivateLocatorUrl)) { + var builder = new UriBuilder(_parentMetadata.PrivateLocatorUrl); + builder.Path += "/" + Name; + return builder.Uri.AbsoluteUri; + } + return null; + } + } + + /// + /// A direct URL to download the asset file using a public locator. + /// + public string PublicUrl { + get { + if (!String.IsNullOrEmpty(_parentMetadata.PublicLocatorUrl)) { + var builder = new UriBuilder(_parentMetadata.PublicLocatorUrl); + builder.Path += "/" + Name; + return builder.Uri.AbsoluteUri; + } + return null; + } + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/EncoderMetadata/AudioTrack.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/EncoderMetadata/AudioTrack.cs new file mode 100644 index 000000000..2642804fd --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/EncoderMetadata/AudioTrack.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Xml; +using System.Xml.Linq; + +namespace Orchard.Azure.MediaServices.Models.Assets.EncoderMetadata { + public class AudioTrack { + + private readonly XElement _xml; + + public AudioTrack(XElement xml) { + _xml = xml; + } + + /// + /// The zero-based index of the audio track. Note: this is not necessarily the TrackID as used in an MP4 file. + /// + public int Index { + get { + return XmlConvert.ToInt32(_xml.Attribute(XName.Get("Id")).Value); + } + } + + /// + /// The average audio bitrate in bits per second, as calculated from the media file. Takes into consideration only the elementary stream payload and does not include the packaging overhead. + /// + public int Bitrate { + get { + return XmlConvert.ToInt32(_xml.Attribute(XName.Get("Bitrate")).Value); + } + } + + /// + /// The audio sampling rate in samples/sec or Hz + /// + public int SamplingRate { + get { + return XmlConvert.ToInt32(_xml.Attribute(XName.Get("SamplingRate")).Value); + } + } + + /// + /// The bits per sample for the audio track. + /// + public int BitsPerSample { + get { + return XmlConvert.ToInt32(_xml.Attribute(XName.Get("BitsPerSample")).Value); + } + } + + /// + /// The number of audio channels in the audio track. + /// + public int Channels { + get { + return XmlConvert.ToInt32(_xml.Attribute(XName.Get("Channels")).Value); + } + } + + /// + /// The audio codec used for encoding the audio track. + /// + public string Codec { + get { + return _xml.Attribute(XName.Get("Codec")).Value; + } + } + + /// + /// The optional encoder version string, required for EAC3. + /// + public string EncoderVersion { + get { + var encoderVersionAttribute = _xml.Attribute(XName.Get("EncoderVersion")); + if (encoderVersionAttribute != null) + return encoderVersionAttribute.Value; + return null; + } + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/EncoderMetadata/Metadata.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/EncoderMetadata/Metadata.cs new file mode 100644 index 000000000..03d489ce3 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/EncoderMetadata/Metadata.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Xml; +using System.Xml.Linq; +using System.Xml.XPath; +using Orchard.FileSystems.Media; +using Orchard.Azure.MediaServices.Helpers; + +namespace Orchard.Azure.MediaServices.Models.Assets.EncoderMetadata { + public class Metadata { + + public static Metadata Parse(string encoderMetadataXml, string privateLocatorUrl, string publicLocatorUrl, IMimeTypeProvider mimeTypeProvider) { + var xml = XDocument.Parse(encoderMetadataXml); + return new Metadata(xml, privateLocatorUrl, publicLocatorUrl, mimeTypeProvider); + } + + private readonly XmlNamespaceManager _nsm; + private readonly XDocument _xml; + private readonly string _privateLocatorUrl; + private readonly string _publicLocatorUrl; + private readonly IMimeTypeProvider _mimeTypeProvider; + private IEnumerable _assetFiles; + + public Metadata(XDocument xml, string privateLocatorUrl, string publicLocatorUrl, IMimeTypeProvider mimeTypeProvider) { + _nsm = NamespaceHelper.CreateNamespaceManager(xml); + _xml = xml; + _privateLocatorUrl = privateLocatorUrl; + _publicLocatorUrl = publicLocatorUrl; + _mimeTypeProvider = mimeTypeProvider; + } + + /// + /// A collection of media files contained in this asset. + /// + public IEnumerable AssetFiles { + get { + if (_assetFiles == null) { + var assetFilesQuery = + from e in _xml.Root.XPathSelectElements("./me:AssetFile", _nsm) + select new AssetFile(e, this, _mimeTypeProvider); + _assetFiles = assetFilesQuery.ToArray(); + } + return _assetFiles; + } + } + + public string PrivateLocatorUrl { + get { + return _privateLocatorUrl; + } + } + + public string PublicLocatorUrl { + get { + return _publicLocatorUrl; + } + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/EncoderMetadata/VideoTrack.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/EncoderMetadata/VideoTrack.cs new file mode 100644 index 000000000..7ab0907dd --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/EncoderMetadata/VideoTrack.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Xml; +using System.Xml.Linq; + +namespace Orchard.Azure.MediaServices.Models.Assets.EncoderMetadata { + public class VideoTrack { + + private readonly XElement _xml; + + public VideoTrack(XElement xml) { + _xml = xml; + } + + /// + /// The zero-based index of this video track. Note: this is not necessarily the TrackID as used in an MP4 file. + /// + public int Index { + get { + return XmlConvert.ToInt32(_xml.Attribute(XName.Get("Id")).Value); + } + } + + /// + /// The average video bit rate in bits per second, as calculated from the media file. Counts only the elementary stream payload, and does not include the packaging overhead. + /// + public int Bitrate { + get { + return XmlConvert.ToInt32(_xml.Attribute(XName.Get("Bitrate")).Value); + } + } + + /// + /// The target average bitrate for this video track, as requested in the encoding preset, in bits per second. + /// + public int TargetBitrate { + get { + return XmlConvert.ToInt32(_xml.Attribute(XName.Get("TargetBitrate")).Value); + } + } + + /// + /// The measured video frame rate in frames per second (Hz). + /// + public decimal Framerate { + get { + return XmlConvert.ToDecimal(_xml.Attribute(XName.Get("Framerate")).Value); + } + } + + /// + /// The preset target video frame rate in frames per second (Hz). + /// + public decimal TargetFramerate { + get { + return XmlConvert.ToDecimal(_xml.Attribute(XName.Get("TargetFramerate")).Value); + } + } + + /// + /// The video codec FourCC code. + /// + public string FourCc { + get { + return _xml.Attribute(XName.Get("FourCC")).Value; + } + } + + /// + /// The encoded video width in pixels. + /// + public int Width { + get { + return XmlConvert.ToInt32(_xml.Attribute(XName.Get("Width")).Value); + } + } + + /// + /// The encoded video height in pixels. + /// + public int Height { + get { + return XmlConvert.ToInt32(_xml.Attribute(XName.Get("Height")).Value); + } + } + + /// + /// The numerator of the video display aspect ratio. + /// + public decimal DisplayAspectRatioX { + get { + return XmlConvert.ToDecimal(_xml.Attribute(XName.Get("DisplayAspectRatioNumerator")).Value); + } + } + + /// + /// The demoninator of the video display aspect ratio. + /// + public decimal DisplayAspectRatioY { + get { + return XmlConvert.ToDecimal(_xml.Attribute(XName.Get("DisplayAspectRatioDenominator")).Value); + } + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/MezzanineAsset.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/MezzanineAsset.cs new file mode 100644 index 000000000..a0ea1e43a --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/MezzanineAsset.cs @@ -0,0 +1,6 @@ +using System; + +namespace Orchard.Azure.MediaServices.Models.Assets { + public class MezzanineAsset : Asset { + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/PublishAction.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/PublishAction.cs new file mode 100644 index 000000000..1e89f807d --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/PublishAction.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using Orchard.ContentManagement; +using Orchard.ContentManagement.Records; +using Orchard.Core.Common.Utilities; + +namespace Orchard.Azure.MediaServices.Models.Assets { + public enum PublishAction { + None, + Publish, + PublishLater + } +} diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/SubtitleAsset.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/SubtitleAsset.cs new file mode 100644 index 000000000..39ac392cf --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/SubtitleAsset.cs @@ -0,0 +1,11 @@ +using System; + +namespace Orchard.Azure.MediaServices.Models.Assets { + public class SubtitleAsset : Asset { + + public string Language { + get { return Storage.Get("Language"); } + set { Storage.Set("Language", value); } + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/ThumbnailAsset.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/ThumbnailAsset.cs new file mode 100644 index 000000000..a27ed008e --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/ThumbnailAsset.cs @@ -0,0 +1,5 @@ +using System; +namespace Orchard.Azure.MediaServices.Models.Assets { + public class ThumbnailAsset : Asset { + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/VideoAsset.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/VideoAsset.cs new file mode 100644 index 000000000..3575a366e --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Assets/VideoAsset.cs @@ -0,0 +1,47 @@ +using System; +using System.Linq; +using Orchard.Azure.MediaServices.Models.Assets.EncoderMetadata; +namespace Orchard.Azure.MediaServices.Models.Assets { + public class VideoAsset : Asset { + private Metadata _encoderMetadata; // TODO: Should be made thread-safe. + + public string WamsEncoderMetadataXml { + get { return Storage.Get("WamsEncoderMetadataXml"); } + set { + Storage.Set("WamsEncoderMetadataXml", value); + _encoderMetadata = null; // Clear out cached metadata. + } + } + + public string EncodingPreset { + get { return Storage.Get("EncodingPreset"); } + set { Storage.Set("EncodingPreset", value); } + } + + public Metadata EncoderMetadata { + get { + if (_encoderMetadata == null) { + if (!String.IsNullOrEmpty(WamsEncoderMetadataXml)) { + _encoderMetadata = Metadata.Parse(WamsEncoderMetadataXml, WamsPrivateLocatorUrl, WamsPublicLocatorUrl, MimeTypeProvider); + } + } + return _encoderMetadata; + } + } + + protected override string GetMainFileUrl(string locatorUrl) { + // In the case of a video asset we consider the main file to be the first + // asset file containing one or more video tracks according to the encoder + // metadata. + if (!String.IsNullOrEmpty(locatorUrl) && EncoderMetadata != null) { + var firstVideoFile = EncoderMetadata.AssetFiles.FirstOrDefault(assetFile => assetFile.VideoTracks.Any()); + if (firstVideoFile != null) { + var builder = new UriBuilder(locatorUrl); + builder.Path += "/" + firstVideoFile.Name; + return builder.Uri.AbsoluteUri; + } + } + return null; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/CloudMediaSettingsPart.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/CloudMediaSettingsPart.cs new file mode 100644 index 000000000..b302c9825 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/CloudMediaSettingsPart.cs @@ -0,0 +1,102 @@ +using System.Collections.Generic; +using System.Globalization; +using Orchard.ContentManagement; +using System; +using System.Linq; + +namespace Orchard.Azure.MediaServices.Models { + + public class CloudMediaSettingsPart : ContentPart { + + public string WamsAccountName { + get { return this.Retrieve(x => x.WamsAccountName); } + set { this.Store(x => x.WamsAccountName, value); } + } + + public string WamsAccountKey { + get { return this.Retrieve(x => x.WamsAccountKey); } + set { this.Store(x => x.WamsAccountKey, value); } + } + + public string StorageAccountKey { + get { return this.Retrieve(x => x.StorageAccountKey); } + set { this.Store(x => x.StorageAccountKey, value); } + } + + public bool EnableDynamicPackaging { + get { return this.Retrieve(x => x.EnableDynamicPackaging); } + set { this.Store(x => x.EnableDynamicPackaging, value); } + } + + public TimeSpan AccessPolicyDuration { + get { + var duration = Retrieve("AccessPolicyDuration"); + return !String.IsNullOrEmpty(duration) ? TimeSpan.Parse(duration, CultureInfo.InvariantCulture) : TimeSpan.FromDays(365 * 5); + } + set { + Store("AccessPolicyDuration", value.ToString()); + } + } + + public IEnumerable AllowedVideoFilenameExtensions { + get { + var languages = Retrieve("AllowedVideoFilenameExtensions"); + return !String.IsNullOrEmpty(languages) ? languages.Split(';') : new string[] { }; + } + set { + var languages = value != null && value.Any() ? String.Join(";", value) : null; + Store("AllowedVideoFilenameExtensions", languages); + } + } + + public IEnumerable WamsEncodingPresets { + get { + var presets = Retrieve("WamsEncodingPresets"); + return !String.IsNullOrEmpty(presets) ? presets.Split(';') : new string[] { }; + } + set { + var presets = value != null && value.Any() ? String.Join(";", value) : null; + Store("WamsEncodingPresets", presets); + } + } + + public int DefaultWamsEncodingPresetIndex { + get { return this.Retrieve(x => x.DefaultWamsEncodingPresetIndex, 11); } + set { this.Store(x => x.DefaultWamsEncodingPresetIndex, value); } + } + + public string EncryptionKeySeedValue { + get { return this.Retrieve(x => x.EncryptionKeySeedValue); } + set { this.Store(x => x.EncryptionKeySeedValue, value); } + } + + public string EncryptionLicenseAcquisitionUrl { + get { return this.Retrieve(x => x.EncryptionLicenseAcquisitionUrl); } + set { this.Store(x => x.EncryptionLicenseAcquisitionUrl, value); } + } + + public IEnumerable SubtitleLanguages { + get { + var languages = Retrieve("SubtitleLanguages"); + return !String.IsNullOrEmpty(languages) ? languages.Split(';') : new string[] { }; + } + set { + var languages = value != null && value.Any() ? String.Join(";", value) : null; + Store("SubtitleLanguages", languages); + } + } + + public bool IsValid() { + if (String.IsNullOrWhiteSpace(WamsAccountKey) || String.IsNullOrWhiteSpace(WamsAccountName)) + return false; + if (!AllowedVideoFilenameExtensions.Any()) + return false; + if (!WamsEncodingPresets.Any()) + return false; + if (DefaultWamsEncodingPresetIndex < 0 || DefaultWamsEncodingPresetIndex > WamsEncodingPresets.Count() - 1) + return false; + + return true; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/CloudVideoPart.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/CloudVideoPart.cs new file mode 100644 index 000000000..413ca610e --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/CloudVideoPart.cs @@ -0,0 +1,35 @@ +using System.Collections.Generic; +using System.Linq; +using Orchard.Azure.MediaServices.Models.Assets; +using Orchard.Azure.MediaServices.Models.Jobs; +using Orchard.Azure.MediaServices.Services.Assets; +using Orchard.Azure.MediaServices.Services.Jobs; +using Orchard.ContentManagement; + +namespace Orchard.Azure.MediaServices.Models { + public class CloudVideoPart : ContentPart { + public IAssetManager _assetManager; + internal IJobManager _jobManager; + + public IEnumerable Assets { + get { return _assetManager.LoadAssetsFor(this); } + } + + public MezzanineAsset MezzanineAsset { + get { return (MezzanineAsset)Assets.FirstOrDefault(x => x is MezzanineAsset); } + } + + public IEnumerable Jobs { + get { return _jobManager.GetJobsFor(this); } + } + + public bool PublishOnUpload { + get { return this.Retrieve(x => x.PublishOnUpload); } + set { this.Store(x => x.PublishOnUpload, value); } + } + + public ThumbnailAsset ThumbnailAsset { + get { return _assetManager.GetThumbnailAssetFor(this); } + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Jobs/FinishedJobContext.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Jobs/FinishedJobContext.cs new file mode 100644 index 000000000..58253f654 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Jobs/FinishedJobContext.cs @@ -0,0 +1,10 @@ +using Orchard.Azure.MediaServices.Models.Records; +using Microsoft.WindowsAzure.MediaServices.Client; + +namespace Orchard.Azure.MediaServices.Models.Jobs { + public class FinishedJobContext { + public CloudVideoPart CloudVideoPart { get; set; } + public JobRecord JobRecord { get; set; } + public IJob Job { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Jobs/Job.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Jobs/Job.cs new file mode 100644 index 000000000..6489fd2bb --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Jobs/Job.cs @@ -0,0 +1,109 @@ +using System; +using System.Linq; +using System.Collections.Generic; +using Orchard.Azure.MediaServices.Helpers; +using Orchard.Azure.MediaServices.Models.Records; +using Orchard.Core.Common.Utilities; + +namespace Orchard.Azure.MediaServices.Models.Jobs { + public class Job { + internal readonly LazyField> _tasksField = new LazyField>(); + internal readonly LazyField _cloudVideoPartField = new LazyField(); + + public Job(JobRecord record) { + Record = record; + } + + public JobRecord Record { get; private set; } + + public IEnumerable Tasks { + get { return _tasksField.Value; } + } + + public CloudVideoPart CloudVideoPart { + get { return _cloudVideoPartField.Value; } + } + + public string WamsJobId { + get { return Record.WamsJobId; } + set { Record.WamsJobId = value; } + } + + public string Name { + get { return Record.Name; } + set { Record.Name = value; } + } + + public string Description { + get { return Record.Description; } + set { Record.Description = value; } + } + + public JobStatus Status { + get { return Record.Status; } + set { Record.Status = value; } + } + + public DateTime? CreatedUtc { + get { return Record.CreatedUtc; } + set { Record.CreatedUtc = value; } + } + + public DateTime? StartedUtc { + get { return Record.StartedUtc; } + set { Record.StartedUtc = value; } + } + + public DateTime? FinishedUtc { + get { return Record.FinishedUtc; } + set { Record.FinishedUtc = value; } + } + + public string ErrorMessage { + get { return Record.ErrorMessage; } + set { Record.ErrorMessage = value; } + } + + public string OutputAssetName { + get { return Record.OutputAssetName; } + set { Record.OutputAssetName = value; } + } + + public string OutputAssetDescription { + get { return Record.OutputAssetDescription; } + set { Record.OutputAssetDescription = value; } + } + + public int PercentComplete { + get { + if (Tasks != null && Tasks.Any()) + return (int)Tasks.Select(task => task.PercentComplete).Average(); + return 0; + } + } + + public bool IsActive { + get { + return Status.IsAny(JobStatus.Pending, JobStatus.Queued, JobStatus.Scheduled, JobStatus.Processing, JobStatus.Canceling); + } + } + + public bool IsOpen { + get { + return Status.IsNotAny(JobStatus.Archived); + } + } + + public bool CanArchive { + get { + return Status.IsAny(JobStatus.Canceled, JobStatus.Faulted, JobStatus.Finished); + } + } + + public bool CanCancel { + get { + return Status.IsAny(JobStatus.Pending, JobStatus.Queued, JobStatus.Scheduled, JobStatus.Processing); + } + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Jobs/JobStatus.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Jobs/JobStatus.cs new file mode 100644 index 000000000..b92d62e07 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Jobs/JobStatus.cs @@ -0,0 +1,13 @@ +namespace Orchard.Azure.MediaServices.Models.Jobs { + public enum JobStatus { + Pending, + Processing, + Finished, + Canceling, + Canceled, + Queued, + Scheduled, + Faulted, + Archived + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Jobs/Task.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Jobs/Task.cs new file mode 100644 index 000000000..6a0f9020b --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Jobs/Task.cs @@ -0,0 +1,60 @@ +using System.Xml.Linq; +using Orchard.Azure.MediaServices.Models.Records; +using Orchard.Core.Common.Utilities; + +namespace Orchard.Azure.MediaServices.Models.Jobs { + public class Task { + internal readonly LazyField _jobField = new LazyField(); + + public Task() { + Record = new TaskRecord(); + } + + public TaskRecord Record { get; set; } + + public Job Job { + get { return _jobField.Value; } + set { _jobField.Value = value; } + } + + public string WamsTaskId { + get { return Record.WamsTaskId; } + set { Record.WamsTaskId = value; } + } + + public string TaskProviderName { + get { return Record.TaskProviderName; } + set { Record.TaskProviderName = value; } + } + + public int Index { + get { return Record.TaskIndex; } + set { Record.TaskIndex = value; } + } + + public JobStatus Status { + get { return Record.Status; } + set { Record.Status = value; } + } + + public int PercentComplete { + get { return Record.PercentComplete; } + set { Record.PercentComplete = value; } + } + + public XElement Settings { + get { return Record.SettingsXml != null ? XElement.Parse(Record.SettingsXml) : new XElement("Settings"); } + set { Record.SettingsXml = value != null ? value.ToString() : null; } + } + + public string HarvestAssetType { + get { return Record.HarvestAssetType; } + set { Record.HarvestAssetType = value; } + } + + public string HarvestAssetName { + get { return Record.HarvestAssetName; } + set { Record.HarvestAssetName = value; } + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Records/AssetRecord.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Records/AssetRecord.cs new file mode 100644 index 000000000..957a7ce0a --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Records/AssetRecord.cs @@ -0,0 +1,46 @@ +using System; +using Orchard.Azure.MediaServices.Models.Assets; +using Orchard.ContentManagement.FieldStorage.InfosetStorage; +using Orchard.Data.Conventions; + +namespace Orchard.Azure.MediaServices.Models.Records { + public class AssetRecord { + + public AssetRecord() { + Infoset = new Infoset(); + } + + public virtual int Id { get; set; } + public virtual int VideoContentItemId { get; set; } + public virtual string Type { get; set; } + public virtual string Name { get; set; } + public virtual string Description { get; set; } + public virtual string WamsPublicLocatorId { get; set; } + public virtual string WamsPublicLocatorUrl { get; set; } + public virtual string WamsPrivateLocatorId { get; set; } + public virtual string WamsPrivateLocatorUrl { get; set; } + public virtual string WamsAssetId { get; set; } + public virtual string WamsEncoderMetadataXml { get; set; } + public virtual string OriginalFileName { get; set; } + public virtual string LocalTempFileName { get; set; } + public virtual long? LocalTempFileSize { get; set; } + public virtual bool IncludeInPlayer { get; set; } + public virtual string MediaQuery { get; set; } + public virtual DateTime CreatedUtc { get; set; } + public virtual AssetUploadStatus UploadStatus { get; set; } + public virtual DateTime? UploadStartedUtc { get; set; } + public virtual DateTime? UploadCompletedUtc { get; set; } + public virtual long? UploadBytesComplete { get; set; } + public virtual AssetPublishStatus PublishStatus { get; set; } + public virtual DateTime? PublishedUtc { get; set; } + public virtual DateTime? RemovedUtc { get; set; } + + [StringLengthMax] + public virtual string Data { + get { return Infoset.Data; } + set { Infoset.Data = value; } + } + + public virtual Infoset Infoset { get; protected set; } + } +} diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Records/JobRecord.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Records/JobRecord.cs new file mode 100644 index 000000000..cfaf8b071 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Records/JobRecord.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using Orchard.Azure.MediaServices.Models.Jobs; +using Orchard.Data.Conventions; + +namespace Orchard.Azure.MediaServices.Models.Records { + public class JobRecord { + + public JobRecord() { + Tasks = new List(); + } + public virtual int Id { get; set; } + public virtual int CloudVideoPartId { get; set; } + public virtual string WamsJobId { get; set; } + public virtual string Name { get; set; } + public virtual string Description { get; set; } + public virtual JobStatus Status { get; set; } + public virtual DateTime? CreatedUtc { get; set; } + public virtual DateTime? StartedUtc { get; set; } + public virtual DateTime? FinishedUtc { get; set; } + public virtual string ErrorMessage { get; set; } + public virtual string OutputAssetName { get; set; } + public virtual string OutputAssetDescription { get; set; } + + [CascadeAllDeleteOrphan] + public virtual IList Tasks { get; set; } + } +} diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Records/TaskRecord.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Records/TaskRecord.cs new file mode 100644 index 000000000..dfd77355b --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Models/Records/TaskRecord.cs @@ -0,0 +1,20 @@ +using Orchard.Azure.MediaServices.Models.Jobs; +using Orchard.Data.Conventions; + +namespace Orchard.Azure.MediaServices.Models.Records { + public class TaskRecord { + public virtual int Id { get; set; } + public virtual JobRecord Job { get; set; } + public virtual string WamsTaskId { get; set; } + public virtual string TaskProviderName { get; set; } + public virtual int TaskIndex { get; set; } + public virtual JobStatus Status { get; set; } + public virtual int PercentComplete { get; set; } + + [StringLengthMax] + public virtual string SettingsXml { get; set; } + + public virtual string HarvestAssetType { get; set; } + public virtual string HarvestAssetName { get; set; } + } +} diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Module.txt b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Module.txt new file mode 100644 index 000000000..53430db9c --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Module.txt @@ -0,0 +1,13 @@ +Name: Windows Azure Media Services +AntiForgery: enabled +Author: Microsoft Open Technologies, Inc +Website: http://www.microsoft.com +Version: 1.0 +OrchardVersion: 1.7.2 +Description: Provides integration of Windows Azure Media Services functionality into Orchard. +Features: + Orchard.Azure.MediaServices: + Name: Windows Azure Media Services + Description: Provides integration of Windows Azure Media Services functionality into Orchard. + Category: Hosting + Dependencies: Orchard.MediaLibrary, Orchard.PublishLater, Orchard.TaskLease \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Navigation/AdminMenu.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Navigation/AdminMenu.cs new file mode 100644 index 000000000..d91884ffc --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Navigation/AdminMenu.cs @@ -0,0 +1,24 @@ +using Orchard.Localization; +using Orchard.Security; +using Orchard.UI.Navigation; + +namespace Orchard.Azure.MediaServices.Navigation { + public class AdminMenu : INavigationProvider { + public Localizer T { get; set; } + public string MenuName { get { return "admin"; } } + + public void GetNavigation(NavigationBuilder builder) { + builder + .Add(T("Media"), "6", menu => menu + .Add(T("Windows Azure Media Jobs"), "10.0", item => item.Action("Index", "Job", new { area = "Orchard.Azure.MediaServices" }) + .Permission(Permissions.ManageCloudMediaJobs))); + + builder + .Add(T("Settings"), menu => menu + .Add(T("Windows Azure Media"), "10.0", item => item.Action("Index", "Settings", new { area = "Orchard.Azure.MediaServices" }) + .Permission(StandardPermissions.SiteOwner) + .Permission(Permissions.ManageCloudMediaSettings) + )); + } + } +} diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Navigation/MediaMenu.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Navigation/MediaMenu.cs new file mode 100644 index 000000000..5d79dbe58 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Navigation/MediaMenu.cs @@ -0,0 +1,13 @@ +using Orchard; +using Orchard.UI.Navigation; + +namespace Orchard.Azure.MediaServices.Navigation { + public class MediaMenu : Component, INavigationProvider { + public string MenuName { get { return "mediaproviders"; } } + + public void GetNavigation(NavigationBuilder builder) { + builder.AddImageSet("cloudmedia").Add(T("Windows Azure Media"), "5", + menu => menu.Action("Import", "Media", new { area = "Orchard.Azure.MediaServices" }).Permission(Permissions.ManageCloudMediaContent)); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Orchard.Azure.MediaServices.csproj b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Orchard.Azure.MediaServices.csproj new file mode 100644 index 000000000..fe5ceb21f --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Orchard.Azure.MediaServices.csproj @@ -0,0 +1,614 @@ + + + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {14A96B1A-9DC9-44C8-A675-206329E15263} + {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + Orchard.Azure.MediaServices + Orchard.Azure.MediaServices + v4.5 + false + + + 4.0 + + + false + + + + + + + true + full + false + bin\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + false + + + pdbonly + true + bin\ + TRACE + prompt + 4 + AllRules.ruleset + false + + + + False + ..\..\..\..\lib\nhibernate\FluentNHibernate.dll + + + ..\..\..\..\lib\htmlagilitypack\HtmlAgilityPack.dll + + + + False + ..\..\..\..\lib\windowsazure\Microsoft.Data.Edm.dll + + + False + ..\..\..\..\lib\windowsazure\Microsoft.Data.OData.dll + + + False + ..\..\..\..\lib\windowsazure\Microsoft.Data.Services.Client.dll + + + False + Lib\Microsoft.Practices.TransientFaultHandling.Core.dll + + + False + ..\..\..\..\lib\windowsazure\Microsoft.WindowsAzure.Configuration.dll + + + False + ..\..\..\..\lib\windowsazure\Microsoft.WindowsAzure.Diagnostics.dll + + + False + Lib\Microsoft.WindowsAzure.MediaServices.Client.dll + + + False + ..\..\..\..\lib\windowsazure\Microsoft.WindowsAzure.Storage.dll + + + False + ..\..\..\..\lib\newtonsoft.json\Newtonsoft.Json.dll + True + + + False + ..\..\..\..\lib\nhibernate\NHibernate.dll + + + + + 3.5 + + + + False + ..\..\..\..\lib\windowsazure\System.Spatial.dll + + + + + + + False + ..\..\..\..\lib\aspnetmvc\System.Web.Helpers.dll + + + False + ..\..\..\..\lib\aspnetmvc\System.Web.Mvc.dll + + + + + False + ..\..\..\..\lib\aspnetmvc\System.Web.Razor.dll + + + + False + ..\..\..\..\lib\aspnetmvc\System.Web.WebPages.dll + + + False + ..\..\..\..\lib\aspnetmvc\System.Web.WebPages.Deployment.dll + + + False + ..\..\..\..\lib\aspnetmvc\System.Web.WebPages.Razor.dll + + + + + + + + + + + + + + + + + + + + + + + Designer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + cloudmedia-admin-asset.less + + + cloudmedia-admin-asset.css + + + + + cloudmedia-admin-job.less + + + cloudmedia-admin-job.less + + + cloudmedia-admin-selecttask.less + + + cloudmedia-admin-selecttask.less + + + cloudmedia-admin-settings.less + + + cloudmedia-admin-settings.less + + + cloudmedia-edit-assets.less + + + cloudmedia-edit-assets.css + + + cloudmedia-edit-cloudvideopart.less + + + cloudmedia-edit-cloudvideopart.css + + + cloudmedia-edit-jobs.less + + + cloudmedia-edit-jobs.less + + + cloudmedia-progress.less + + + cloudmedia-progress.less + + + cloudmedia-tabs.less + + + cloudmedia-tabs.css + + + cloudmedia-videoplayer.less + + + cloudmedia-videoplayer.css + + + + + + + + + menu.cloudmedia-mediaproviders.less + + + + + menu.cloudmedia-mediaproviders.css + + + + + + + + + + + + + + + + + + + + {2D1D92BB-4555-4CBE-8D0E-63563D6CE4C6} + Orchard.Framework + + + {9916839C-39FC-4CEB-A5AF-89CA7E87119F} + Orchard.Core + + + {73a7688a-5bd3-4f7e-adfa-ce36c5a10e3b} + Orchard.MediaLibrary + + + {c889167c-e52c-4a65-a419-224b3d1b957d} + Orchard.PublishLater + + + {3f72a4e9-7b72-4260-b010-c16ec54f9baf} + Orchard.TaskLease + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + ES5 + true + True + + + ES5 + false + false + + + + + + + + $(ProjectDir)\..\Manifests + + + + + + + + + + + + False + True + 45979 + / + + + False + True + http://orchard.codeplex.com + False + + + + + \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Permissions.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Permissions.cs new file mode 100644 index 000000000..347d18fc9 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Permissions.cs @@ -0,0 +1,42 @@ +using System.Collections.Generic; +using System.Linq; +using Orchard.Environment.Extensions.Models; +using Orchard.Security.Permissions; + +namespace Orchard.Azure.MediaServices { + public class Permissions : IPermissionProvider { + public static readonly Permission ManageCloudMediaContent = new Permission { Description = "Managing Windows Azure Media", Name = "ManageCloudMediaContent" }; + public static readonly Permission ManageCloudMediaJobs = new Permission { Description = "Managing Windows Azure Media Jobs", Name = "ManageCloudMediaJobs" }; + public static readonly Permission ManageCloudMediaSettings = new Permission { Description = "Managing Windows Azure Media Settings", Name = "ManageCloudMediaSettings" }; + + public virtual Feature Feature { get; set; } + + public IEnumerable GetPermissions() { + yield return ManageCloudMediaContent; + yield return ManageCloudMediaJobs; + yield return ManageCloudMediaSettings; + } + + public IEnumerable GetDefaultStereotypes() { + yield return new PermissionStereotype { + Name = "Administrator", + Permissions = GetPermissions().ToArray() + }; + yield return new PermissionStereotype { + Name = "Editor", + Permissions = new[] {ManageCloudMediaContent} + }; + yield return new PermissionStereotype { + Name = "Moderator", + }; + yield return new PermissionStereotype { + Name = "Author", + Permissions = new[] {ManageCloudMediaContent} + }; + yield return new PermissionStereotype { + Name = "Contributor", + }; + } + + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Placement.info b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Placement.info new file mode 100644 index 000000000..19217cce3 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Placement.info @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Properties/AssemblyInfo.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..dc234db85 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Properties/AssemblyInfo.cs @@ -0,0 +1,37 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Security; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Orchard.Azure.MediaServices")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyProduct("Orchard")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: InternalsVisibleTo("Orchard.Azure.MediaServices.Tests")] // Not working. :( Someone please fix. + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("1ea07ae9-58f9-4be6-a5a1-33d52b722cb1")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Readme.txt b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Readme.txt new file mode 100644 index 000000000..81766119e --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Readme.txt @@ -0,0 +1,105 @@ +INSTALLING THE MODULE +********************* + +The module has been continuously built and tested against the latest version of Orchard in the 1.x branch of the official Orchard Codeplex repository. + +The module can be installed into an Orchard site in a few different ways: + +Use the full Orchard source code committed in the module's TFS repository +------------------------------------------------------------------------------ + +1. Clone the repository to the local developer machine. +2. Use Visual Studio to either run the site locally or publish Orchard through any of the standard publishing mechanisms. + +For convenience, a recipe named "Orchard.Azure.MediaServices" has been added to Orchard.Setup in this repository that makes it quicker to get a site up and running where the module is already enabled and configured for use. + +Add it to another copy of the Orchard source code for a "develop + publish" workflow +------------------------------------------------------------------------------------ + +1. Copy the whole module project folder into the Orchard.Web/Modules folder of the Orchard source code. +2. Add the Orchard.Azure.MediaServices and Orchard.Azure.MediaServices.Tests projects to the Orchard.sln solution. +3. Add a project reference from Orchard.Azure.Web to Orchard.Azure.MediaServices to ensure the module is included when publishing to a Windows Azure Cloud Service. +4. Make the necessary modifications to the Web.config files in Orchard.Web and Orchard.Azure.Web (see below for details). + +"XCopy" deploy it into an already published Orchard site +-------------------------------------------------------- + +When dynamic compilation is enabled: +1. If the deployed Orchard site is configured to use dynamic compilation, upload the module's folder without the bin and obj folders to the /Modules folder. + +When dynamic compilation is disabled: +1. If the deployed Orchard site is not configured to use dynamic compilation, upload the module's folder, including the bin folder, to the /Modules folder. To prevent unnecessary duplicate DLLs from being uploaded as part of the module's bin folder, skip this step and instead follow the steps described in the next section. + +When dynamic compilation is disabled and you don't want to upload duplicate DLLs: +1. To prevent unnecessary duplicate DLLs from being uploaded as part of the module's bin folder, build the solution using the ClickToBuild.cmd file that can be found in the root directory of the project. +2. When ClickToBuild.cmd is done, a number of new folders will have been created. Go to "\build\Stage\Modules", and upload the Orchard.Azure.MediaServices folder to the Modules folder of the installation on the hosting server. + + +CONFIGURING ORCHARD FOR THE MODULE +********************************** + +1. Add assembly binding redirects to Orchard +-------------------------------------------- + +The module includes Windows Azure Media Services SDK for .NET version 3.0.0.0 which is distributed via Nuget. This client SDK library in turn depends on specific versions of a number of other libraries, also distributed via Nuget. Orchard ships with newer versions of some of these assemblies, and in the Orchard process there can only be one version of any given assembly at a time. + +Therefore, for the module to work, a few assembly binding redirects need to be added to the main Orchard Web.config file. These redirects cause the Windows Azure Media Services SDK for .NET client library to bind to the newer versions of these dependencies, which are present in the Bin folder of the web application. Without these redirects, the assembly binding will fail and the module will not work. + +Specifically, the following redirects must be added to the the Web.config file in the Orchard.Web and Orchard.Azure.web projects: + + + + + + + + + + + + + + + + + + + + + + +2. Increase the maximum request content length for Orchard +---------------------------------------------------------- + +When uploading large media files using the module, the files are first uploaded to Orchard where they are kept in local file system storage temporarily, before being ingested into WAMS by a server-side background process. By default, Orchard is configured in its Web.config to allow file uploads of up to 64 MB. + +If the module will be used to ingest media files larger than 64 MB these values need to be increased, or the first upload step (from the user's/editor's local machine to Orchard temporary storage) will fail. + +Specifically, the following attributes need to be reconfigured with a value appropriate for the size of media files with which the module is intended to be used: + - system.web/httpRuntime/@maxRequestLength + - system.webServer/security/requestFiltering/requestLimits/@maxAllowedContentLength + +Both of these attributes must be configured with the same value, or whichever value is smaller will effectively impose a limit on the allowed media file upload size. + +3. Configuring the logging level for the module +----------------------------------------------- + +The module logs messages of different severity levels and verbosity through the standard Orchard logging pipeline. + +To ensure the most verbose logging output from the module, while limiting the verbosity level of other logging sources, a element can be added to the file Config/Log4net.config in the Orchard.Web and/or Orchard.Azure.Web projects: + + + + + + + + + +CONFIGURING THE MODULE +********************** + +1. Configuring the WAMS account credentials +------------------------------------------- + +After the module is installed and the feature "Windows Azure Media Services" is enabled, the WAMS account credentials must be configured in the "Windows Azure Media" settings section in the Orchard administration dashboard. \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/Web.config b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/Web.config new file mode 100644 index 000000000..cbd2cd8a2 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/Web.config @@ -0,0 +1,16 @@ + + + + + + + + + + + diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-common.js b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-common.js new file mode 100644 index 000000000..126148af3 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-common.js @@ -0,0 +1,25 @@ +/// +var Orchard; +(function (Orchard) { + (function (Azure) { + (function (MediaServices) { + (function (Admin) { + (function (Common) { + $(function () { + $("form").on("click", "button[data-prompt], a[data-prompt]", function (e) { + var prompt = $(this).data("prompt"); + + if (!confirm(prompt)) + e.preventDefault(); + }); + }); + })(Admin.Common || (Admin.Common = {})); + var Common = Admin.Common; + })(MediaServices.Admin || (MediaServices.Admin = {})); + var Admin = MediaServices.Admin; + })(Azure.MediaServices || (Azure.MediaServices = {})); + var MediaServices = Azure.MediaServices; + })(Orchard.Azure || (Orchard.Azure = {})); + var Azure = Orchard.Azure; +})(Orchard || (Orchard = {})); +//# sourceMappingURL=cloudmedia-admin-common.js.map diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-common.js.map b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-common.js.map new file mode 100644 index 000000000..a27606c2e --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-common.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cloudmedia-admin-common.js","sourceRoot":"","sources":["cloudmedia-admin-common.ts"],"names":["Orchard","Orchard.Azure","Orchard.Azure.MediaServices","Orchard.Azure.MediaServices.Admin","Orchard.Azure.MediaServices.Admin.Common"],"mappings":"AAAA,4CAA4C;AAE5C,IAAO,OAAO;AASb,CATD,UAAO,OAAO;KAAdA,UAAeA,KAAKA;SAApBC,UAAqBA,aAAaA;aAAlCC,UAAmCA,KAAKA;iBAAxCC,UAAyCA,MAAMA;oBAC3CC,CAACA,CAACA;wBACEA,CAACA,CAACA,MAAMA,CAACA,CAACA,EAAEA,CAACA,OAAOA,EAAEA,qCAAqCA,EAAEA,UAASA,CAACA;4BACnEA,IAAIA,MAAMA,GAAGA,CAACA,CAACA,IAAIA,CAACA,CAACA,IAAIA,CAACA,QAAQA,CAACA;;4BAEnCA,IAAIA,CAACA,OAAOA,CAACA,MAAMA,CAACA;gCAChBA,CAACA,CAACA,cAAcA,CAACA,CAACA,CAACA;wBAC3BA,CAACA,CAACA;oBACNA,CAACA,CAACA;gBACNA,CAACA,uCAAAD;0CAAAA;YAADA,CAACA,qDAAAD;4CAAAA;QAADA,CAACA,qDAAAD;gDAAAA;IAADA,CAACA,yCAAAD;8BAAAA;AAADA,CAACA,6BAAA"} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-common.ts b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-common.ts new file mode 100644 index 000000000..ae8776cd1 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-common.ts @@ -0,0 +1,12 @@ +/// + +module Orchard.Azure.MediaServices.Admin.Common { + $(() => { + $("form").on("click", "button[data-prompt], a[data-prompt]", function(e) { + var prompt = $(this).data("prompt"); + + if (!confirm(prompt)) + e.preventDefault(); + }); + }); +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-job.js b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-job.js new file mode 100644 index 000000000..6f72d8d64 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-job.js @@ -0,0 +1,2 @@ +/// +//# sourceMappingURL=cloudmedia-admin-job.js.map diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-job.js.map b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-job.js.map new file mode 100644 index 000000000..733bb6cc8 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-job.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cloudmedia-admin-job.js","sourceRoot":"","sources":["cloudmedia-admin-job.ts"],"names":[],"mappings":"AAAA,4CAA4C"} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-job.ts b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-job.ts new file mode 100644 index 000000000..ec6247a60 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-job.ts @@ -0,0 +1 @@ +/// diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-settings.js b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-settings.js new file mode 100644 index 000000000..057ae4770 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-settings.js @@ -0,0 +1,82 @@ +/// +/// + +var Orchard; +(function (Orchard) { + (function (Azure) { + (function (MediaServices) { + (function (Admin) { + (function (Settings) { + var StringItem = (function () { + function StringItem(value) { + this.value = ko.observable(value); + } + return StringItem; + })(); + Settings.StringItem = StringItem; + + Settings.clientViewModel = { + wamsEncodingPresets: ko.observableArray(), + defaultWamsEncodingPresetIndex: ko.observable(), + subtitleLanguages: ko.observableArray() + }; + + function deleteWamsEncodingPreset(preset) { + var removedIndex = Settings.clientViewModel.wamsEncodingPresets.indexOf(preset); + Settings.clientViewModel.wamsEncodingPresets.remove(preset); + if (removedIndex === Settings.clientViewModel.defaultWamsEncodingPresetIndex()) + Settings.clientViewModel.defaultWamsEncodingPresetIndex(0); + else if (removedIndex < Settings.clientViewModel.defaultWamsEncodingPresetIndex()) + Settings.clientViewModel.defaultWamsEncodingPresetIndex(Settings.clientViewModel.defaultWamsEncodingPresetIndex() - 1); + } + Settings.deleteWamsEncodingPreset = deleteWamsEncodingPreset; + + function addNewWamsEncodingPreset() { + Settings.clientViewModel.wamsEncodingPresets.push(new StringItem("Unnamed")); + $("#presets-table tbody:first-of-type tr:last-of-type td:nth-child(2) input").focus().select(); + } + Settings.addNewWamsEncodingPreset = addNewWamsEncodingPreset; + + function deleteSubtitleLanguage(languageCultureCode) { + Settings.clientViewModel.subtitleLanguages.remove(languageCultureCode); + } + Settings.deleteSubtitleLanguage = deleteSubtitleLanguage; + + function addNewSubtitleLanguage() { + Settings.clientViewModel.subtitleLanguages.push(new StringItem("Unnamed")); + $("#languages-table tbody:first-of-type tr:last-of-type td:nth-child(1) input").focus().select(); + } + Settings.addNewSubtitleLanguage = addNewSubtitleLanguage; + + $(function () { + $.each(initWamsEncodingPresets, function (presetIndex, presetName) { + Settings.clientViewModel.wamsEncodingPresets.push(new StringItem(presetName)); + }); + + Settings.clientViewModel.defaultWamsEncodingPresetIndex(initDefaultWamsEncodingPresetIndex); + + $.each(initSubtitleLanguages, function (languageIndex, languageCultureCode) { + Settings.clientViewModel.subtitleLanguages.push(new StringItem(languageCultureCode)); + }); + + ko.applyBindings(Settings.clientViewModel); + + var localStorage = window["localStorage"]; + $("#tabs").tabs({ + activate: function () { + if (localStorage && localStorage.setItem) + localStorage.setItem("selectedCloudMediaSettingsTab", $("#tabs").tabs("option", "active")); + }, + active: localStorage && localStorage.getItem ? localStorage.getItem("selectedCloudMediaSettingsTab") : null + }).show(); + }); + })(Admin.Settings || (Admin.Settings = {})); + var Settings = Admin.Settings; + })(MediaServices.Admin || (MediaServices.Admin = {})); + var Admin = MediaServices.Admin; + })(Azure.MediaServices || (Azure.MediaServices = {})); + var MediaServices = Azure.MediaServices; + })(Orchard.Azure || (Orchard.Azure = {})); + var Azure = Orchard.Azure; +})(Orchard || (Orchard = {})); +//# sourceMappingURL=cloudmedia-admin-settings.js.map diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-settings.js.map b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-settings.js.map new file mode 100644 index 000000000..b425dfe3b --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-settings.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cloudmedia-admin-settings.js","sourceRoot":"","sources":["cloudmedia-admin-settings.ts"],"names":["Orchard","Orchard.Azure","Orchard.Azure.MediaServices","Orchard.Azure.MediaServices.Admin","Orchard.Azure.MediaServices.Admin.Settings","Orchard.Azure.MediaServices.Admin.Settings.StringItem","Orchard.Azure.MediaServices.Admin.Settings.StringItem.constructor","Orchard.Azure.MediaServices.Admin.Settings.deleteWamsEncodingPreset","Orchard.Azure.MediaServices.Admin.Settings.addNewWamsEncodingPreset","Orchard.Azure.MediaServices.Admin.Settings.deleteSubtitleLanguage","Orchard.Azure.MediaServices.Admin.Settings.addNewSubtitleLanguage"],"mappings":"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"} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-settings.ts b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-settings.ts new file mode 100644 index 000000000..bc55ae69c --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-settings.ts @@ -0,0 +1,85 @@ +/// +/// + +declare var initWamsEncodingPresets: string[]; +declare var initDefaultWamsEncodingPresetIndex: number; +declare var initSubtitleLanguages: string[]; + +module Orchard.Azure.MediaServices.Admin.Settings +{ + export class StringItem + { + constructor(value: string) + { + this.value = ko.observable(value); + } + + public value: KnockoutObservable; + } + + export interface IClientViewModel + { + wamsEncodingPresets: KnockoutObservableArray; + defaultWamsEncodingPresetIndex: KnockoutObservable; + subtitleLanguages: KnockoutObservableArray; + } + + export var clientViewModel: IClientViewModel = { + wamsEncodingPresets: ko.observableArray(), + defaultWamsEncodingPresetIndex: ko.observable(), + subtitleLanguages: ko.observableArray() + }; + + export function deleteWamsEncodingPreset(preset: StringItem) + { + var removedIndex = clientViewModel.wamsEncodingPresets.indexOf(preset); + clientViewModel.wamsEncodingPresets.remove(preset); + if (removedIndex === clientViewModel.defaultWamsEncodingPresetIndex()) + clientViewModel.defaultWamsEncodingPresetIndex(0); + else if (removedIndex < clientViewModel.defaultWamsEncodingPresetIndex()) + clientViewModel.defaultWamsEncodingPresetIndex(clientViewModel.defaultWamsEncodingPresetIndex() - 1); + } + + export function addNewWamsEncodingPreset() + { + clientViewModel.wamsEncodingPresets.push(new StringItem("Unnamed")); + $("#presets-table tbody:first-of-type tr:last-of-type td:nth-child(2) input").focus().select(); + } + + export function deleteSubtitleLanguage(languageCultureCode: StringItem) + { + clientViewModel.subtitleLanguages.remove(languageCultureCode); + } + + export function addNewSubtitleLanguage() + { + clientViewModel.subtitleLanguages.push(new StringItem("Unnamed")); + $("#languages-table tbody:first-of-type tr:last-of-type td:nth-child(1) input").focus().select(); + } + + $(function () + { + $.each(initWamsEncodingPresets, function (presetIndex: number, presetName: string) + { + clientViewModel.wamsEncodingPresets.push(new StringItem(presetName)); + }); + + clientViewModel.defaultWamsEncodingPresetIndex(initDefaultWamsEncodingPresetIndex); + + $.each(initSubtitleLanguages, function (languageIndex: number, languageCultureCode: string) + { + clientViewModel.subtitleLanguages.push(new StringItem(languageCultureCode)); + }); + + ko.applyBindings(clientViewModel); + + var localStorage = window["localStorage"]; + $("#tabs").tabs({ + activate: function () { + if (localStorage && localStorage.setItem) + localStorage.setItem("selectedCloudMediaSettingsTab", $("#tabs").tabs("option", "active")); + }, + active: localStorage && localStorage.getItem ? localStorage.getItem("selectedCloudMediaSettingsTab") : null + }).show(); + }); +} diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-autorefresh.js b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-autorefresh.js new file mode 100644 index 000000000..13b21841a --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-autorefresh.js @@ -0,0 +1,34 @@ +/// +var Orchard; +(function (Orchard) { + (function (Azure) { + (function (MediaServices) { + (function (AutoRefresh) { + // Periodically refresh elements. + $(function () { + $("[data-refresh-url]").each(function () { + var self = $(this); + var update = function () { + var container = self; + var url = container.data("refresh-url"); + + $.ajax({ + url: url, + cache: false + }).then(function (html) { + container.html(html); + setTimeout(update, 5000); + }); + }; + + setTimeout(update, 5000); + }); + }); + })(MediaServices.AutoRefresh || (MediaServices.AutoRefresh = {})); + var AutoRefresh = MediaServices.AutoRefresh; + })(Azure.MediaServices || (Azure.MediaServices = {})); + var MediaServices = Azure.MediaServices; + })(Orchard.Azure || (Orchard.Azure = {})); + var Azure = Orchard.Azure; +})(Orchard || (Orchard = {})); +//# sourceMappingURL=cloudmedia-autorefresh.js.map diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-autorefresh.js.map b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-autorefresh.js.map new file mode 100644 index 000000000..1cdf34cc8 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-autorefresh.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cloudmedia-autorefresh.js","sourceRoot":"","sources":["cloudmedia-autorefresh.ts"],"names":["Orchard","Orchard.Azure","Orchard.Azure.MediaServices","Orchard.Azure.MediaServices.AutoRefresh"],"mappings":"AAAA,4CAA4C;AAE5C,IAAO,OAAO;AAqBb,CArBD,UAAO,OAAO;KAAdA,UAAeA,KAAKA;SAApBC,UAAqBA,aAAaA;aAAlCC,UAAmCA,WAAWA;gBAC1CC,iCAAiCA;gBACjCA,CAACA,CAACA;oBACEA,CAACA,CAACA,oBAAoBA,CAACA,CAACA,IAAIA,CAACA;wBACzBA,IAAIA,IAAIA,GAAGA,CAACA,CAACA,IAAIA,CAACA;wBAClBA,IAAIA,MAAMA,GAAGA;4BACTA,IAAIA,SAASA,GAAGA,IAAIA;4BACpBA,IAAIA,GAAGA,GAAGA,SAASA,CAACA,IAAIA,CAACA,aAAaA,CAACA;;4BAEvCA,CAACA,CAACA,IAAIA,CAACA;gCACHA,GAAGA,EAAEA,GAAGA;gCACRA,KAAKA,EAAEA,KAAKA;6BACfA,CAACA,CAACA,IAAIA,CAACA,UAAAA,IAAIA;gCACRA,SAASA,CAACA,IAAIA,CAACA,IAAIA,CAACA;gCACpBA,UAAUA,CAACA,MAAMA,EAAEA,IAAIA,CAACA;4BAC5BA,CAACA,CAACA;wBACNA,CAACA;;wBAEDA,UAAUA,CAACA,MAAMA,EAAEA,IAAIA,CAACA;oBAC5BA,CAACA,CAACA;gBACNA,CAACA,CAACA;YACNA,CAACA,iEAAAD;wDAAAA;QAADA,CAACA,qDAAAD;gDAAAA;IAADA,CAACA,yCAAAD;8BAAAA;AAADA,CAACA,6BAAA"} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-autorefresh.ts b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-autorefresh.ts new file mode 100644 index 000000000..5e25b2019 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-autorefresh.ts @@ -0,0 +1,24 @@ +/// + +module Orchard.Azure.MediaServices.AutoRefresh { + // Periodically refresh elements. + $(() => { + $("[data-refresh-url]").each(function () { + var self = $(this); + var update = () => { + var container = self; + var url = container.data("refresh-url"); + + $.ajax({ + url: url, + cache: false + }).then(html => { + container.html(html); + setTimeout(update, 5000); + }); + }; + + setTimeout(update, 5000); + }); + }); +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset-video.js b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset-video.js new file mode 100644 index 000000000..0fbdd38e3 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset-video.js @@ -0,0 +1,45 @@ +/// +/// +var Orchard; +(function (Orchard) { + (function (Azure) { + (function (MediaServices) { + (function (AssetEdit) { + (function (Video) { + $(function () { + var treeView = $("#asset-files-treeview"); + + treeView.jstree({ + "core": { + "animation": 0, + "check_callback": true, + "themes": { "stripes": true } + }, + "plugins": ["state", "wholerow"] + }); + + $(".expand-all").on("click", function (e) { + treeView.jstree('open_all'); + }); + + $(".collapse-all").on("click", function (e) { + treeView.jstree('close_all'); + }); + // TODO: Make links work (Private/Public URLS). + //treeView.on("select_node.jstree", function (e, data) { + // var url = data.node.a_attr.href; + // if (url != "#") { + // window.location.href = url; + // } + //}); + }); + })(AssetEdit.Video || (AssetEdit.Video = {})); + var Video = AssetEdit.Video; + })(MediaServices.AssetEdit || (MediaServices.AssetEdit = {})); + var AssetEdit = MediaServices.AssetEdit; + })(Azure.MediaServices || (Azure.MediaServices = {})); + var MediaServices = Azure.MediaServices; + })(Orchard.Azure || (Orchard.Azure = {})); + var Azure = Orchard.Azure; +})(Orchard || (Orchard = {})); +//# sourceMappingURL=cloudmedia-edit-asset-video.js.map diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset-video.js.map b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset-video.js.map new file mode 100644 index 000000000..f2bc91f86 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset-video.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cloudmedia-edit-asset-video.js","sourceRoot":"","sources":["cloudmedia-edit-asset-video.ts"],"names":["Orchard","Orchard.Azure","Orchard.Azure.MediaServices","Orchard.Azure.MediaServices.AssetEdit","Orchard.Azure.MediaServices.AssetEdit.Video"],"mappings":"AAAA,4CAA4C;AAC5C,8CAA8C;AAE9C,IAAO,OAAO;AA6Bb,CA7BD,UAAO,OAAO;KAAdA,UAAeA,KAAKA;SAApBC,UAAqBA,aAAaA;aAAlCC,UAAmCA,SAASA;iBAA5CC,UAA6CA,KAAKA;oBAC9CC,CAACA,CAACA;wBACEA,IAAIA,QAAQA,GAAQA,CAACA,CAACA,uBAAuBA,CAACA;;wBAE9CA,QAAQA,CAACA,MAAMA,CAACA;4BACZA,MAAMA,EAAEA;gCACJA,WAAWA,EAAEA,CAACA;gCACdA,gBAAgBA,EAAEA,IAAIA;gCACtBA,QAAQA,EAAEA,EAAEA,SAASA,EAAEA,IAAIA,EAAEA;6BAChCA;4BACDA,SAASA,EAAEA,CAACA,OAAOA,EAAEA,UAAUA,CAACA;yBACnCA,CAACA;;wBAEFA,CAACA,CAACA,aAAaA,CAACA,CAACA,EAAEA,CAACA,OAAOA,EAAEA,UAASA,CAACA;4BACnCA,QAAQA,CAACA,MAAMA,CAACA,UAAUA,CAACA;wBAC/BA,CAACA,CAACA;;wBAEFA,CAACA,CAACA,eAAeA,CAACA,CAACA,EAAEA,CAACA,OAAOA,EAAEA,UAAUA,CAACA;4BACtCA,QAAQA,CAACA,MAAMA,CAACA,WAAWA,CAACA;wBAChCA,CAACA,CAACA;wBAEFA,+CAA+CA;wBAC/CA,wDAAwDA;wBACxDA,sCAAsCA;wBACtCA,uBAAuBA;wBACvBA,qCAAqCA;wBACrCA,OAAOA;wBACPA,KAAKA;oBACTA,CAACA,CAACA;gBACNA,CAACA,6CAAAD;4CAAAA;YAADA,CAACA,6DAAAD;oDAAAA;QAADA,CAACA,qDAAAD;gDAAAA;IAADA,CAACA,yCAAAD;8BAAAA;AAADA,CAACA,6BAAA"} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset-video.ts b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset-video.ts new file mode 100644 index 000000000..aec1253e3 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset-video.ts @@ -0,0 +1,33 @@ +/// +/// + +module Orchard.Azure.MediaServices.AssetEdit.Video { + $(function () { + var treeView: any = $("#asset-files-treeview"); + + treeView.jstree({ + "core": { + "animation": 0, + "check_callback": true, + "themes": { "stripes": true }, + }, + "plugins": ["state", "wholerow"] + }); + + $(".expand-all").on("click", function(e) { + treeView.jstree('open_all'); + }); + + $(".collapse-all").on("click", function (e) { + treeView.jstree('close_all'); + }); + + // TODO: Make links work (Private/Public URLS). + //treeView.on("select_node.jstree", function (e, data) { + // var url = data.node.a_attr.href; + // if (url != "#") { + // window.location.href = url; + // } + //}); + }); +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset.js b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset.js new file mode 100644 index 000000000..df5048d7c --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset.js @@ -0,0 +1,25 @@ +/// +/// +var Orchard; +(function (Orchard) { + (function (Azure) { + (function (MediaServices) { + (function (AssetEdit) { + $(function () { + var localStorage = window["localStorage"]; + $("#tabs").tabs({ + activate: function () { + if (localStorage && localStorage.setItem) + localStorage.setItem("selectedAssetTab", $("#tabs").tabs("option", "active")); + }, + active: localStorage && localStorage.getItem ? localStorage.getItem("selectedAssetTab") : null + }).show(); + }); + })(MediaServices.AssetEdit || (MediaServices.AssetEdit = {})); + var AssetEdit = MediaServices.AssetEdit; + })(Azure.MediaServices || (Azure.MediaServices = {})); + var MediaServices = Azure.MediaServices; + })(Orchard.Azure || (Orchard.Azure = {})); + var Azure = Orchard.Azure; +})(Orchard || (Orchard = {})); +//# sourceMappingURL=cloudmedia-edit-asset.js.map diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset.js.map b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset.js.map new file mode 100644 index 000000000..0536d6e5d --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cloudmedia-edit-asset.js","sourceRoot":"","sources":["cloudmedia-edit-asset.ts"],"names":["Orchard","Orchard.Azure","Orchard.Azure.MediaServices","Orchard.Azure.MediaServices.AssetEdit"],"mappings":"AAAA,4CAA4C;AAC5C,8CAA8C;AAE9C,IAAO,OAAO;AAWb,CAXD,UAAO,OAAO;KAAdA,UAAeA,KAAKA;SAApBC,UAAqBA,aAAaA;aAAlCC,UAAmCA,SAASA;gBACxCC,CAACA,CAACA;oBACEA,IAAIA,YAAYA,GAAGA,MAAMA,CAACA,cAAcA,CAACA;oBACzCA,CAACA,CAACA,OAAOA,CAACA,CAACA,IAAIA,CAACA;wBACZA,QAAQA,EAAEA;4BACNA,IAAIA,YAAYA,IAAIA,YAAYA,CAACA,OAAOA;gCACpCA,YAAYA,CAACA,OAAOA,CAACA,kBAAkBA,EAAEA,CAACA,CAACA,OAAOA,CAACA,CAACA,IAAIA,CAACA,QAAQA,EAAEA,QAAQA,CAACA,CAACA,CAACA;wBACtFA,CAACA;wBACDA,MAAMA,EAAEA,YAAYA,IAAIA,YAAYA,CAACA,OAAOA,GAAGA,YAAYA,CAACA,OAAOA,CAACA,kBAAkBA,CAACA,GAAGA,IAAIA;qBACjGA,CAACA,CAACA,IAAIA,CAACA,CAACA;gBACbA,CAACA,CAACA;YACNA,CAACA,6DAAAD;oDAAAA;QAADA,CAACA,qDAAAD;gDAAAA;IAADA,CAACA,yCAAAD;8BAAAA;AAADA,CAACA,6BAAA"} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset.ts b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset.ts new file mode 100644 index 000000000..db145db6d --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset.ts @@ -0,0 +1,15 @@ +/// +/// + +module Orchard.Azure.MediaServices.AssetEdit { + $(function() { + var localStorage = window["localStorage"]; + $("#tabs").tabs({ + activate: function () { + if (localStorage && localStorage.setItem) + localStorage.setItem("selectedAssetTab", $("#tabs").tabs("option", "active")); + }, + active: localStorage && localStorage.getItem ? localStorage.getItem("selectedAssetTab") : null + }).show(); + }); +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-direct.js b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-direct.js new file mode 100644 index 000000000..7be6a66d1 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-direct.js @@ -0,0 +1,313 @@ +/// +/// +/// +var Orchard; +(function (Orchard) { + (function (Azure) { + (function (MediaServices) { + (function (CloudVideoEdit) { + var requiredUploads; + + function uploadCompleted(sender, e, data) { + var scope = $(sender).closest(".async-upload"); + var status = data.errorThrown && data.errorThrown.length > 0 ? data.errorThrown : data.textStatus; + scope.find(".progress-bar").hide(); + scope.find(".progress-text").hide(); + scope.find(".progress-details").hide(); + scope.find(".status.preparing").hide(); + scope.find(".status.uploading").hide(); + + switch (status) { + case "error": + cleanup(scope, data); + alert("The upload of the selected file failed. You may try again after the cleanup has finished."); + return; + case "abort": + cleanup(scope, data); + return; + } + + var originalFileName = data.files[0].name; + var statusUploaded = scope.find(".status.uploaded").show(); + + statusUploaded.text(statusUploaded.data("text-template").replace("{filename}", originalFileName)); + scope.data("upload-isactive", false); + scope.data("upload-iscompleted", true); + scope.data("upload-start-time", null); + } + + function cleanup(scope, data) { + var wamsAssetInput = scope.find("input[name$='.WamsAssetId']"); + var fileNameInput = scope.find("input[name$='.FileName']"); + var assetId = $.trim(wamsAssetInput.val()); + var wrapper = data.fileInput.closest(".file-upload-wrapper"); + + if (assetId.length > 0) { + var url = scope.data("delete-asset-url"); + var antiForgeryToken = scope.closest("form").find("[name='__RequestVerificationToken']").val(); + var cleanupMessage = scope.find(".status.cleanup"); + + wamsAssetInput.val(""); + fileNameInput.val(""); + + cleanupMessage.show(); + + $.ajax({ + url: url, + type: "DELETE", + data: { + id: assetId, + __RequestVerificationToken: antiForgeryToken + } + }).done(function () { + scope.data("upload-isactive", false); + scope.data("upload-start-time", null); + scope.find(".file-upload-wrapper").show(); + cleanupMessage.hide(); + }).fail(function () { + alert("An error occurred on the server while trying to clean up."); + }); + } + + wrapper.show(); + } + + function pad(value, length) { + var str = value.toString(); + while (str.length < length) { + str = "0" + str; + } + return str; + } + + function createBlockId(blockIndex) { + var blockIdPrefix = "block-"; + return btoa(blockIdPrefix + pad(blockIndex, 6)); + } + + function commitBlockList(scope, data) { + var deferred = $.Deferred(); + var blockIds = scope.data("block-ids"); + + if (blockIds.length == 0) { + // The file was uploaded as a whole, so no manifest to submit. + deferred.resolve(); + } else { + // The file was uploaded in chunks. + var url = scope.data("sas-locator") + "&comp=blocklist"; + var requestData = ''; + for (var i = 0; i < blockIds.length; i++) { + requestData += '' + blockIds[i] + ''; + } + requestData += ''; + + $.ajax({ + url: url, + type: "PUT", + data: requestData, + contentType: "text/plain; charset=UTF-8", + crossDomain: true, + cache: false, + beforeSend: function (xhr) { + xhr.setRequestHeader('x-ms-date', new Date().toUTCString()); + xhr.setRequestHeader('x-ms-blob-content-type', data.files[0].type); + xhr.setRequestHeader('x-ms-version', "2012-02-12"); + xhr.setRequestHeader('Content-Length', requestData.length.toString()); + }, + success: function () { + deferred.resolve(data); + }, + error: function (xhr, status, error) { + data.textStatus = status; + data.errorThrown = error; + deferred.fail(data); + } + }); + } + + return deferred.promise(); + } + + function hasActiveUploads() { + var scope = $(".upload-direct"); + var flag = false; + + scope.find(".async-upload").each(function () { + if ($(this).data("upload-isactive") == true) { + flag = true; + return false; + } + }); + + return flag; + } + + function hasCompletedUploads() { + var scope = $(".upload-direct"); + var flag = false; + + scope.find(".async-upload").each(function () { + if ($(this).data("upload-iscompleted") == true) { + flag = true; + return false; + } + }); + + return flag; + } + + var isSubmitting = function () { + var scope = $(".upload-direct"); + return scope.data("is-submitting") == true; + }; + + function initializeUpload(fileInput) { + var scope = fileInput.closest(".async-upload"); + var acceptFileTypes = scope.data("upload-accept-file-types"); + var antiForgeryToken = scope.closest("form").find("[name='__RequestVerificationToken']").val(); + var preparingText = scope.find(".status.preparing"); + var uploadingContainer = scope.find(".status.uploading"); + var progressText = scope.find(".progress-text"); + var progressDetails = scope.find(".progress-details"); + var cancelLink = scope.find(".cancel-link"); + + fileInput.fileupload({ + autoUpload: false, + acceptFileTypes: new RegExp(acceptFileTypes, "i"), + type: "PUT", + maxChunkSize: 4 * 1024 * 1024, + beforeSend: function (xhr, data) { + xhr.setRequestHeader("x-ms-date", new Date().toUTCString()); + xhr.setRequestHeader("x-ms-blob-type", "BlockBlob"); + xhr.setRequestHeader("content-length", data.data.size.toString()); + }, + chunksend: function (e, data) { + var blockIndex = scope.data("block-index"); + var blockIds = scope.data("block-ids"); + var blockId = createBlockId(blockIndex); + var url = scope.data("sas-locator") + "&comp=block&blockid=" + blockId; + + data.url = url; + blockIds.push(blockId); + scope.data("block-index", blockIndex + 1); + }, + progressall: function (e, data) { + var percentComplete = Math.floor((data.loaded / data.total) * 100); + var startTime = new Date(scope.data("upload-start-time")); + var elapsedMilliseconds = new Date(Date.now()).getTime() - startTime.getTime(); + var elapsed = moment.duration(elapsedMilliseconds, "ms"); + var remaining = moment.duration(elapsedMilliseconds / Math.max(data.loaded, 1) * (data.total - data.loaded), "ms"); + var kbps = Math.floor(data.bitrate / 8 / 1000); + var uploaded = Math.floor(data.loaded / 1000); + var total = Math.floor(data.total / 1000); + + scope.find(".progress-bar").show().find('.progress').css('width', percentComplete + '%'); + progressText.text(progressText.data("text-template").replace("{percentage}", percentComplete)).show(); + progressDetails.text(progressDetails.data("text-template").replace("{uploaded}", uploaded).replace("{total}", total).replace("{kbps}", kbps).replace("{elapsed}", elapsed.humanize()).replace("{remaining}", remaining.humanize())).show(); + }, + done: function (e, data) { + var self = this; + commitBlockList(scope, data).always(function () { + uploadCompleted(self, e, data); + }); + }, + fail: function (e, data) { + uploadCompleted(this, e, data); + }, + processdone: function (e, data) { + scope.find(".validation-text").hide(); + + var filename = data.files[0].name; + scope.data("upload-isactive", true); + scope.data("upload-start-time", Date.now()); + var generateAssetUrl = scope.data("generate-asset-url"); + preparingText.show(); + scope.find(".file-upload-wrapper").hide(); + scope.data("block-index", 0); + scope.data("block-ids", new Array()); + + $.ajax({ + url: generateAssetUrl, + data: { + filename: filename, + __RequestVerificationToken: antiForgeryToken + }, + type: "POST" + }).done(function (asset) { + data.url = asset.sasLocator; + data.multipart = false; + + scope.data("sas-locator", asset.sasLocator); + scope.find("input[name$='.FileName']").val(filename); + scope.find("input[name$='.WamsAssetId']").val(asset.assetId); + + preparingText.hide(); + progressText.text(progressText.data("text-template").replace("{percentage}", 0)).show(); + uploadingContainer.show(); + + var xhr = data.submit(); + scope.data("xhr", xhr); + }).fail(function (xhr, status, error) { + preparingText.hide(); + uploadingContainer.hide(); + scope.data("upload-isactive", false); + scope.data("upload-start-time", null); + scope.find(".file-upload-wrapper").show(); + alert("An error occurred. Error: " + error); + }); + }, + processfail: function (e, data) { + scope.find(".validation-text").show(); + }, + change: function (e, data) { + var prompt = fileInput.data("prompt"); + if (prompt && prompt.length > 0) { + if (!confirm(prompt)) { + e.preventDefault(); + } + } + } + }); + + cancelLink.on("click", function (e) { + e.preventDefault(); + + if (confirm($(this).data("prompt"))) { + var xhr = scope.data("xhr"); + xhr.abort(); + } + }); + } + + function initializeUploadDirect() { + var scope = $(".upload-direct").show(); + requiredUploads = scope.find(".required-upload"); + + scope.find(".async-upload-input").each(function () { + initializeUpload($(this)); + }); + + scope.closest("form").on("submit", function (e) { + if (hasActiveUploads()) { + alert(scope.data("block-submit-prompt")); + e.preventDefault(); + return false; + } + + scope.data("is-submitting", true); + }); + + window.onbeforeunload = function (e) { + if ((hasActiveUploads() || hasCompletedUploads()) && !isSubmitting()) + e.returnValue = scope.data("navigate-away-prompt"); + }; + } + CloudVideoEdit.initializeUploadDirect = initializeUploadDirect; + })(MediaServices.CloudVideoEdit || (MediaServices.CloudVideoEdit = {})); + var CloudVideoEdit = MediaServices.CloudVideoEdit; + })(Azure.MediaServices || (Azure.MediaServices = {})); + var MediaServices = Azure.MediaServices; + })(Orchard.Azure || (Orchard.Azure = {})); + var Azure = Orchard.Azure; +})(Orchard || (Orchard = {})); +//# sourceMappingURL=cloudmedia-edit-cloudvideopart-direct.js.map diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-direct.js.map b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-direct.js.map new file mode 100644 index 000000000..9b43c3267 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-direct.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cloudmedia-edit-cloudvideopart-direct.js","sourceRoot":"","sources":["cloudmedia-edit-cloudvideopart-direct.ts"],"names":["Orchard","Orchard.Azure","Orchard.Azure.MediaServices","Orchard.Azure.MediaServices.CloudVideoEdit","Orchard.Azure.MediaServices.CloudVideoEdit.uploadCompleted","Orchard.Azure.MediaServices.CloudVideoEdit.cleanup","Orchard.Azure.MediaServices.CloudVideoEdit.pad","Orchard.Azure.MediaServices.CloudVideoEdit.createBlockId","Orchard.Azure.MediaServices.CloudVideoEdit.commitBlockList","Orchard.Azure.MediaServices.CloudVideoEdit.hasActiveUploads","Orchard.Azure.MediaServices.CloudVideoEdit.hasCompletedUploads","Orchard.Azure.MediaServices.CloudVideoEdit.initializeUpload","Orchard.Azure.MediaServices.CloudVideoEdit.initializeUploadDirect"],"mappings":"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"} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-direct.ts b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-direct.ts new file mode 100644 index 000000000..5f2666358 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-direct.ts @@ -0,0 +1,302 @@ +/// +/// +/// + +module Orchard.Azure.MediaServices.CloudVideoEdit { + var requiredUploads: JQuery; + + function uploadCompleted(sender, e, data) { + var scope = $(sender).closest(".async-upload"); + var status = data.errorThrown && data.errorThrown.length > 0 ? data.errorThrown : data.textStatus; + scope.find(".progress-bar").hide(); + scope.find(".progress-text").hide(); + scope.find(".progress-details").hide(); + scope.find(".status.preparing").hide(); + scope.find(".status.uploading").hide(); + + switch (status) { + case "error": + cleanup(scope, data); + alert("The upload of the selected file failed. You may try again after the cleanup has finished."); + return; + case "abort": + cleanup(scope, data); + return; + } + + var originalFileName = data.files[0].name; + var statusUploaded = scope.find(".status.uploaded").show(); + + statusUploaded.text(statusUploaded.data("text-template").replace("{filename}", originalFileName)); + scope.data("upload-isactive", false); + scope.data("upload-iscompleted", true); + scope.data("upload-start-time", null); + } + + function cleanup(scope: JQuery, data) { + var wamsAssetInput = scope.find("input[name$='.WamsAssetId']"); + var fileNameInput = scope.find("input[name$='.FileName']"); + var assetId = $.trim(wamsAssetInput.val()); + var wrapper = data.fileInput.closest(".file-upload-wrapper"); + + if (assetId.length > 0) { + var url = scope.data("delete-asset-url"); + var antiForgeryToken = scope.closest("form").find("[name='__RequestVerificationToken']").val(); + var cleanupMessage = scope.find(".status.cleanup"); + + wamsAssetInput.val(""); + fileNameInput.val(""); + + cleanupMessage.show(); + + $.ajax({ + url: url, + type: "DELETE", + data: { + id: assetId, + __RequestVerificationToken: antiForgeryToken + } + }).done(function () { + scope.data("upload-isactive", false); + scope.data("upload-start-time", null); + scope.find(".file-upload-wrapper").show(); + cleanupMessage.hide(); + }).fail(function () { + alert("An error occurred on the server while trying to clean up."); + }); + } + + wrapper.show(); + } + + function pad(value: number, length: number) { + var str = value.toString(); + while (str.length < length) { + str = "0" + str; + } + return str; + } + + function createBlockId(blockIndex: number) { + var blockIdPrefix = "block-"; + return btoa(blockIdPrefix + pad(blockIndex, 6)); + } + + function commitBlockList(scope: JQuery, data) { + var deferred = $.Deferred(); + var blockIds = scope.data("block-ids"); + + if (blockIds.length == 0) { + // The file was uploaded as a whole, so no manifest to submit. + deferred.resolve(); + } else { + // The file was uploaded in chunks. + var url = scope.data("sas-locator") + "&comp=blocklist"; + var requestData = ''; + for (var i = 0; i < blockIds.length; i++) { + requestData += '' + blockIds[i] + ''; + } + requestData += ''; + + $.ajax({ + url: url, + type: "PUT", + data: requestData, + contentType: "text/plain; charset=UTF-8", + crossDomain: true, + cache: false, + beforeSend: function (xhr) { + xhr.setRequestHeader('x-ms-date', new Date().toUTCString()); + xhr.setRequestHeader('x-ms-blob-content-type', data.files[0].type); + xhr.setRequestHeader('x-ms-version', "2012-02-12"); + xhr.setRequestHeader('Content-Length', requestData.length.toString()); + }, + success: function () { + deferred.resolve(data); + }, + error: function (xhr, status, error) { + data.textStatus = status; + data.errorThrown = error; + deferred.fail(data); + } + }); + } + + return deferred.promise(); + } + + function hasActiveUploads() { + var scope = $(".upload-direct"); + var flag = false; + + scope.find(".async-upload").each(function () { + if ($(this).data("upload-isactive") == true) { + flag = true; + return false; + } + }); + + return flag; + } + + function hasCompletedUploads() { + var scope = $(".upload-direct"); + var flag = false; + + scope.find(".async-upload").each(function () { + if ($(this).data("upload-iscompleted") == true) { + flag = true; + return false; + } + }); + + return flag; + } + + var isSubmitting = function () { + var scope = $(".upload-direct"); + return scope.data("is-submitting") == true; + }; + + function initializeUpload(fileInput: JQuery) { + var scope = fileInput.closest(".async-upload"); + var acceptFileTypes: string = scope.data("upload-accept-file-types"); + var antiForgeryToken: string = scope.closest("form").find("[name='__RequestVerificationToken']").val(); + var preparingText = scope.find(".status.preparing"); + var uploadingContainer = scope.find(".status.uploading"); + var progressText = scope.find(".progress-text"); + var progressDetails = scope.find(".progress-details"); + var cancelLink = scope.find(".cancel-link"); + + (fileInput).fileupload({ + autoUpload: false, + acceptFileTypes: new RegExp(acceptFileTypes, "i"), + type: "PUT", + maxChunkSize: 4 * 1024 * 1024, // 4 MB + beforeSend: (xhr: JQueryXHR, data) => { + xhr.setRequestHeader("x-ms-date", new Date().toUTCString()); + xhr.setRequestHeader("x-ms-blob-type", "BlockBlob"); + xhr.setRequestHeader("content-length", data.data.size.toString()); + }, + chunksend: function (e, data) { + var blockIndex = scope.data("block-index"); + var blockIds = scope.data("block-ids"); + var blockId = createBlockId(blockIndex); + var url = scope.data("sas-locator") + "&comp=block&blockid=" + blockId; + + data.url = url; + blockIds.push(blockId); + scope.data("block-index", blockIndex + 1); + }, + progressall: function (e, data) { + var percentComplete = Math.floor((data.loaded / data.total) * 100); + var startTime = new Date(scope.data("upload-start-time")); + var elapsedMilliseconds = new Date(Date.now()).getTime() - startTime.getTime(); + var elapsed = moment.duration(elapsedMilliseconds, "ms"); + var remaining = moment.duration(elapsedMilliseconds / Math.max(data.loaded, 1) * (data.total - data.loaded), "ms"); + var kbps = Math.floor(data.bitrate / 8 / 1000); + var uploaded = Math.floor(data.loaded / 1000); + var total = Math.floor(data.total / 1000); + + scope.find(".progress-bar").show().find('.progress').css('width', percentComplete + '%'); + progressText.text(progressText.data("text-template").replace("{percentage}", percentComplete)).show(); + progressDetails.text(progressDetails.data("text-template").replace("{uploaded}", uploaded).replace("{total}", total).replace("{kbps}", kbps).replace("{elapsed}", elapsed.humanize()).replace("{remaining}", remaining.humanize())).show(); + }, + done: function (e, data) { + var self = this; + commitBlockList(scope, data).always(function () { + uploadCompleted(self, e, data); + }); + }, + fail: function (e, data) { + uploadCompleted(this, e, data); + }, + processdone: function (e, data) { + scope.find(".validation-text").hide(); + + var filename = data.files[0].name; + scope.data("upload-isactive", true); + scope.data("upload-start-time", Date.now()); + var generateAssetUrl = scope.data("generate-asset-url"); + preparingText.show(); + scope.find(".file-upload-wrapper").hide(); + scope.data("block-index", 0); + scope.data("block-ids", new Array()); + + $.ajax({ + url: generateAssetUrl, + data: { + filename: filename, + __RequestVerificationToken: antiForgeryToken + }, + type: "POST" + }).done(function (asset) { + data.url = asset.sasLocator; + data.multipart = false; + + scope.data("sas-locator", asset.sasLocator); + scope.find("input[name$='.FileName']").val(filename); + scope.find("input[name$='.WamsAssetId']").val(asset.assetId); + + preparingText.hide(); + progressText.text(progressText.data("text-template").replace("{percentage}", 0)).show(); + uploadingContainer.show(); + + var xhr = data.submit(); + scope.data("xhr", xhr); + }).fail(function (xhr, status, error) { + preparingText.hide(); + uploadingContainer.hide(); + scope.data("upload-isactive", false); + scope.data("upload-start-time", null); + scope.find(".file-upload-wrapper").show(); + alert("An error occurred. Error: " + error); + }); + }, + processfail: function (e, data) { + scope.find(".validation-text").show(); + }, + change: function (e, data) { + var prompt = fileInput.data("prompt"); + if (prompt && prompt.length > 0) { + if (!confirm(prompt)) { + e.preventDefault(); + } + } + } + }); + + cancelLink.on("click", function (e) { + e.preventDefault(); + + if (confirm($(this).data("prompt"))) { + var xhr = scope.data("xhr"); + xhr.abort(); + } + }); + } + + export function initializeUploadDirect() { + var scope = $(".upload-direct").show(); + requiredUploads = scope.find(".required-upload"); + + scope.find(".async-upload-input").each(function () { + initializeUpload($(this)); + }); + + scope.closest("form").on("submit", function (e) { + if (hasActiveUploads()) { + alert(scope.data("block-submit-prompt")); + e.preventDefault(); + return false; + } + + scope.data("is-submitting", true); + }); + + window.onbeforeunload = function (e) { + if ((hasActiveUploads() || hasCompletedUploads()) && !isSubmitting()) + e.returnValue = scope.data("navigate-away-prompt"); + }; + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-proxied.js b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-proxied.js new file mode 100644 index 000000000..2ce973029 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-proxied.js @@ -0,0 +1,170 @@ +/// +/// +var Orchard; +(function (Orchard) { + (function (Azure) { + (function (MediaServices) { + (function (CloudVideoEdit) { + var requiredUploads; + var blocked; + var hasRequiredUploadsp; + + function getAllFilesCompleted() { + var allFilesCompleted = true; + + requiredUploads.find("input[name$='.OriginalFileName'], input.sync-upload-input").each(function () { + if ($(this).val() == "") { + allFilesCompleted = false; + return false; + } + }); + + return allFilesCompleted; + } + ; + + function unblockIfComplete() { + if (getAllFilesCompleted()) + blocked.unblock(); + } + + function uploadCompleted(sender, data) { + var scope = $(sender).closest("[data-upload-accept-file-types]"); + var status = data.errorThrown && data.errorThrown.length > 0 ? data.errorThrown : data.textStatus; + scope.find(".progress-bar").hide(); + scope.find(".progress-text").hide(); + scope.find(".cancel-upload").hide(); + scope.data("upload-isactive", false); + + switch (status) { + case "error": + alert("The upload of the selected file failed. One possible cause is that the file size exceeds the configured maxRequestLength setting (see: http://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.maxrequestlength(v=vs.110).aspx). Also make sure the executionTimeOut is set to allow for enough time for the request to execute when debug=\"false\"."); + return; + case "abort": + return; + } + + var temporaryFileName = data.result.temporaryFileName; + var originalFileName = data.result.originalFileName; + var fileSize = data.result.fileSize; + + scope.find("input[name$='.OriginalFileName']").val(originalFileName); + scope.find("input[name$='.TemporaryFileName']").val(temporaryFileName); + scope.find("input[name$='.FileSize']").val(fileSize); + + unblockIfComplete(); + $(sender).replaceWith("Successfully uploaded video file '" + originalFileName + "'."); + } + + function initializeUpload(fileInput) { + var scope = $(fileInput).closest("[data-upload-accept-file-types]"); + var acceptFileTypes = scope.data("upload-accept-file-types"); + var antiForgeryToken = requiredUploads.closest("form").find("[name='__RequestVerificationToken']").val(); + var cancelUpload = scope.find(".cancel-upload"); + + fileInput.fileupload({ + autoUpload: false, + acceptFileTypes: new RegExp(acceptFileTypes, "i"), + type: "POST", + url: scope.data("upload-fallback-url"), + formData: { + __RequestVerificationToken: antiForgeryToken + }, + progressall: function (e, data) { + var percentComplete = Math.floor((data.loaded / data.total) * 100); + scope.find(".progress-bar").show().find('.progress').css('width', percentComplete + '%'); + scope.find(".progress-text").show().text("Uploading (" + percentComplete + "%)..."); + }, + done: function (e, data) { + uploadCompleted(this, data); + }, + fail: function (e, data) { + uploadCompleted(this, data); + }, + processdone: function (e, data) { + scope.find(".validation-text").hide(); + scope.data("upload-isactive", true); + cancelUpload.show(); + var xhr = data.submit(); + scope.data("xhr", xhr); + }, + processfail: function (e, data) { + scope.find(".validation-text").show(); + } + }); + + cancelUpload.on("click", function (e) { + e.preventDefault(); + + if (confirm("Are you sure you want to cancel this upload?")) { + var xhr = scope.data("xhr"); + xhr.abort(); + } + }); + } + + function initializeUploadProxied() { + var scopeProxied = $(".upload-proxied").show(); + requiredUploads = scopeProxied.find(".required-uploads-group"); + blocked = scopeProxied.find(".edit-item-sidebar"); + hasRequiredUploadsp = requiredUploads.length > 0; + + if (hasRequiredUploadsp) { + blocked.block({ + message: requiredUploads.data("block-description"), + overlayCSS: { + backgroundColor: "#fff", + cursor: "default" + }, + css: { + cursor: "default", + border: null, + width: null, + left: 0, + margin: "30px 0 0 0", + backgroundColor: null + } + }); + + scopeProxied.find(".async-upload-input").each(function () { + initializeUpload($(this)); + }); + + window.onbeforeunload = function (e) { + var hasActiveUploads = false; + + scopeProxied.find("[data-upload-accept-file-types]").each(function () { + if ($(this).data("upload-isactive") == true) { + hasActiveUploads = true; + return false; + } + }); + + if (hasActiveUploads) + e.returnValue = "There are uploads in progress. These will be aborted if you navigate away."; + }; + + scopeProxied.find(".sync-upload-input").on("change", function (e) { + unblockIfComplete(); + }); + + unblockIfComplete(); + } + + scopeProxied.find("[data-prompt]").on("change", function (e) { + var sender = $(e.currentTarget); + + if (!confirm(sender.data("prompt"))) { + sender.val(""); + } + }); + } + CloudVideoEdit.initializeUploadProxied = initializeUploadProxied; + })(MediaServices.CloudVideoEdit || (MediaServices.CloudVideoEdit = {})); + var CloudVideoEdit = MediaServices.CloudVideoEdit; + })(Azure.MediaServices || (Azure.MediaServices = {})); + var MediaServices = Azure.MediaServices; + })(Orchard.Azure || (Orchard.Azure = {})); + var Azure = Orchard.Azure; +})(Orchard || (Orchard = {})); +//# sourceMappingURL=cloudmedia-edit-cloudvideopart-proxied.js.map diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-proxied.js.map b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-proxied.js.map new file mode 100644 index 000000000..cfe704a29 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-proxied.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cloudmedia-edit-cloudvideopart-proxied.js","sourceRoot":"","sources":["cloudmedia-edit-cloudvideopart-proxied.ts"],"names":["Orchard","Orchard.Azure","Orchard.Azure.MediaServices","Orchard.Azure.MediaServices.CloudVideoEdit","Orchard.Azure.MediaServices.CloudVideoEdit.getAllFilesCompleted","Orchard.Azure.MediaServices.CloudVideoEdit.unblockIfComplete","Orchard.Azure.MediaServices.CloudVideoEdit.uploadCompleted","Orchard.Azure.MediaServices.CloudVideoEdit.initializeUpload","Orchard.Azure.MediaServices.CloudVideoEdit.initializeUploadProxied"],"mappings":"AAAA,4CAA4C;AAC5C,8CAA8C;AAE9C,IAAO,OAAO;AA2Jb,CA3JD,UAAO,OAAO;KAAdA,UAAeA,KAAKA;SAApBC,UAAqBA,aAAaA;aAAlCC,UAAmCA,cAAcA;gBAE7CC,IAAIA,eAAeA;gBACnBA,IAAIA,OAAOA;gBACXA,IAAIA,mBAAmBA;;gBAEvBA,SAASA,oBAAoBA;oBACzBC,IAAIA,iBAAiBA,GAAYA,IAAIA;;oBAErCA,eAAeA,CAACA,IAAIA,CAACA,2DAA2DA,CAACA,CAACA,IAAIA,CAACA;wBACnFA,IAAIA,CAACA,CAACA,IAAIA,CAACA,CAACA,GAAGA,CAACA,CAACA,IAAIA,EAAEA,CAAEA;4BACrBA,iBAAiBA,GAAGA,KAAKA;4BACzBA,OAAOA,KAAKA;yBACfA;oBACLA,CAACA,CAACA;;oBAEFA,OAAOA,iBAAiBA;gBAC5BA,CAACA;gBAAAD,CAACA;;gBAEFA,SAASA,iBAAiBA;oBACtBE,IAAIA,oBAAoBA,CAACA,CAACA;wBACtBA,OAAaA,CAAEA,OAAOA,CAACA,CAACA,CAACA;gBACjCA,CAACA;;gBAEDF,SAASA,eAAeA,CAACA,MAAMA,EAAEA,IAAIA;oBACjCG,IAAIA,KAAKA,GAAGA,CAACA,CAACA,MAAMA,CAACA,CAACA,OAAOA,CAACA,iCAAiCA,CAACA;oBAChEA,IAAIA,MAAMA,GAAGA,IAAIA,CAACA,WAAWA,IAAIA,IAAIA,CAACA,WAAWA,CAACA,MAAMA,GAAGA,CAACA,GAAGA,IAAIA,CAACA,WAAWA,GAAGA,IAAIA,CAACA,UAAUA;oBACjGA,KAAKA,CAACA,IAAIA,CAACA,eAAeA,CAACA,CAACA,IAAIA,CAACA,CAACA;oBAClCA,KAAKA,CAACA,IAAIA,CAACA,gBAAgBA,CAACA,CAACA,IAAIA,CAACA,CAACA;oBACnCA,KAAKA,CAACA,IAAIA,CAACA,gBAAgBA,CAACA,CAACA,IAAIA,CAACA,CAACA;oBACnCA,KAAKA,CAACA,IAAIA,CAACA,iBAAiBA,EAAEA,KAAKA,CAACA;;oBAEpCA,QAAQA,MAAMA,CAACA;wBACXA,KAAKA,OAAOA;4BACRA,KAAKA,CAACA,mXAAmXA,CAACA;4BAC1XA,MAAOA;AAAAA,wBACXA,KAAKA,OAAOA;4BACRA,MAAOA;AAAAA,qBACdA;;oBAEDA,IAAIA,iBAAiBA,GAAGA,IAAIA,CAACA,MAAMA,CAACA,iBAAiBA;oBACrDA,IAAIA,gBAAgBA,GAAGA,IAAIA,CAACA,MAAMA,CAACA,gBAAgBA;oBACnDA,IAAIA,QAAQA,GAAGA,IAAIA,CAACA,MAAMA,CAACA,QAAQA;;oBAEnCA,KAAKA,CAACA,IAAIA,CAACA,kCAAkCA,CAACA,CAACA,GAAGA,CAACA,gBAAgBA,CAACA;oBACpEA,KAAKA,CAACA,IAAIA,CAACA,mCAAmCA,CAACA,CAACA,GAAGA,CAACA,iBAAiBA,CAACA;oBACtEA,KAAKA,CAACA,IAAIA,CAACA,0BAA0BA,CAACA,CAACA,GAAGA,CAACA,QAAQA,CAACA;;oBAEpDA,iBAAiBA,CAACA,CAACA;oBACnBA,CAACA,CAACA,MAAMA,CAACA,CAACA,WAAWA,CAACA,0CAA0CA,GAAGA,gBAAgBA,GAAGA,WAAWA,CAACA;gBACtGA,CAACA;;gBAEDH,SAASA,gBAAgBA,CAACA,SAASA;oBAC/BI,IAAIA,KAAKA,GAAGA,CAACA,CAACA,SAASA,CAACA,CAACA,OAAOA,CAACA,iCAAiCA,CAACA;oBACnEA,IAAIA,eAAeA,GAAWA,KAAKA,CAACA,IAAIA,CAACA,0BAA0BA,CAACA;oBACpEA,IAAIA,gBAAgBA,GAAGA,eAAeA,CAACA,OAAOA,CAACA,MAAMA,CAACA,CAACA,IAAIA,CAACA,qCAAqCA,CAACA,CAACA,GAAGA,CAACA,CAACA;oBACxGA,IAAIA,YAAYA,GAAGA,KAAKA,CAACA,IAAIA,CAACA,gBAAgBA,CAACA;;oBAE/CA,SAASA,CAACA,UAAUA,CAACA;wBACjBA,UAAUA,EAAEA,KAAKA;wBACjBA,eAAeA,EAAEA,IAAIA,MAAMA,CAACA,eAAeA,EAAEA,GAAGA,CAACA;wBACjDA,IAAIA,EAAEA,MAAMA;wBACZA,GAAGA,EAAEA,KAAKA,CAACA,IAAIA,CAACA,qBAAqBA,CAACA;wBACtCA,QAAQA,EAAEA;4BACNA,0BAA0BA,EAAEA,gBAAgBA;yBAC/CA;wBACDA,WAAWA,EAAEA,UAACA,CAACA,EAAEA,IAAIA;4BACjBA,IAAIA,eAAeA,GAAGA,IAAIA,CAACA,KAAKA,CAACA,CAACA,IAAIA,CAACA,MAAMA,GAAGA,IAAIA,CAACA,KAAKA,CAACA,GAAGA,GAAGA,CAACA;4BAClEA,KAAKA,CAACA,IAAIA,CAACA,eAAeA,CAACA,CAACA,IAAIA,CAACA,CAACA,CAACA,IAAIA,CAACA,WAAWA,CAACA,CAACA,GAAGA,CAACA,OAAOA,EAAEA,eAAeA,GAAGA,GAAGA,CAACA;4BACxFA,KAAKA,CAACA,IAAIA,CAACA,gBAAgBA,CAACA,CAACA,IAAIA,CAACA,CAACA,CAACA,IAAIA,CAACA,aAAaA,GAAGA,eAAeA,GAAGA,OAAOA,CAACA;wBACvFA,CAACA;wBACDA,IAAIA,EAAEA,UAAUA,CAACA,EAAEA,IAAIA;4BACnBA,eAAeA,CAACA,IAAIA,EAAEA,IAAIA,CAACA;wBAC/BA,CAACA;wBACDA,IAAIA,EAAEA,UAAUA,CAACA,EAAEA,IAAIA;4BACnBA,eAAeA,CAACA,IAAIA,EAAEA,IAAIA,CAACA;wBAC/BA,CAACA;wBACDA,WAAWA,EAAEA,UAACA,CAACA,EAAEA,IAAIA;4BACjBA,KAAKA,CAACA,IAAIA,CAACA,kBAAkBA,CAACA,CAACA,IAAIA,CAACA,CAACA;4BACrCA,KAAKA,CAACA,IAAIA,CAACA,iBAAiBA,EAAEA,IAAIA,CAACA;4BACnCA,YAAYA,CAACA,IAAIA,CAACA,CAACA;4BACnBA,IAAIA,GAAGA,GAAGA,IAAIA,CAACA,MAAMA,CAACA,CAACA;4BACvBA,KAAKA,CAACA,IAAIA,CAACA,KAAKA,EAAEA,GAAGA,CAACA;wBAC1BA,CAACA;wBACDA,WAAWA,EAAEA,UAACA,CAACA,EAAEA,IAAIA;4BACjBA,KAAKA,CAACA,IAAIA,CAACA,kBAAkBA,CAACA,CAACA,IAAIA,CAACA,CAACA;wBACzCA,CAACA;qBACJA,CAACA;;oBAEFA,YAAYA,CAACA,EAAEA,CAACA,OAAOA,EAAEA,UAAAA,CAACA;wBACtBA,CAACA,CAACA,cAAcA,CAACA,CAACA;;wBAElBA,IAAIA,OAAOA,CAACA,8CAA8CA,CAACA,CAAEA;4BACzDA,IAAIA,GAAGA,GAAGA,KAAKA,CAACA,IAAIA,CAACA,KAAKA,CAACA;4BAC3BA,GAAGA,CAACA,KAAKA,CAACA,CAACA;yBACdA;oBACLA,CAACA,CAACA;gBACNA,CAACA;;gBAEDJ,SAAgBA,uBAAuBA;oBACnCK,IAAIA,YAAYA,GAAGA,CAACA,CAACA,iBAAiBA,CAACA,CAACA,IAAIA,CAACA,CAACA;oBAC9CA,eAAeA,GAAGA,YAAYA,CAACA,IAAIA,CAACA,yBAAyBA,CAACA;oBAC9DA,OAAOA,GAAGA,YAAYA,CAACA,IAAIA,CAACA,oBAAoBA,CAACA;oBACjDA,mBAAmBA,GAAGA,eAAeA,CAACA,MAAMA,GAAGA,CAACA;;oBAEhDA,IAAIA,mBAAmBA,CAAEA;wBACrBA,OAAaA,CAAEA,KAAKA,CAACA;4BACjBA,OAAOA,EAAEA,eAAeA,CAACA,IAAIA,CAACA,mBAAmBA,CAACA;4BAClDA,UAAUA,EAAEA;gCACRA,eAAeA,EAAEA,MAAMA;gCACvBA,MAAMA,EAAEA,SAASA;6BACpBA;4BACDA,GAAGA,EAAEA;gCACDA,MAAMA,EAAEA,SAASA;gCACjBA,MAAMA,EAAEA,IAAIA;gCACZA,KAAKA,EAAEA,IAAIA;gCACXA,IAAIA,EAAEA,CAACA;gCACPA,MAAMA,EAAEA,YAAYA;gCACpBA,eAAeA,EAAEA,IAAIA;6BACxBA;yBACJA,CAACA;;wBAEFA,YAAYA,CAACA,IAAIA,CAACA,qBAAqBA,CAACA,CAACA,IAAIA,CAACA;4BAC1CA,gBAAgBA,CAACA,CAACA,CAACA,IAAIA,CAACA,CAACA;wBAC7BA,CAACA,CAACA;;wBAEFA,MAAMA,CAACA,cAAcA,GAAGA,UAAAA,CAACA;4BACrBA,IAAIA,gBAAgBA,GAAGA,KAAKA;;4BAE5BA,YAAYA,CAACA,IAAIA,CAACA,iCAAiCA,CAACA,CAACA,IAAIA,CAACA;gCACtDA,IAAIA,CAACA,CAACA,IAAIA,CAACA,CAACA,IAAIA,CAACA,iBAAiBA,CAACA,IAAIA,IAAIA,CAAEA;oCACzCA,gBAAgBA,GAAGA,IAAIA;oCACvBA,OAAOA,KAAKA;iCACfA;4BACLA,CAACA,CAACA;;4BAEFA,IAAIA,gBAAgBA;gCAChBA,CAACA,CAACA,WAAWA,GAAGA,4EAA4EA,CAACA;wBACrGA,CAACA;;wBAEDA,YAAYA,CAACA,IAAIA,CAACA,oBAAoBA,CAACA,CAACA,EAAEA,CAACA,QAAQA,EAAEA,UAAAA,CAACA;4BAClDA,iBAAiBA,CAACA,CAACA;wBACvBA,CAACA,CAACA;;wBAEFA,iBAAiBA,CAACA,CAACA;qBACtBA;;oBAEDA,YAAYA,CAACA,IAAIA,CAACA,eAAeA,CAACA,CAACA,EAAEA,CAACA,QAAQA,EAAEA,UAAAA,CAACA;wBAC7CA,IAAIA,MAAMA,GAAGA,CAACA,CAACA,CAACA,CAACA,aAAaA,CAACA;;wBAE/BA,IAAIA,CAACA,OAAOA,CAACA,MAAMA,CAACA,IAAIA,CAACA,QAAQA,CAACA,CAACA,CAAEA;4BACjCA,MAAMA,CAACA,GAAGA,CAACA,EAAEA,CAACA;yBACjBA;oBACLA,CAACA,CAACA;gBACNA,CAACA;gBAvDDL,iEAuDCA;YACLA,CAACA,uEAAAD;8DAAAA;QAADA,CAACA,qDAAAD;gDAAAA;IAADA,CAACA,yCAAAD;8BAAAA;AAADA,CAACA,6BAAA"} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-proxied.ts b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-proxied.ts new file mode 100644 index 000000000..3bb0c29d9 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-proxied.ts @@ -0,0 +1,159 @@ +/// +/// + +module Orchard.Azure.MediaServices.CloudVideoEdit { + + var requiredUploads: JQuery; + var blocked: JQuery; + var hasRequiredUploadsp: boolean; + + function getAllFilesCompleted(): boolean { + var allFilesCompleted: boolean = true; + + requiredUploads.find("input[name$='.OriginalFileName'], input.sync-upload-input").each(function () { + if ($(this).val() == "") { + allFilesCompleted = false; + return false; + } + }); + + return allFilesCompleted; + }; + + function unblockIfComplete() { + if (getAllFilesCompleted()) + (blocked).unblock(); + } + + function uploadCompleted(sender, data) { + var scope = $(sender).closest("[data-upload-accept-file-types]"); + var status = data.errorThrown && data.errorThrown.length > 0 ? data.errorThrown : data.textStatus; + scope.find(".progress-bar").hide(); + scope.find(".progress-text").hide(); + scope.find(".cancel-upload").hide(); + scope.data("upload-isactive", false); + + switch (status) { + case "error": + alert("The upload of the selected file failed. One possible cause is that the file size exceeds the configured maxRequestLength setting (see: http://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.maxrequestlength(v=vs.110).aspx). Also make sure the executionTimeOut is set to allow for enough time for the request to execute when debug=\"false\"."); + return; + case "abort": + return; + } + + var temporaryFileName = data.result.temporaryFileName; + var originalFileName = data.result.originalFileName; + var fileSize = data.result.fileSize; + + scope.find("input[name$='.OriginalFileName']").val(originalFileName); + scope.find("input[name$='.TemporaryFileName']").val(temporaryFileName); + scope.find("input[name$='.FileSize']").val(fileSize); + + unblockIfComplete(); + $(sender).replaceWith("Successfully uploaded video file '" + originalFileName + "'."); + } + + function initializeUpload(fileInput) { + var scope = $(fileInput).closest("[data-upload-accept-file-types]"); + var acceptFileTypes: string = scope.data("upload-accept-file-types"); + var antiForgeryToken = requiredUploads.closest("form").find("[name='__RequestVerificationToken']").val(); + var cancelUpload = scope.find(".cancel-upload"); + + fileInput.fileupload({ + autoUpload: false, + acceptFileTypes: new RegExp(acceptFileTypes, "i"), + type: "POST", + url: scope.data("upload-fallback-url"), + formData: { + __RequestVerificationToken: antiForgeryToken + }, + progressall: (e, data) => { + var percentComplete = Math.floor((data.loaded / data.total) * 100); + scope.find(".progress-bar").show().find('.progress').css('width', percentComplete + '%'); + scope.find(".progress-text").show().text("Uploading (" + percentComplete + "%)..."); + }, + done: function (e, data) { + uploadCompleted(this, data); + }, + fail: function (e, data) { + uploadCompleted(this, data); + }, + processdone: (e, data) => { + scope.find(".validation-text").hide(); + scope.data("upload-isactive", true); + cancelUpload.show(); + var xhr = data.submit(); + scope.data("xhr", xhr); + }, + processfail: (e, data) => { + scope.find(".validation-text").show(); + } + }); + + cancelUpload.on("click", e=> { + e.preventDefault(); + + if (confirm("Are you sure you want to cancel this upload?")) { + var xhr = scope.data("xhr"); + xhr.abort(); + } + }); + } + + export function initializeUploadProxied() { + var scopeProxied = $(".upload-proxied").show(); + requiredUploads = scopeProxied.find(".required-uploads-group"); + blocked = scopeProxied.find(".edit-item-sidebar"); + hasRequiredUploadsp = requiredUploads.length > 0; + + if (hasRequiredUploadsp) { + (blocked).block({ + message: requiredUploads.data("block-description"), + overlayCSS: { + backgroundColor: "#fff", + cursor: "default" + }, + css: { + cursor: "default", + border: null, + width: null, + left: 0, + margin: "30px 0 0 0", + backgroundColor: null + } + }); + + scopeProxied.find(".async-upload-input").each(function () { + initializeUpload($(this)); + }); + + window.onbeforeunload = e => { + var hasActiveUploads = false; + + scopeProxied.find("[data-upload-accept-file-types]").each(function () { + if ($(this).data("upload-isactive") == true) { + hasActiveUploads = true; + return false; + } + }); + + if (hasActiveUploads) + e.returnValue = "There are uploads in progress. These will be aborted if you navigate away."; + }; + + scopeProxied.find(".sync-upload-input").on("change", e=> { + unblockIfComplete(); + }); + + unblockIfComplete(); + } + + scopeProxied.find("[data-prompt]").on("change", e => { + var sender = $(e.currentTarget); + + if (!confirm(sender.data("prompt"))) { + sender.val(""); + } + }); + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart.js b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart.js new file mode 100644 index 000000000..83b0d111a --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart.js @@ -0,0 +1,38 @@ +/// +/// +var Orchard; +(function (Orchard) { + (function (Azure) { + (function (MediaServices) { + (function (CloudVideoEdit) { + function hasCorsSupport() { + return 'withCredentials' in new XMLHttpRequest(); + } + + $(function () { + var corsSupported = hasCorsSupport(); + + if (corsSupported) { + Orchard.Azure.MediaServices.CloudVideoEdit.initializeUploadDirect(); + } else { + Orchard.Azure.MediaServices.CloudVideoEdit.initializeUploadProxied(); + } + + var localStorage = window["localStorage"]; + var isCreating = $("#tabs").data("cloudvideo-iscreating"); + $("#tabs").tabs({ + activate: function () { + if (localStorage && localStorage.setItem) + localStorage.setItem("selectedCloudVideoTab", $("#tabs").tabs("option", "active")); + }, + active: !isCreating && localStorage && localStorage.getItem ? localStorage.getItem("selectedCloudVideoTab") : null + }).show(); + }); + })(MediaServices.CloudVideoEdit || (MediaServices.CloudVideoEdit = {})); + var CloudVideoEdit = MediaServices.CloudVideoEdit; + })(Azure.MediaServices || (Azure.MediaServices = {})); + var MediaServices = Azure.MediaServices; + })(Orchard.Azure || (Orchard.Azure = {})); + var Azure = Orchard.Azure; +})(Orchard || (Orchard = {})); +//# sourceMappingURL=cloudmedia-edit-cloudvideopart.js.map diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart.js.map b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart.js.map new file mode 100644 index 000000000..26a177adb --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cloudmedia-edit-cloudvideopart.js","sourceRoot":"","sources":["cloudmedia-edit-cloudvideopart.ts"],"names":["Orchard","Orchard.Azure","Orchard.Azure.MediaServices","Orchard.Azure.MediaServices.CloudVideoEdit","Orchard.Azure.MediaServices.CloudVideoEdit.hasCorsSupport"],"mappings":"AAAA,4CAA4C;AAC5C,8CAA8C;AAE9C,IAAO,OAAO;AAwBb,CAxBD,UAAO,OAAO;KAAdA,UAAeA,KAAKA;SAApBC,UAAqBA,aAAaA;aAAlCC,UAAmCA,cAAcA;gBAC7CC,SAASA,cAAcA;oBACnBC,OAAOA,iBAAiBA,IAAIA,IAAIA,cAAcA,CAACA,CAACA;gBACpDA,CAACA;;gBAEDD,CAACA,CAACA;oBACEA,IAAIA,aAAaA,GAAGA,cAAcA,CAACA,CAACA;;oBAEpCA,IAAIA,aAAaA,CAAEA;wBACfA,iEAAsBA,CAACA,CAACA;qBAC3BA,KAAMA;wBACHA,kEAAuBA,CAACA,CAACA;qBAC5BA;;oBAEDA,IAAIA,YAAYA,GAAGA,MAAMA,CAACA,cAAcA,CAACA;oBACzCA,IAAIA,UAAUA,GAAYA,CAACA,CAACA,OAAOA,CAACA,CAACA,IAAIA,CAACA,uBAAuBA,CAACA;oBAClEA,CAACA,CAACA,OAAOA,CAACA,CAACA,IAAIA,CAACA;wBACZA,QAAQA,EAAEA;4BACNA,IAAIA,YAAYA,IAAIA,YAAYA,CAACA,OAAOA;gCACpCA,YAAYA,CAACA,OAAOA,CAACA,uBAAuBA,EAAEA,CAACA,CAACA,OAAOA,CAACA,CAACA,IAAIA,CAACA,QAAQA,EAAEA,QAAQA,CAACA,CAACA,CAACA;wBAC3FA,CAACA;wBACDA,MAAMA,EAAEA,CAACA,UAAUA,IAAIA,YAAYA,IAAIA,YAAYA,CAACA,OAAOA,GAAGA,YAAYA,CAACA,OAAOA,CAACA,uBAAuBA,CAACA,GAAGA,IAAIA;qBACrHA,CAACA,CAACA,IAAIA,CAACA,CAACA;gBACbA,CAACA,CAACA;YACNA,CAACA,uEAAAD;8DAAAA;QAADA,CAACA,qDAAAD;gDAAAA;IAADA,CAACA,yCAAAD;8BAAAA;AAADA,CAACA,6BAAA"} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart.ts b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart.ts new file mode 100644 index 000000000..d1ea1a093 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart.ts @@ -0,0 +1,28 @@ +/// +/// + +module Orchard.Azure.MediaServices.CloudVideoEdit { + function hasCorsSupport() { + return 'withCredentials' in new XMLHttpRequest(); + } + + $(function() { + var corsSupported = hasCorsSupport(); + + if (corsSupported) { + initializeUploadDirect(); + } else { + initializeUploadProxied(); + } + + var localStorage = window["localStorage"]; + var isCreating: boolean = $("#tabs").data("cloudvideo-iscreating"); + $("#tabs").tabs({ + activate: function () { + if (localStorage && localStorage.setItem) + localStorage.setItem("selectedCloudVideoTab", $("#tabs").tabs("option", "active")); + }, + active: !isCreating && localStorage && localStorage.getItem ? localStorage.getItem("selectedCloudVideoTab") : null + }).show(); + }); +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-metadata-cloudvideopart.js b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-metadata-cloudvideopart.js new file mode 100644 index 000000000..df63d33f8 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-metadata-cloudvideopart.js @@ -0,0 +1,60 @@ +/// +(function ($) { + var hasFocus = function (videoId) { + var focusedVideoId = $("#media-library-main-list li.has-focus .media-thumbnail-cloud-video").data("id"); + return focusedVideoId == videoId; + }; + + var updateUploadProgressLabel = function () { + var containers = $("#media-library-main-editor-focus .properties"); + + containers.each(function () { + var container = $(this); + var statusWrapper = container.find(".upload-status-wrapper"); + var publicationStatusLabel = container.find(".publication-status span"); + var uploadStatusLabel = container.find(".upload-status-text"); + var progressLabel = container.find(".upload-progress-value"); + var uploadProgressContainer = $(".upload-progress-status"); + var statusUrl = statusWrapper.data("status-url"); + var status = statusWrapper.data("upload-status"); + var published = statusWrapper.data("published"); + var videoId = statusWrapper.data("video-id"); + + if (status == "Uploaded" && published) { + return; + } + + var update = function () { + if (!hasFocus(videoId)) { + return; + } + $.ajax({ + url: statusUrl, + cache: false + }).done(function (data) { + progressLabel.text(data.uploadState.percentComplete + "%"); + uploadStatusLabel.text(data.uploadState.status); + publicationStatusLabel.text(data.published ? statusWrapper.data("published-text") : statusWrapper.data("draft-text")); + + if (data.published) { + var mediathumbnail = $(".media-thumbnail-cloud-video[data-id=" + videoId + "]"); + mediathumbnail.parents("li:first").find(".publication-status").hide(); + } + + if (data.uploadState.status == "Uploaded") { + uploadProgressContainer.hide(); + return; + } else if (data.uploadState.status == "Uploading") { + uploadProgressContainer.show(); + } + + window.setTimeout(update, 5000); + }); + }; + update(); + }); + }; + + updateUploadProgressLabel(); +})(jQuery); +//# sourceMappingURL=cloudmedia-metadata-cloudvideopart.js.map diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-metadata-cloudvideopart.js.map b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-metadata-cloudvideopart.js.map new file mode 100644 index 000000000..64729ca14 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-metadata-cloudvideopart.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cloudmedia-metadata-cloudvideopart.js","sourceRoot":"","sources":["cloudmedia-metadata-cloudvideopart.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAE5C,CAAC,UAAA,CAAC;IACE,IAAI,QAAQ,GAAG,UAAC,OAAe;QAC3B,IAAI,cAAc,GAAW,CAAC,CAAC,oEAAoE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/G,OAAO,cAAc,IAAI,OAAO;IACpC,CAAC;;IAED,IAAI,yBAAyB,GAAG;QAC5B,IAAI,UAAU,GAAW,CAAC,CAAC,8CAA8C,CAAC;;QAE1E,UAAU,CAAC,IAAI,CAAC;YACZ,IAAI,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC;YACvB,IAAI,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,wBAAwB,CAAC;YAC5D,IAAI,sBAAsB,GAAG,SAAS,CAAC,IAAI,CAAC,0BAA0B,CAAC;YACvE,IAAI,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC,qBAAqB,CAAC;YAC7D,IAAI,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,wBAAwB,CAAC;YAC5D,IAAI,uBAAuB,GAAG,CAAC,CAAC,yBAAyB,CAAC;YAC1D,IAAI,SAAS,GAAW,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC;YACxD,IAAI,MAAM,GAAW,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;YACxD,IAAI,SAAS,GAAW,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;YACvD,IAAI,OAAO,GAAW,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;;YAEpD,IAAI,MAAM,IAAI,UAAU,IAAI,SAAS,CAAE;gBACnC,MAAO;aACV;;YAED,IAAI,MAAM,GAAG;gBACT,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAE;oBACpB,MAAO;iBACV;gBACD,CAAC,CAAC,IAAI,CAAC;oBACH,GAAG,EAAE,SAAS;oBACd,KAAK,EAAE,KAAK;iBACf,CAAC,CAAC,IAAI,CAAC,UAAA,IAAI;oBACR,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,GAAG,GAAG,CAAC;oBAC1D,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;oBAC/C,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;;oBAErH,IAAI,IAAI,CAAC,SAAS,CAAE;wBAChB,IAAI,cAAc,GAAG,CAAC,CAAC,uCAAuC,GAAG,OAAO,GAAG,GAAG,CAAC;wBAC/E,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,CAAC;qBACxE;;oBAED,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,UAAU,CAAE;wBACvC,uBAAuB,CAAC,IAAI,CAAC,CAAC;wBAC9B,MAAO;qBACV,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,WAAW,CAAE;wBAC/C,uBAAuB,CAAC,IAAI,CAAC,CAAC;qBACjC;;oBAED,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC;gBACnC,CAAC,CAAC;YACN,CAAC;YACD,MAAM,CAAC,CAAC;QACZ,CAAC,CAAC;IACN,CAAC;;IAED,yBAAyB,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC,MAAM,CAAC"} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-metadata-cloudvideopart.ts b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-metadata-cloudvideopart.ts new file mode 100644 index 000000000..1475b2f52 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-metadata-cloudvideopart.ts @@ -0,0 +1,60 @@ +/// + +($=> { + var hasFocus = (videoId: number)=> { + var focusedVideoId: number = $("#media-library-main-list li.has-focus .media-thumbnail-cloud-video").data("id"); + return focusedVideoId == videoId; + }; + + var updateUploadProgressLabel = ()=> { + var containers: JQuery = $("#media-library-main-editor-focus .properties"); + + containers.each(function () { + var container = $(this); + var statusWrapper = container.find(".upload-status-wrapper"); + var publicationStatusLabel = container.find(".publication-status span"); + var uploadStatusLabel = container.find(".upload-status-text"); + var progressLabel = container.find(".upload-progress-value"); + var uploadProgressContainer = $(".upload-progress-status"); + var statusUrl: string = statusWrapper.data("status-url"); + var status: string = statusWrapper.data("upload-status"); + var published: string = statusWrapper.data("published"); + var videoId: number = statusWrapper.data("video-id"); + + if (status == "Uploaded" && published) { + return; + } + + var update = () => { + if (!hasFocus(videoId)) { + return; + } + $.ajax({ + url: statusUrl, + cache: false + }).done(data=> { + progressLabel.text(data.uploadState.percentComplete + "%"); + uploadStatusLabel.text(data.uploadState.status); + publicationStatusLabel.text(data.published ? statusWrapper.data("published-text") : statusWrapper.data("draft-text")); + + if (data.published) { + var mediathumbnail = $(".media-thumbnail-cloud-video[data-id=" + videoId + "]"); + mediathumbnail.parents("li:first").find(".publication-status").hide(); + } + + if (data.uploadState.status == "Uploaded") { + uploadProgressContainer.hide(); + return; + } else if (data.uploadState.status == "Uploading") { + uploadProgressContainer.show(); + } + + window.setTimeout(update, 5000); + }); + }; + update(); + }); + }; + + updateUploadProgressLabel(); +})(jQuery); \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-data.js b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-data.js new file mode 100644 index 000000000..6dc84347f --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-data.js @@ -0,0 +1,23 @@ +var Orchard; +(function (Orchard) { + (function (Azure) { + (function (MediaServices) { + (function (VideoPlayer) { + (function (Data) { + (function (AssetType) { + AssetType[AssetType["VideoAsset"] = 0] = "VideoAsset"; + AssetType[AssetType["DynamicVideoAsset"] = 1] = "DynamicVideoAsset"; + AssetType[AssetType["ThumbnailAsset"] = 2] = "ThumbnailAsset"; + AssetType[AssetType["SubtitleAsset"] = 3] = "SubtitleAsset"; + })(Data.AssetType || (Data.AssetType = {})); + var AssetType = Data.AssetType; + })(VideoPlayer.Data || (VideoPlayer.Data = {})); + var Data = VideoPlayer.Data; + })(MediaServices.VideoPlayer || (MediaServices.VideoPlayer = {})); + var VideoPlayer = MediaServices.VideoPlayer; + })(Azure.MediaServices || (Azure.MediaServices = {})); + var MediaServices = Azure.MediaServices; + })(Orchard.Azure || (Orchard.Azure = {})); + var Azure = Orchard.Azure; +})(Orchard || (Orchard = {})); +//# sourceMappingURL=cloudmedia-videoplayer-data.js.map diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-data.js.map b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-data.js.map new file mode 100644 index 000000000..257048924 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-data.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cloudmedia-videoplayer-data.js","sourceRoot":"","sources":["cloudmedia-videoplayer-data.ts"],"names":["Orchard","Orchard.Azure","Orchard.Azure.MediaServices","Orchard.Azure.MediaServices.VideoPlayer","Orchard.Azure.MediaServices.VideoPlayer.Data","Orchard.Azure.MediaServices.VideoPlayer.Data.AssetType"],"mappings":"AAAA,IAAO,OAAO;AAgFb,CAhFD,UAAO,OAAO;KAAdA,UAAeA,KAAKA;SAApBC,UAAqBA,aAAaA;aAAlCC,UAAmCA,WAAWA;iBAA9CC,UAA+CA,IAAIA;qBAkB/CC,UAAYA,SAASA;wBACjBC,qDAAUA;wBACVA,mEAAiBA;wBACjBA,6DAAcA;wBACdA,2DAAaA;gEAChBD;mDAAAA;gBAyDLA,CAACA,+CAAAD;4CAAAA;YAADA,CAACA,iEAAAD;wDAAAA;QAADA,CAACA,qDAAAD;gDAAAA;IAADA,CAACA,yCAAAD;8BAAAA;AAADA,CAACA,6BAAA"} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-data.ts b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-data.ts new file mode 100644 index 000000000..786e92ce3 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-data.ts @@ -0,0 +1,81 @@ +module Orchard.Azure.MediaServices.VideoPlayer.Data { + + export interface IAssetData { + VideoAssets: IVideoAsset[]; + DynamicVideoAssets: IDynamicVideoAsset[]; + ThumbnailAssets: IThumbnailAsset[]; + SubtitleAssets: ISubtitleAsset[]; + } + + export interface IAsset { + Type: AssetType; + Id: number; + Name: string; + MimeType: string; + MainFileUrl: string; + MediaQuery: string; + } + + export enum AssetType { + VideoAsset, + DynamicVideoAsset, + ThumbnailAsset, + SubtitleAsset + } + + export interface IVideoAsset extends IAsset { + EncodingPreset: string; + EncoderMetadata: IEncoderMetadata; + } + + export interface IDynamicVideoAsset extends IVideoAsset { + SmoothStreamingUrl: string; + HlsUrl: string; + MpegDashUrl: string; + } + + export interface IThumbnailAsset extends IAsset { + } + + export interface ISubtitleAsset extends IAsset { + Language: string; + } + + export interface IEncoderMetadata { + AssetFiles: IAssetFile[]; + } + + export interface IAssetFile { + Name: string; + Size: number; + Duration: Duration; + AudioTracks: IAudioTrack[]; + VideoTracks: IVideoTrack[]; + Sources: string[]; + Bitrate: number; + MimeType: string; + } + + export interface IAudioTrack { + Index: number; + Bitrate: number; + SamplingRate: number; + BitsPerSample: number; + Channels: number; + Codec: string; + EncoderVersion: string; + } + + export interface IVideoTrack { + Index: number; + Bitrate: number; + TargetBitrate: number; + Framerate: number; + TargetFramerate: number; + FourCc: string; + Width: number; + Height: number; + DisplayRatioX: number; + DisplayRatioY: number; + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-alt.js b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-alt.js new file mode 100644 index 000000000..62221059d --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-alt.js @@ -0,0 +1,63 @@ +/// +/// +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var Orchard; +(function (Orchard) { + (function (Azure) { + (function (MediaServices) { + (function (VideoPlayer) { + (function (Injectors) { + var AltInjector = (function (_super) { + __extends(AltInjector, _super); + function AltInjector(container, playerWidth, playerHeight, assetData, applyMediaQueries, debugToConsole, nextInjector, alternateContent) { + _super.call(this, container, playerWidth, playerHeight, false, assetData, applyMediaQueries, debugToConsole, nextInjector); + this.alternateContent = alternateContent; + } + AltInjector.prototype.isSupported = function () { + return true; + }; + + AltInjector.prototype.inject = function () { + var firstThumbnailAsset = _(this.filteredAssets().ThumbnailAssets).first(); + + this.debug("Injecting alternate content into element '{0}'.", this.container.id); + + var wrapper = $("
").addClass("cloudvideo-player-alt-wrapper").css("width", this.playerWidth).css("height", this.playerHeight); + if (firstThumbnailAsset) + wrapper.css("background-image", "url('" + firstThumbnailAsset.MainFileUrl + "')"); + + var inner = $("
").addClass("cloudvideo-player-alt-inner").appendTo(wrapper); + + if (this.alternateContent) + _(this.alternateContent).each(function (elem) { + $(elem).appendTo(inner); + }); + + wrapper.appendTo(this.container); + }; + + AltInjector.prototype.debug = function (message) { + var args = []; + for (var _i = 0; _i < (arguments.length - 1); _i++) { + args[_i] = arguments[_i + 1]; + } + _super.prototype.debug.call(this, "AltInjector: " + message, args); + }; + return AltInjector; + })(Orchard.Azure.MediaServices.VideoPlayer.Injectors.Injector); + Injectors.AltInjector = AltInjector; + })(VideoPlayer.Injectors || (VideoPlayer.Injectors = {})); + var Injectors = VideoPlayer.Injectors; + })(MediaServices.VideoPlayer || (MediaServices.VideoPlayer = {})); + var VideoPlayer = MediaServices.VideoPlayer; + })(Azure.MediaServices || (Azure.MediaServices = {})); + var MediaServices = Azure.MediaServices; + })(Orchard.Azure || (Orchard.Azure = {})); + var Azure = Orchard.Azure; +})(Orchard || (Orchard = {})); +//# sourceMappingURL=cloudmedia-videoplayer-injectors-alt.js.map diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-alt.js.map b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-alt.js.map new file mode 100644 index 000000000..b9b730848 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-alt.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cloudmedia-videoplayer-injectors-alt.js","sourceRoot":"","sources":["cloudmedia-videoplayer-injectors-alt.ts"],"names":["Orchard","Orchard.Azure","Orchard.Azure.MediaServices","Orchard.Azure.MediaServices.VideoPlayer","Orchard.Azure.MediaServices.VideoPlayer.Injectors","Orchard.Azure.MediaServices.VideoPlayer.Injectors.AltInjector","Orchard.Azure.MediaServices.VideoPlayer.Injectors.AltInjector.constructor","Orchard.Azure.MediaServices.VideoPlayer.Injectors.AltInjector.isSupported","Orchard.Azure.MediaServices.VideoPlayer.Injectors.AltInjector.inject","Orchard.Azure.MediaServices.VideoPlayer.Injectors.AltInjector.debug"],"mappings":"AAAA,4CAA4C;AAC5C,gDAAgD;;;;;;;AAEhD,IAAO,OAAO;AA4Cb,CA5CD,UAAO,OAAO;KAAdA,UAAeA,KAAKA;SAApBC,UAAqBA,aAAaA;aAAlCC,UAAmCA,WAAWA;iBAA9CC,UAA+CA,SAASA;oBAIpDC;wBAAiCC,8BAAQA;wBAErCA,qBACIA,SAAsBA,EACtBA,WAAmBA,EACnBA,YAAoBA,EACpBA,SAA0BA,EAC1BA,iBAA0BA,EAC1BA,cAAuBA,EACvBA,YAAsBA,EACtBA,gBAAkCA;4BAAIC,WAAMA,OAAAA,SAASA,EAAEA,WAAWA,EAAEA,YAAYA,EAAEA,KAAKA,EAAEA,SAASA,EAAEA,iBAAiBA,EAAEA,cAAcA,EAAEA,YAAYA,CAACA;4BAApJA,qBAAwBA,GAAhBA,gBAAgBA;AAAUA,wBAAoHA,CAACA;wBAE3JD,oCAAAA;4BACIE,OAAOA,IAAIA;wBACfA,CAACA;;wBAEDF,+BAAAA;4BACIG,IAAIA,mBAAmBA,GAAGA,CAACA,CAACA,IAAIA,CAACA,cAAcA,CAACA,CAACA,CAACA,eAAeA,CAACA,CAACA,KAAKA,CAACA,CAACA;;4BAE1EA,IAAIA,CAACA,KAAKA,CAACA,iDAAiDA,EAAEA,IAAIA,CAACA,SAASA,CAACA,EAAEA,CAACA;;4BAEhFA,IAAIA,OAAOA,GAAGA,CAACA,CAACA,OAAOA,CAACA,CACnBA,QAAQA,CAACA,+BAA+BA,CAACA,CACzCA,GAAGA,CAACA,OAAOA,EAAEA,IAAIA,CAACA,WAAWA,CAACA,CAC9BA,GAAGA,CAACA,QAAQA,EAAEA,IAAIA,CAACA,YAAYA,CAACA;4BACrCA,IAAIA,mBAAmBA;gCACnBA,OAAOA,CAACA,GAAGA,CAACA,kBAAkBA,EAAEA,OAAOA,GAAGA,mBAAmBA,CAACA,WAAWA,GAAGA,IAAIA,CAACA,CAACA;;4BAEtFA,IAAIA,KAAKA,GAAGA,CAACA,CAACA,OAAOA,CAACA,CAACA,QAAQA,CAACA,6BAA6BA,CAACA,CAACA,QAAQA,CAACA,OAAOA,CAACA;;4BAEhFA,IAAIA,IAAIA,CAACA,gBAAgBA;gCACrBA,CAACA,CAACA,IAAIA,CAACA,gBAAgBA,CAACA,CAACA,IAAIA,CAACA,UAAAA,IAAIA;oCAAMA,CAACA,CAACA,IAAIA,CAACA,CAACA,QAAQA,CAACA,KAAKA,CAACA;gCAAEA,CAACA,CAACA,CAACA;;4BAExEA,OAAOA,CAACA,QAAQA,CAACA,IAAIA,CAACA,SAASA,CAACA;wBACpCA,CAACA;;wBAEDH,8BAAAA,UAAaA,OAAeA;4BAAEI,IAAGA,IAAIA;AAAOA,iCAAdA,WAAcA,CAAdA,2BAAcA,EAAdA,IAAcA;gCAAdA,6BAAcA;;4BACxCA,gBAAKA,CAACA,KAAKA,KAACA,OAAAA,eAAeA,GAAGA,OAAOA,EAAEA,IAAIA,CAACA;wBAChDA,CAACA;wBACLJ,mBAACA;oBAADA,CAACA,EAvCgCD,0DAAQA,EAuCxCA;oBAvCDA,oCAuCCA;gBACLA,CAACA,yDAAAD;sDAAAA;YAADA,CAACA,iEAAAD;wDAAAA;QAADA,CAACA,qDAAAD;gDAAAA;IAADA,CAACA,yCAAAD;8BAAAA;AAADA,CAACA,6BAAA"} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-alt.ts b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-alt.ts new file mode 100644 index 000000000..6e30a8e53 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-alt.ts @@ -0,0 +1,48 @@ +/// +/// + +module Orchard.Azure.MediaServices.VideoPlayer.Injectors { + + import Data = Orchard.Azure.MediaServices.VideoPlayer.Data; + + export class AltInjector extends Injector { + + constructor( + container: HTMLElement, + playerWidth: number, + playerHeight: number, + assetData: Data.IAssetData, + applyMediaQueries: boolean, + debugToConsole: boolean, + nextInjector: Injector, + private alternateContent: JQuery[]) { super(container, playerWidth, playerHeight, false, assetData, applyMediaQueries, debugToConsole, nextInjector); } + + public isSupported(): boolean { + return true; + } + + public inject(): void { + var firstThumbnailAsset = _(this.filteredAssets().ThumbnailAssets).first(); + + this.debug("Injecting alternate content into element '{0}'.", this.container.id); + + var wrapper = $("
") + .addClass("cloudvideo-player-alt-wrapper") + .css("width", this.playerWidth) + .css("height", this.playerHeight); + if (firstThumbnailAsset) + wrapper.css("background-image", "url('" + firstThumbnailAsset.MainFileUrl + "')"); + + var inner = $("
").addClass("cloudvideo-player-alt-inner").appendTo(wrapper); + + if (this.alternateContent) + _(this.alternateContent).each(elem => { $(elem).appendTo(inner); }); + + wrapper.appendTo(this.container); + } + + public debug(message: string, ...args: any[]): void { + super.debug("AltInjector: " + message, args); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-dash.js b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-dash.js new file mode 100644 index 000000000..2266a2085 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-dash.js @@ -0,0 +1,87 @@ +/// +/// +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var Orchard; +(function (Orchard) { + (function (Azure) { + (function (MediaServices) { + (function (VideoPlayer) { + (function (Injectors) { + var DashInjector = (function (_super) { + __extends(DashInjector, _super); + function DashInjector() { + _super.apply(this, arguments); + } + DashInjector.prototype.isSupported = function () { + var videoElement = document.createElement("video"); + var mse = window["MediaSource"] || window["WebKitMediaSource"]; + + var hasH264 = videoElement && videoElement.canPlayType && !!videoElement.canPlayType("video/mp4; codecs=\"avc1.42001E, mp4a.40.2\""); + var hasMse = mse && mse.isTypeSupported && mse.isTypeSupported("video/mp4; codecs=\"avc1.4d404f\""); + var hasDynamicAssets = _(this.filteredAssets().DynamicVideoAssets).any(); + + this.debug("Browser supports HTML5 video and the H264 and AAC codecs: {0}", hasH264); + this.debug("Browser supports the Media Source Extensions API: {0}", hasMse); + this.debug("Item has at least one dynamic video asset: {0}", hasDynamicAssets); + + var result = hasH264 && hasMse && hasDynamicAssets; + this.debug("isSupported() returns {0}.", result); + + return result; + }; + + DashInjector.prototype.inject = function () { + var _this = this; + var firstDynamicAsset = _(this.filteredAssets().DynamicVideoAssets).first(); + var firstThumbnailAsset = _(this.filteredAssets().ThumbnailAssets).first(); + + this.debug("Injecting player into element '{0}'.", this.container.id); + + var videoElement = $("
").attr("id", this.innerElementId).appendTo(this.container); + this.debug("Injecting player into element '{0}'.", this.container.id); + + swfobject.embedSWF(this.contentBaseUrl + "StrobeMediaPlayback.swf", this.innerElementId, this.playerWidth.toString(), this.playerHeight.toString(), this.flashVersion, this.contentBaseUrl + "expressInstall.swf", flashvars, params, attributes, function (e) { + if (!e.success) + _this.fault(); + }); + + Injectors.instances[this.innerElementId] = this; + }; + + SmpInjector.prototype.onMediaPlayerStateChange = function (state) { + if (state == "playbackError") { + this.debug("Playback error detected; cleaning up container and faulting this injector."); + Injectors.instances[this.innerElementId] = null; + this.fault(); + } + }; + + SmpInjector.prototype.debug = function (message) { + var args = []; + for (var _i = 0; _i < (arguments.length - 1); _i++) { + args[_i] = arguments[_i + 1]; + } + _super.prototype.debug.call(this, "SmpInjector: " + message, args); + }; + return SmpInjector; + })(Orchard.Azure.MediaServices.VideoPlayer.Injectors.Injector); + Injectors.SmpInjector = SmpInjector; + + function onSmpBridgeCreated(playerElementId) { + var player = document.getElementById(playerElementId); + if (player) { + player.addEventListener("mediaPlayerStateChange", "Orchard.Azure.MediaServices.VideoPlayer.Injectors.instances[\"" + playerElementId + "\"].onMediaPlayerStateChange"); + } + } + Injectors.onSmpBridgeCreated = onSmpBridgeCreated; + })(VideoPlayer.Injectors || (VideoPlayer.Injectors = {})); + var Injectors = VideoPlayer.Injectors; + })(MediaServices.VideoPlayer || (MediaServices.VideoPlayer = {})); + var VideoPlayer = MediaServices.VideoPlayer; + })(Azure.MediaServices || (Azure.MediaServices = {})); + var MediaServices = Azure.MediaServices; + })(Orchard.Azure || (Orchard.Azure = {})); + var Azure = Orchard.Azure; +})(Orchard || (Orchard = {})); +//# sourceMappingURL=cloudmedia-videoplayer-injectors-smp.js.map diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-smp.js.map b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-smp.js.map new file mode 100644 index 000000000..b2af5cc45 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-smp.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cloudmedia-videoplayer-injectors-smp.js","sourceRoot":"","sources":["cloudmedia-videoplayer-injectors-smp.ts"],"names":["Orchard","Orchard.Azure","Orchard.Azure.MediaServices","Orchard.Azure.MediaServices.VideoPlayer","Orchard.Azure.MediaServices.VideoPlayer.Injectors","Orchard.Azure.MediaServices.VideoPlayer.Injectors.SmpInjector","Orchard.Azure.MediaServices.VideoPlayer.Injectors.SmpInjector.constructor","Orchard.Azure.MediaServices.VideoPlayer.Injectors.SmpInjector.isSupported","Orchard.Azure.MediaServices.VideoPlayer.Injectors.SmpInjector.inject","Orchard.Azure.MediaServices.VideoPlayer.Injectors.SmpInjector.onMediaPlayerStateChange","Orchard.Azure.MediaServices.VideoPlayer.Injectors.SmpInjector.debug","Orchard.Azure.MediaServices.VideoPlayer.Injectors.onSmpBridgeCreated"],"mappings":"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"} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-smp.ts b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-smp.ts new file mode 100644 index 000000000..d4749a5b5 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-smp.ts @@ -0,0 +1,108 @@ +/// +/// + +module Orchard.Azure.MediaServices.VideoPlayer.Injectors { + + import Data = Orchard.Azure.MediaServices.VideoPlayer.Data; + + declare var swfobject: any; + + export var instances: SmpInjector[] = new Array(); + + export class SmpInjector extends Injector { + + private flashVersion = "10.2.0"; + private innerElementId: string; + + constructor( + container: HTMLElement, + playerWidth: number, + playerHeight: number, + autoPlay: boolean, + assetData: Data.IAssetData, + applyMediaQueries: boolean, + debugToConsole: boolean, + nextInjector: Injector, + private contentBaseUrl: string) { + super(container, playerWidth, playerHeight, autoPlay, assetData, applyMediaQueries, debugToConsole, nextInjector); + this.innerElementId = container.id + "-inner"; + } + + public isSupported(): boolean { + var browserHasFlash = swfobject.hasFlashPlayerVersion(this.flashVersion); + var hasDynamicAssets = _(this.filteredAssets().DynamicVideoAssets).any(); + var result = browserHasFlash && hasDynamicAssets; + + this.debug("Browser has required Flash version: {0}", browserHasFlash); + this.debug("Item has at least one dynamic video asset: {0}", hasDynamicAssets); + + this.debug("isSupported() returns {0}.", result); + return result; + } + + public inject(): void { + var firstDynamicAsset = _(this.filteredAssets().DynamicVideoAssets).first(); + var firstThumbnailAsset = _(this.filteredAssets().ThumbnailAssets).first(); + + var flashvars = { + src: firstDynamicAsset.SmoothStreamingUrl, + plugin_AdaptiveStreamingPlugin: encodeURIComponent(this.contentBaseUrl + "MSAdaptiveStreamingPlugin.swf"), + AdaptiveStreamingPlugin_retryLive: "true", + AdaptiveStreamingPlugin_retryInterval: "10", + autoPlay: this.autoPlay.toString(), + bufferingOverlay: "false", + poster: firstThumbnailAsset ? encodeURIComponent(firstThumbnailAsset.MainFileUrl) : null, + javascriptCallbackFunction: "Orchard.Azure.MediaServices.VideoPlayer.Injectors.onSmpBridgeCreated" + }; + + var params = { + allowFullScreen: "true", + allowScriptAccess: "always", + wmode: "direct" + }; + + var attributes = { + id: this.innerElementId + }; + + $("
").attr("id", this.innerElementId).appendTo(this.container); + this.debug("Injecting player into element '{0}'.", this.container.id); + + swfobject.embedSWF( + this.contentBaseUrl + "StrobeMediaPlayback.swf", + this.innerElementId, + this.playerWidth.toString(), + this.playerHeight.toString(), + this.flashVersion, + this.contentBaseUrl + "expressInstall.swf", + flashvars, + params, + attributes, + e => { + if (!e.success) + this.fault(); + }); + + instances[this.innerElementId] = this; + } + + public onMediaPlayerStateChange(state: string) { + if (state == "playbackError") { + this.debug("Playback error detected; cleaning up container and faulting this injector."); + instances[this.innerElementId] = null; + this.fault(); + } + } + + public debug(message: string, ...args: any[]): void { + super.debug("SmpInjector: " + message, args); + } + } + + export function onSmpBridgeCreated(playerElementId: string) { + var player = document.getElementById(playerElementId); + if (player) { + (player).addEventListener("mediaPlayerStateChange", "Orchard.Azure.MediaServices.VideoPlayer.Injectors.instances[\"" + playerElementId + "\"].onMediaPlayerStateChange"); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors.js b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors.js new file mode 100644 index 000000000..28cf1232f --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors.js @@ -0,0 +1,86 @@ +var Orchard; +(function (Orchard) { + (function (Azure) { + (function (MediaServices) { + (function (VideoPlayer) { + (function (Injectors) { + var Injector = (function () { + function Injector(container, playerWidth, playerHeight, autoPlay, assetData, applyMediaQueries, debugToConsole, nextInjector) { + this.container = container; + this.playerWidth = playerWidth; + this.playerHeight = playerHeight; + this.autoPlay = autoPlay; + this.assetData = assetData; + this.applyMediaQueries = applyMediaQueries; + this.debugToConsole = debugToConsole; + this.nextInjector = nextInjector; + this._isFaulted = false; + } + Injector.prototype.isFaulted = function () { + return this._isFaulted; + }; + + Injector.prototype.invoke = function () { + if (this.isSupported()) + this.inject(); + else if (this.nextInjector) + this.nextInjector.invoke(); + }; + + Injector.prototype.isSupported = function () { + throw new Error("This method is abstract and must be overridden in an inherited class."); + }; + + Injector.prototype.inject = function () { + throw new Error("This method is abstract and must be overridden in an inherited class."); + }; + + Injector.prototype.filteredAssets = function () { + if (!this.applyMediaQueries) + return this.assetData; + + var hasMatchingMediaQuery = function (asset) { + return !asset.MediaQuery || window.matchMedia(asset.MediaQuery).matches; + }; + + return { + VideoAssets: _(this.assetData.VideoAssets).filter(hasMatchingMediaQuery), + DynamicVideoAssets: _(this.assetData.DynamicVideoAssets).filter(hasMatchingMediaQuery), + ThumbnailAssets: _(this.assetData.ThumbnailAssets).filter(hasMatchingMediaQuery), + SubtitleAssets: _(this.assetData.SubtitleAssets).filter(hasMatchingMediaQuery) + }; + }; + + Injector.prototype.fault = function () { + if (!this._isFaulted) { + this._isFaulted = true; + $(this.container).empty(); + if (this.nextInjector) + this.nextInjector.invoke(); + } + }; + + Injector.prototype.debug = function (message) { + var args = []; + for (var _i = 0; _i < (arguments.length - 1); _i++) { + args[_i] = arguments[_i + 1]; + } + if (this.debugToConsole) { + console.debug(message.replace(/{(\d+)}/g, function (match, index) { + return (typeof args[index] != "undefined" ? args[index] : match); + })); + } + }; + return Injector; + })(); + Injectors.Injector = Injector; + })(VideoPlayer.Injectors || (VideoPlayer.Injectors = {})); + var Injectors = VideoPlayer.Injectors; + })(MediaServices.VideoPlayer || (MediaServices.VideoPlayer = {})); + var VideoPlayer = MediaServices.VideoPlayer; + })(Azure.MediaServices || (Azure.MediaServices = {})); + var MediaServices = Azure.MediaServices; + })(Orchard.Azure || (Orchard.Azure = {})); + var Azure = Orchard.Azure; +})(Orchard || (Orchard = {})); +//# sourceMappingURL=cloudmedia-videoplayer-injectors.js.map diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors.js.map b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors.js.map new file mode 100644 index 000000000..8190e6293 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cloudmedia-videoplayer-injectors.js","sourceRoot":"","sources":["cloudmedia-videoplayer-injectors.ts"],"names":["Orchard","Orchard.Azure","Orchard.Azure.MediaServices","Orchard.Azure.MediaServices.VideoPlayer","Orchard.Azure.MediaServices.VideoPlayer.Injectors","Orchard.Azure.MediaServices.VideoPlayer.Injectors.Injector","Orchard.Azure.MediaServices.VideoPlayer.Injectors.Injector.constructor","Orchard.Azure.MediaServices.VideoPlayer.Injectors.Injector.isFaulted","Orchard.Azure.MediaServices.VideoPlayer.Injectors.Injector.invoke","Orchard.Azure.MediaServices.VideoPlayer.Injectors.Injector.isSupported","Orchard.Azure.MediaServices.VideoPlayer.Injectors.Injector.inject","Orchard.Azure.MediaServices.VideoPlayer.Injectors.Injector.filteredAssets","Orchard.Azure.MediaServices.VideoPlayer.Injectors.Injector.fault","Orchard.Azure.MediaServices.VideoPlayer.Injectors.Injector.debug"],"mappings":"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"} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors.ts b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors.ts new file mode 100644 index 000000000..71c3a05ec --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors.ts @@ -0,0 +1,68 @@ +module Orchard.Azure.MediaServices.VideoPlayer.Injectors { + + import Data = Orchard.Azure.MediaServices.VideoPlayer.Data; + + export class Injector { + + constructor( + public container: HTMLElement, + public playerWidth: number, + public playerHeight: number, + public autoPlay: boolean, + public assetData: Data.IAssetData, + public applyMediaQueries: boolean, + private debugToConsole: boolean, + private nextInjector: Injector) { } + + private _isFaulted: boolean = false; + public isFaulted(): boolean { + return this._isFaulted; + } + + public invoke() { + if (this.isSupported()) + this.inject(); + else if (this.nextInjector) + this.nextInjector.invoke(); + } + + public isSupported(): boolean { + throw new Error("This method is abstract and must be overridden in an inherited class."); + } + + public inject(): void { + throw new Error("This method is abstract and must be overridden in an inherited class."); + } + + public filteredAssets(): Data.IAssetData { + if (!this.applyMediaQueries) + return this.assetData; + + var hasMatchingMediaQuery = function (asset: Data.IAsset) { + return !asset.MediaQuery || window.matchMedia(asset.MediaQuery).matches; + }; + + return { + VideoAssets: _(this.assetData.VideoAssets).filter(hasMatchingMediaQuery), + DynamicVideoAssets: _(this.assetData.DynamicVideoAssets).filter(hasMatchingMediaQuery), + ThumbnailAssets: _(this.assetData.ThumbnailAssets).filter(hasMatchingMediaQuery), + SubtitleAssets: _(this.assetData.SubtitleAssets).filter(hasMatchingMediaQuery) + }; + } + + public fault() { + if (!this._isFaulted) { + this._isFaulted = true; + $(this.container).empty(); + if (this.nextInjector) + this.nextInjector.invoke(); + } + } + + public debug(message: string, ...args: any[]): void { + if (this.debugToConsole) { + console.debug((message).replace(/{(\d+)}/g, (match: string, index: number) => { return (typeof args[index] != "undefined" ? args[index] : match); })); + } + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-main.js b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-main.js new file mode 100644 index 000000000..378d6971d --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-main.js @@ -0,0 +1,55 @@ +/// +/// +var Orchard; +(function (Orchard) { + (function (Azure) { + (function (MediaServices) { + (function (VideoPlayer) { + var Injectors = Orchard.Azure.MediaServices.VideoPlayer.Injectors; + + $(function () { + $(".cloudmedia-videoplayer-container").each(function (index, elem) { + var container = elem; + + var assetData = $(elem).data("cloudvideo-player-assetdata"); + var playerWidth = $(elem).data("cloudvideo-player-width"); + var playerHeight = $(elem).data("cloudvideo-player-height"); + var applyMediaQueries = $(elem).data("cloudvideo-player-applymediaqueries"); + var autoPlay = $(elem).data("cloudvideo-player-autoplay"); + var contentBaseUrl = $(elem).data("cloudvideo-player-content-baseurl"); + var errorText = $(elem).data("cloudvideo-player-errortext"); + var altText = $(elem).data("cloudvideo-player-alttext"); + var retryText = $(elem).data("cloudvideo-player-retrytext"); + + function invokeInjectors() { + $(container).empty(); + + var alternateContent = [ + $("").addClass("cloudvideo-player-error-text").text(errorText), + $(" + + @T("Back") + +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideo.Edit.Assets.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideo.Edit.Assets.cshtml new file mode 100644 index 000000000..3e3f79c1f --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideo.Edit.Assets.cshtml @@ -0,0 +1,168 @@ +@using Orchard.Azure.MediaServices +@using Orchard.Azure.MediaServices.Helpers +@using Orchard.Azure.MediaServices.Models +@using Orchard.Azure.MediaServices.Models.Assets + +@{ + Style.Include("cloudmedia-edit-assets.css", "cloudmedia-edit-assets.min.css"); + Style.Include("cloudmedia-progress.css", "cloudmedia-progress.min.css"); + + Script.Require("ShapesBase"); + Script.Require("JQuery"); + Script.Include("cloudmedia-admin-common.js"); + + var cloudVideoPart = (CloudVideoPart)Model.CloudVideoPart; + var isCreatingItem = cloudVideoPart == null || cloudVideoPart.Id == 0; + var assets = cloudVideoPart != null ? cloudVideoPart.Assets.Where(x => x.PublishState.Status != AssetPublishStatus.Removed).ToArray() : Enumerable.Empty(); + var hasManageCloudMediaPermission = AuthorizedFor(Permissions.ManageCloudMediaContent); +} + +@helper MainFileUrl(Asset asset, Func mainFileUrl, string linkText) { + if (!String.IsNullOrEmpty(mainFileUrl(asset))) { + @T(linkText) + } +} + +@helper ManifestUrls(DynamicVideoAsset asset, Func videoUrl, Func onDemandLocatorUrl, Func smoothStreamingLocatorUrl, Func hlsLocatorUrl, Func mpegDashLocatorUrl) { + if (!String.IsNullOrEmpty(onDemandLocatorUrl(asset))) { + @MainFileUrl(asset, videoUrl, "First video file")
+ @T("Manifest (Smooth Streaming)")
+ @T("Manifest (HLS)")
+ @T("Manifest (MPEG DASH)") + } +} + +@helper AssetActions(Asset asset, bool hasManageCloudMediaPermission) { + if (hasManageCloudMediaPermission) { + Edit + @T("Delete") + } +} + +@helper AssetLink(Asset asset, bool hasManageCloudMediaPermission) { + if (hasManageCloudMediaPermission) { + var assetName = !String.IsNullOrWhiteSpace(asset.Name) ? asset.Name : "(untitled)"; + @assetName + } +} + +@helper UploadStatus(Asset asset) { + if (asset.UploadState.Status == AssetUploadStatus.Uploading) { + var percentComplete = Convert.ToInt32(asset.UploadState.PercentComplete.GetValueOrDefault()); + + @String.Format("Uploading ({0}%)...", percentComplete) + +
+
+
+ } + else { + @T(asset.UploadState.Status.ToString()) + } +} + +@if (!assets.Any()) { +

@T("There are no assets to display.")

+} +else if (!isCreatingItem) { + var mezzanineAsset = cloudVideoPart.MezzanineAsset; + var videoAssets = assets.Filter().Where(asset => !(asset is DynamicVideoAsset)).ToArray(); + var dynamicVideoAssets = assets.Filter().ToArray(); + var thumbnailAssets = assets.Filter().ToArray(); + var subtitleAssets = assets.Filter().ToArray(); +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + @if (videoAssets.Any()) { + foreach (var asset in videoAssets) { + + + + + + + + + + } + } + @if (dynamicVideoAssets.Any()) { + + + + + foreach (var asset in dynamicVideoAssets) { + + + + + + + + + + } + } + @if (thumbnailAssets.Any()) { + + + + + foreach (var asset in thumbnailAssets) { + + + + + + + + + + } + } + @if (subtitleAssets.Any()) { + + + + + foreach (var asset in subtitleAssets) { + + + + + + + + + + } + } + +
@T("Name")@T("Private")@T("Public")@T("Include In Player")@T("Media Query")@T("Upload Status")@T("Actions")

@T("Video Assets")

@mezzanineAsset.Name@MainFileUrl(mezzanineAsset, a => a.PrivateMainFileUrl, "Video file")@MainFileUrl(mezzanineAsset, a => a.PublicMainFileUrl, "Video file")@T(false.ToYesNo())@UploadStatus(mezzanineAsset)
@AssetLink(asset, hasManageCloudMediaPermission)@MainFileUrl(asset, a => a.PrivateMainFileUrl, "Video file")@MainFileUrl(asset, a => a.PublicMainFileUrl, "Video file")@T(asset.IncludeInPlayer.ToYesNo())@asset.MediaQuery@UploadStatus(asset)@AssetActions(asset, hasManageCloudMediaPermission)

@T("Dynamic Video Assets")

@AssetLink(asset, hasManageCloudMediaPermission)@ManifestUrls(asset, a => a.PrivateMainFileUrl, a => a.WamsPrivateOnDemandLocatorUrl, a => a.PrivateSmoothStreamingUrl, a => a.PrivateHlsUrl, a => a.PrivateMpegDashUrl)@ManifestUrls(asset, a => a.PublicMainFileUrl, a => a.WamsPublicOnDemandLocatorUrl, a => a.PublicSmoothStreamingUrl, a => a.PublicHlsUrl, a => a.PublicMpegDashUrl)@T(asset.IncludeInPlayer.ToYesNo())@asset.MediaQuery@UploadStatus(asset)@AssetActions(asset, hasManageCloudMediaPermission)

@T("Thumbnails")

@AssetLink(asset, hasManageCloudMediaPermission)@MainFileUrl(asset, a => a.PrivateMainFileUrl, "Image file")@MainFileUrl(asset, a => a.PublicMainFileUrl, "Image file")@T(asset.IncludeInPlayer.ToYesNo())@asset.MediaQuery@UploadStatus(asset)@AssetActions(asset, hasManageCloudMediaPermission)

@T("Subtitles")

@AssetLink(asset, hasManageCloudMediaPermission)@MainFileUrl(asset, a => a.PrivateMainFileUrl, "Subtitle file")@MainFileUrl(asset, a => a.PublicMainFileUrl, "Subtitle file")@T(asset.IncludeInPlayer.ToYesNo())@asset.MediaQuery@UploadStatus(asset)@AssetActions(asset, hasManageCloudMediaPermission)
+
+} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideo.Edit.Jobs.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideo.Edit.Jobs.cshtml new file mode 100644 index 000000000..d3dce489d --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideo.Edit.Jobs.cshtml @@ -0,0 +1,96 @@ +@using Orchard.Azure.MediaServices +@using Orchard.Azure.MediaServices.Models +@using Orchard.Azure.MediaServices.Models.Assets +@using Orchard.Azure.MediaServices.Models.Jobs +@using Orchard.Localization.Services +@{ + Style.Include("cloudmedia-edit-jobs.css", "cloudmedia-edit-jobs.min.css"); + Style.Include("cloudmedia-progress.css", "cloudmedia-progress.min.css"); + Script.Require("ShapesBase"); + + var cloudVideoPart = (CloudVideoPart)Model.CloudVideoPart; + var isCreatingItem = cloudVideoPart == null || cloudVideoPart.Id == 0 || cloudVideoPart.MezzanineAsset == null; + var isUploaded = !isCreatingItem && cloudVideoPart.MezzanineAsset.UploadState.Status == AssetUploadStatus.Uploaded; + var jobsToDisplay = cloudVideoPart != null ? cloudVideoPart.Jobs.Where(x => x.Status != JobStatus.Archived).ToArray() : Enumerable.Empty(); + var authorizedToManageJobs = AuthorizedFor(Permissions.ManageCloudMediaJobs); + var dateTimeFormatProvider = WorkContext.Resolve(); +} +@helper ShortDateTime(DateTime? value, IDateTimeFormatProvider dateTimeFormatProvider) { + if (value != null) { + @Display.DateTime(DateTimeUtc: value, CustomFormat: T(dateTimeFormatProvider.ShortDateTimeFormat)) + } +} +@if (!isCreatingItem && jobsToDisplay.Any()) { +
+ @T("Jobs") + + + + + + + + + + + + + + + @foreach (var job in jobsToDisplay) { + + + + + + + + + + + + } + +
@T("Name")@T("Description")@T("Created")@T("Status")@T("Started")@T("Finished")@T("Error")@T("Actions")
@job.Name@job.Description@ShortDateTime(job.CreatedUtc, dateTimeFormatProvider) + @if (job.Status == JobStatus.Processing) { + var percentComplete = Convert.ToInt32(job.PercentComplete); + + @String.Format("Processing ({0}%)...", percentComplete) + +
+
+
+ } + else { + @T(job.Status.ToString()) + } +
@ShortDateTime(job.StartedUtc, dateTimeFormatProvider)@ShortDateTime(job.FinishedUtc, dateTimeFormatProvider)@job.ErrorMessage + @if (authorizedToManageJobs) { + if (job.CanArchive) { + @Html.ActionLink(T("Archive").ToString(), "Archive", "Job", new { job.Record.Id, Area = "Orchard.Azure.MediaServices" }, new { itemprop = "UnsafeUrl RemoveUrl" }) + } + if (job.CanCancel) { + @Html.ActionLink(T("Cancel").ToString(), "Cancel", "Job", new { job.Record.Id, Area = "Orchard.Azure.MediaServices" }, new { itemprop = "UnsafeUrl RemoveUrl" }) + } + } +
+
+} +@{ + var canCreateJobs = !isCreatingItem && isUploaded; + var href = canCreateJobs ? Url.Action("Create", "Job", new RouteValueDictionary(new { cloudVideoPart.Id, Area = "Orchard.Azure.MediaServices" })) : "#"; + var htmlAttributes = new Dictionary() { + { "id", "create-link" }, + { "class", "button grey" } + }; +} +@if (authorizedToManageJobs) { + if (!canCreateJobs) { +

@T("Jobs can be created once the mezzanine video asset has finished uploaded and the cloud video item has been saved.")

+ } + else { +
+ @Html.Link(T("Create Job").Text, href, htmlAttributes) +
+ } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideo.Edit.UnpublishButton.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideo.Edit.UnpublishButton.cshtml new file mode 100644 index 000000000..c7b5de6a2 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideo.Edit.UnpublishButton.cshtml @@ -0,0 +1,8 @@ +@using Orchard.ContentManagement; +@using Orchard.Core.Contents; + +@if (Authorizer.Authorize(Permissions.PublishContent, (IContent)Model.ContentItem)) { +
+ +
+} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideoEditor.Direct.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideoEditor.Direct.cshtml new file mode 100644 index 000000000..776f3b2ab --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideoEditor.Direct.cshtml @@ -0,0 +1,99 @@ +@using Orchard.Azure.MediaServices.ViewModels.Media +@using Orchard.Localization + +@model CloudVideoPartViewModel +@{ + Script.Include("Lib/moment.min.js").AtFoot(); + Script.Include("cloudmedia-edit-cloudvideopart-direct.js").AtFoot(); + var isCreatingItem = Model.Id == 0; +} + +@helper AsyncUpload(string fileUploadName, string prefix, WamsAssetViewModel wamsAssetViewModel, IEnumerable allowedExtensions = null, LocalizedString prompt = null, bool isRequired = false) { + var extensions = allowedExtensions != null ? allowedExtensions as IList ?? allowedExtensions.ToArray() : default(IEnumerable); + var acceptFileTypes = extensions != null && extensions.Any() ? String.Format(@"(\.|\/)({0})$", String.Join("|", extensions)) : null; + var wamsAssetFieldName = String.Format("{0}.WamsAssetId", prefix); + +
+ + + + + + @if (wamsAssetViewModel.WamsAssetId == null) { +
+ data-prompt="@prompt" } /> +
+ +
@T("Preparing to upload...")
+
+
+
+
+ + @T("Cancel")
+ +
+
+
@T("Cleaning up...")
+ + if (extensions != null) { + @T("The selected file must have one of the following filename extensions: {0}", String.Join(", ", extensions)) + } + + if (!ViewData.ModelState.IsValidField(wamsAssetFieldName)) { +
@T("You must upload a file.")
+ } + } + else { + @T("Successfully uploaded file '{0}'.", wamsAssetViewModel.FileName) + } + +
+} + +@helper VideoUpload() { +
+ + @AsyncUpload("VideoFile", Html.NameFor(m => m.WamsVideo).ToString(), Model.WamsVideo, Model.AllowedVideoFilenameExtensions, isRequired: true) +
+} + +@helper ThumbnailUpload(string caption) { +
+ + @AsyncUpload("ThumbnailFile", Html.FieldNameFor(m => m.WamsThumbnail), Model.WamsThumbnail, allowedExtensions : null) +
+} + +@helper SubtitleUpload(string caption) { +
+ + @if (Model.SubtitleLanguages.Any()) { + @AsyncUpload("SubtitleFile", Html.FieldNameFor(m => m.WamsSubtitle), Model.WamsSubtitle) +
+ @Html.Label(T("Subtitle language").Text, new { @class = "subtitle-label" }) + @Html.DropDownListFor(m => m.AddedSubtitleLanguage, Model.SubtitleLanguages.Select((s) => new SelectListItem() { Text = s, Value = s }), new { @class = "subtitle-select" }) +
+ } + else { + @T("Subtitle assets already exist for all configured subtitle languages. No additional subtitle files can be uploaded.") + } +
+} + +
+ @if (isCreatingItem) { + @Html.HiddenFor(m => m.Id) + @VideoUpload() + @ThumbnailUpload("Thumbnail file") + @SubtitleUpload("Subtitle file") + } + else { + @ThumbnailUpload("Add another thumbnail file") + @SubtitleUpload("Add another subtitle file") + } +
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideoEditor.Proxied.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideoEditor.Proxied.cshtml new file mode 100644 index 000000000..a1a36ddfa --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideoEditor.Proxied.cshtml @@ -0,0 +1,73 @@ +@using Orchard.Azure.MediaServices.ViewModels.Media +@model CloudVideoPartViewModel +@{ + Script.Include("cloudmedia-edit-cloudvideopart-proxied.js"); + var isCreatingItem = Model.Id == 0; +} + +@helper AsyncUpload(string fileUploadName, string prefix, string caption, TemporaryFileViewModel tempFileViewModel, IEnumerable allowedExtensions) { + var extensions = allowedExtensions as IList ?? allowedExtensions.ToArray(); + var acceptFileTypes = allowedExtensions != null && extensions.Any() ? String.Format(@"(\.|\/)({0})$", String.Join("|", extensions)) : null; +
+ + + + + @if (String.IsNullOrWhiteSpace(tempFileViewModel.TemporaryFileName)) { + +
+
+
+ + @T("The selected file must have one of the following filename extensions: {0}", String.Join(", ", extensions)) + @T("Cancel") + } + else { + @T("Successfully uploaded video file '{0}'.", tempFileViewModel.OriginalFileName) + } +
+} + +@helper SyncUpload(string fileUploadName) { + +} + +@helper ThumbnailUpload(string caption) { +
+ + +
+} + +@helper SubtitleUpload(string caption) { +
+ + @if (Model.SubtitleLanguages.Any()) { + @SyncUpload("SubtitleFile.Proxied") +
+ @Html.Label(T("Subtitle language").Text, new { @class = "subtitle-label" }) + @Html.DropDownListFor(m => m.AddedSubtitleLanguage, Model.SubtitleLanguages.Select((s) => new SelectListItem() { Text = s, Value = s }), new { @class = "subtitle-select" }) +
+ } + else { + @T("Subtitle assets already exist for all configured subtitle languages. No additional subtitle files can be uploaded.") + } +
+} + +
+ @if (isCreatingItem) { +
+ @Html.HiddenFor(m => m.Id) + @AsyncUpload("OriginalVideoFile", Html.NameFor(m => m.TemporaryVideoFile).ToString(), "Original video file", Model.TemporaryVideoFile, Model.AllowedVideoFilenameExtensions) +
+ @ThumbnailUpload("Thumbnail file") + @SubtitleUpload("Subtitle file") + } + else { + @ThumbnailUpload("Add another thumbnail file") + @SubtitleUpload("Add another subtitle file") + } +
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideoEditor.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideoEditor.cshtml new file mode 100644 index 000000000..96789d18e --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideoEditor.cshtml @@ -0,0 +1,12 @@ +@{ + Style.Include("dialog-mode.css"); + Style.Include("orchard-medialibrary-admin.css"); + Style.Include("orchard-mediaproviders-admin.css"); + Html.AddPageClassNames("media-library-modal-window"); +} +@Html.ValidationSummary() +@using (Html.BeginFormAntiForgeryPost(Url.Action((string)Request.RequestContext.RouteData.Values["action"], new { folderPath = (string)Model.FolderPath }), FormMethod.Post, new { enctype = "multipart/form-data" })) { +
+ @Display(Model.Editor) +
+} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideoPlayer.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideoPlayer.cshtml new file mode 100644 index 000000000..61ac3cfe9 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/CloudVideoPlayer.cshtml @@ -0,0 +1,42 @@ +@using Orchard.ContentManagement +@using Orchard.MediaLibrary.Models +@using Orchard.Azure.MediaServices.Models; +@{ + Style.Include("cloudmedia-videoplayer.css", "cloudmedia-videoplayer.min.css"); + + Script.Require("JQuery").AtFoot(); + Script.Include("Lib/swfobject.js").AtFoot(); + Script.Include("Lib/dash.all.js").AtFoot(); + Script.Include("Lib/uri.js").AtFoot(); + Script.Include("Lib/underscore.js", "Lib/underscore.min.js").AtFoot(); + Script.Include("Lib/moment.js", "Lib/moment.min.js").AtFoot(); + Script.Include("Lib/console-shim.js", "Lib/console-shim.min.js").AtFoot(); + Script.Include("cloudmedia-videoplayer-data.js").AtFoot(); + Script.Include("cloudmedia-videoplayer-injectors.js").AtFoot(); + Script.Include("cloudmedia-videoplayer-injectors-smp.js").AtFoot(); + Script.Include("cloudmedia-videoplayer-injectors-dash.js").AtFoot(); + Script.Include("cloudmedia-videoplayer-injectors-html5.js").AtFoot(); + Script.Include("cloudmedia-videoplayer-injectors-alt.js").AtFoot(); + Script.Include("cloudmedia-videoplayer-main.js").AtFoot(); + + CloudVideoPart cloudVideoPart = Model.CloudVideoPart; + var altText = cloudVideoPart.As().AlternateText; + var assetData = Model.AssetData; + var assetDataJson = JsonConvert.SerializeObject(assetData, Formatting.None); + var renderId = Guid.NewGuid().ToString().Replace("-", ""); + var playerWidth = Model.PlayerWidth; // Width (in pixels) of the rendered player. + var playerHeight = Model.PlayerHeight; // Height (in pixels) of the rendered player. + var applyMediaQueries = Model.ApplyMediaQueries; // True to apply media query filtering to the set of assets, otherwise false. + var autoPlay = Model.AutoPlay; // True to start playing the video automatically, otherwise false. +} +
+
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/Asset.Edit.General.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/Asset.Edit.General.cshtml new file mode 100644 index 000000000..6f269d376 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/Asset.Edit.General.cshtml @@ -0,0 +1,19 @@ +@model Orchard.Azure.MediaServices.ViewModels.Media.AssetViewModel +
+
+ @Html.LabelFor(m => m.Name, T("Name")) + @Html.TextBoxFor(m => m.Name, new { @class = "text large" }) +
+
+ @Html.LabelFor(m => m.Description, T("Description")) + @Html.TextAreaFor(m => m.Description, new { @class = "text large" }) +
+
+ @Html.CheckBoxFor(m => m.IncludeInPlayer) + @Html.LabelFor(m => m.IncludeInPlayer, T("Include In Player").ToString(), new { @class = "forcheckbox" }) +
+
+ @Html.LabelFor(m => m.MediaQuery, T("Media Query")) + @Html.TextBoxFor(m => m.MediaQuery, new { @class = "text large" }) +
+
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/Asset.Edit.Locators.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/Asset.Edit.Locators.cshtml new file mode 100644 index 000000000..ecf4139cf --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/Asset.Edit.Locators.cshtml @@ -0,0 +1,24 @@ +@model Orchard.Azure.MediaServices.ViewModels.Media.AssetViewModel +@{ + var locators = Model.Asset.GetDisplayLocators(); +} +
+ + + + + + + + + + @foreach (var locator in locators) { + + + + + + } + +
@T("Type")@T("Id")@T("Url")
@T(locator.Name)@locator.Id@locator.Url
+
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/Assets/Thumbnail.Preview.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/Assets/Thumbnail.Preview.cshtml new file mode 100644 index 000000000..6391874fb --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/Assets/Thumbnail.Preview.cshtml @@ -0,0 +1,6 @@ +@model Orchard.Azure.MediaServices.Models.Assets.ThumbnailAsset +
+
+ +
+
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/Assets/Video.Files.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/Assets/Video.Files.cshtml new file mode 100644 index 000000000..8d590823f --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/Assets/Video.Files.cshtml @@ -0,0 +1,72 @@ +@using Orchard.Azure.MediaServices.Helpers +@model Orchard.Azure.MediaServices.Models.Assets.VideoAsset +@{ + Style.Include("Lib/JsTree/themes/default/style.css", "Lib/JsTree/themes/default/style.min.css"); + Script.Require("jQuery"); + Script.Include("lib/jstree.js", "lib/jstree.min.js"); + Script.Include("cloudmedia-edit-asset-video.js"); +} +@if (Model.EncoderMetadata != null && Model.EncoderMetadata.AssetFiles.Any()) { +
+ + @T("Asset Files") + @T("Expand All")@T(" | ") + @T("Collapse All") + + +
+
    + @foreach (var assetFile in Model.EncoderMetadata.AssetFiles) { +
  • + @assetFile.Name +
      +
    • @T("Mime Type: {0}", assetFile.MimeType)
    • +
    • @T("Public Url", assetFile.PublicUrl)
    • +
    • @T("Private Url", assetFile.PrivateUrl)
    • +
    • @T(String.Format(new FileSizeFormatProvider(), "Size: {0:fs}", assetFile.Size))
    • +
    • @T("Duration: {0}", assetFile.Duration.ToString(@"hh\:mm\:ss"))
    • +
    • + @T("Video Tracks") +
        + @foreach (var track in assetFile.VideoTracks) { +
      • + @T("Track {0}", track.Index) +
          +
        • @T("Bitrate: {0} kbps", track.Bitrate)
        • +
        • @T("Target Bitrate: {0} kbps", track.TargetBitrate)
        • +
        • @T("Framerate: {0}", track.Framerate)
        • +
        • @T("Target Framerate: {0}", track.TargetFramerate)
        • +
        • @T("Width: {0}px", track.Width)
        • +
        • @T("Height: {0}px", track.Height)
        • +
        • @T("Display Aspect Ratio: {0}x{1}", Math.Round(track.DisplayAspectRatioX, 2), Math.Round(track.DisplayAspectRatioY, 2))
        • +
        • @T("FourCC: {0}", track.FourCc)
        • +
        +
      • + } +
      +
    • +
    • + @T("Audio Tracks") +
        + @foreach (var track in assetFile.AudioTracks) { +
      • + @T("Track {0}", track.Index) +
          +
        • @T("Bitrate: {0} kbps", track.Bitrate)
        • +
        • @T("Codec: {0}", track.Codec)
        • +
        • @T("Bits Per Sample: {0}", track.BitsPerSample)
        • +
        • @T("Sampling Rate: {0}", track.SamplingRate)
        • +
        • @T("Channels: {0}", track.Channels)
        • +
        • @T("Encoder Version: {0}", track.EncoderVersion)
        • +
        +
      • + } +
      +
    • +
    +
  • + } +
+
+
+} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/Assets/Video.Preview.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/Assets/Video.Preview.cshtml new file mode 100644 index 000000000..12fdb6245 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/Assets/Video.Preview.cshtml @@ -0,0 +1,14 @@ +@model Orchard.Azure.MediaServices.Models.Assets.VideoAsset +
+
+ @Display.CloudVideoPlayer( + CloudVideoPart: Model.VideoPart, + AssetId: Model.Record.Id, + IgnoreIncludeInPlayer: true, + AllowPrivateUrls: true, + PlayerWidth: 500, + PlayerHeight: 400, + ApplyMediaQueries: false, + AutoPlay: false) +
+
diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/EncodingSettingsViewModel.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/EncodingSettingsViewModel.cshtml new file mode 100644 index 000000000..ba85e1094 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/EncodingSettingsViewModel.cshtml @@ -0,0 +1,39 @@ +@model Orchard.Azure.MediaServices.ViewModels.Settings.EncodingSettingsViewModel +@using (Script.Head()) { + +} + +

+ For information about which encoding presets are supported by Windows Azure Media Services please see http://msdn.microsoft.com/en-us/library/windowsazure/jj129582.aspx. +

+ +
+ @T("Encoding presets") + + + + + + + + + + + + + + + + + + + + + + + +
@T("Default")@T("Name")
@T("Delete")
Add new
+
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/EncryptionSettingsViewModel.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/EncryptionSettingsViewModel.cshtml new file mode 100644 index 000000000..6a772e7ed --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/EncryptionSettingsViewModel.cshtml @@ -0,0 +1,12 @@ +@model Orchard.Azure.MediaServices.ViewModels.Settings.EncryptionSettingsViewModel +
+ @T("Encryption settings") +
+ @Html.LabelFor(m => m.KeySeedValue, T("Key seed value")) + @Html.TextBoxFor(m => m.KeySeedValue, new { @class = "text large" }) +
+
+ @Html.LabelFor(m => m.LicenseAcquisitionUrl, T("License acquisition URL")) + @Html.TextBoxFor(m => m.LicenseAcquisitionUrl, new { @class = "text large" }) +
+
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/GeneralSettingsViewModel.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/GeneralSettingsViewModel.cshtml new file mode 100644 index 000000000..22cba6395 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/GeneralSettingsViewModel.cshtml @@ -0,0 +1,54 @@ +@model Orchard.Azure.MediaServices.ViewModels.Settings.GeneralSettingsViewModel + +
+ @T("Account credentials") +

@T("The account name and access key for your Windows Azure Media Services account can be obtained from the Windows Azure management portal at https://manage.windowsazure.com.")

+

@T("If you do not yet have a Windows Azure subscription, visit http://www.windowsazure.com/pricing/free-trial to sign up for a free trial or buy a subscription.")

+
+ + @Html.TextBoxFor(m => m.WamsAccountName, new { @class = "text medium" }) + @Html.ValidationMessageFor(m => m.WamsAccountName) +
+
+ + @Html.TextBoxFor(m => m.WamsAccountKey, new { @class = "text medium" }) + @Html.ValidationMessageFor(m => m.WamsAccountKey) +
+
+ + @Html.TextBoxFor(m => m.StorageAccountKey, new { @class = "text medium" }) + @Html.ValidationMessageFor(m => m.StorageAccountKey) +

@T("Specify the account key for the underlying Windows Azure Storage account used by your Windows Azure Media Services instance if you want to automatically enable CORS support with the appropriate origin URLs for this web site. Enabling CORS support in your Windows Azure Storage account is required for uploading media files directly to Windows Azure Media Services. If you leave this field blank you will have to manually enable the appropriate CORS support for your Windows Azure Storage account using PowerShell.")

+
+ +
+ +
+ @T("Dynamic packaging") +
+ @Html.CheckBoxFor(m => m.EnableDynamicPackaging) + @Html.ValidationMessageFor(m => m.EnableDynamicPackaging) +
+

@T("When checked, dynamic packaging assets will be created when encoding using one of the supported encoding presets for dynamic packaging.")

+

@T("NOTE: When enabling dynamic packaging you must ensure you have at least one unit of reserved capacity configured on your streaming origin.")

+
+ +
+ @T("Access policy") +
+ + @Html.TextBoxFor(m => m.AccessPolicyDuration, new { @class = "text medium" }) + @Html.ValidationMessageFor(m => m.AccessPolicyDuration) +

@T("The duration for all access policies created for asset locators, in standard TimeSpan format (dd.hh:mm:ss).")

+
+
+ +
+ @T("Filename extensions") +

@T("Configure the allowed filename extensions when uploading asset files. Specify extensions as a semicolon-separated list without any * or period, e.g. \"mp4;wma;mpeg\".")

+
+ + @Html.TextBoxFor(m => m.AllowedVideoFilenameExtensions, new { @class = "text medium" }) + @Html.ValidationMessageFor(m => m.AllowedVideoFilenameExtensions) +
+
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/Parts/CloudVideo.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/Parts/CloudVideo.cshtml new file mode 100644 index 000000000..c256be62b --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/Parts/CloudVideo.cshtml @@ -0,0 +1,58 @@ +@using Orchard.Azure.MediaServices.Helpers +@using Orchard.Azure.MediaServices.Models.Assets +@using Orchard.Azure.MediaServices.ViewModels.Media +@model CloudVideoPartViewModel +@{ + var isCreatingItem = Model.Id == 0; + + Style.Require("jQueryUI_Orchard"); + Style.Require("FontAwesome"); + Style.Include("cloudmedia-edit-cloudvideopart.css", "cloudmedia-edit-cloudvideopart.min.css"); + Style.Include("cloudmedia-tabs.css", "cloudmedia-tabs.min.css"); + Style.Include("cloudmedia-progress.css", "cloudmedia-progress.min.css"); + + Script.Require("jQuery"); + Script.Require("jQueryUI"); + Script.Require("jQueryUI_Tabs"); + Script.Require("ShapesBase"); + Script.Include("Lib/jquery.blockui.js"); + Script.Include("Lib/jquery.fileupload.js"); + Script.Include("Lib/jquery.fileupload-process.js"); + Script.Include("Lib/jquery.fileupload-validate.js"); + Script.Include("cloudmedia-autorefresh.js"); + Script.Include("cloudmedia-edit-cloudvideopart.js"); +} +
+ +
+ @{ + Html.RenderPartial("CloudVideoEditor.Direct"); + Html.RenderPartial("CloudVideoEditor.Proxied"); + } +
+
0) { data-refresh-url="@Url.Action("AssetsTable", "Job", new { Model.Part.Id, Area = "Orchard.Azure.MediaServices" })" }> + @Display.CloudVideo_Edit_Assets(CloudVideoPart: Model.Part) +
+
0) { data-refresh-url="@Url.Action("JobsTable", "Job", new { Model.Part.Id, Area = "Orchard.Azure.MediaServices" })" }> + @Display.CloudVideo_Edit_Jobs(CloudVideoPart: Model.Part) +
+
+ @Display.CloudVideoPlayer( + CloudVideoPart: Model.Part, + AssetId: null, + IgnoreIncludeInPlayer: false, + AllowPrivateUrls: true, + PlayerWidth: 400, + PlayerHeight: 300, + ApplyMediaQueries: true, + AutoPlay: false) + @if (!Model.Part.Assets.Filter().Any()) { +
@T("No video assets exist on this cloud video item other than the mezzanine. Mezzanine assets are not supported for preview or playback. To create additional video assets, start an encoding job.")
+ } +
+
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/SubtitleLanguagesSettingsViewModel.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/SubtitleLanguagesSettingsViewModel.cshtml new file mode 100644 index 000000000..04c9747e4 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/SubtitleLanguagesSettingsViewModel.cshtml @@ -0,0 +1,34 @@ +@model Orchard.Azure.MediaServices.ViewModels.Settings.SubtitleLanguagesSettingsViewModel +@using (Script.Head()) { + +} + +

+ Subtitle languages are configured with their respective .NET culture code, e.g. "en-US" or "sv-SE". +

+ +
+ @T("Subtitle languages") + + + + + + + + + + + + + + + + + + + +
@T("Culture code")
@T("Delete")
Add new
+
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/TaskSettings/Encode.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/TaskSettings/Encode.cshtml new file mode 100644 index 000000000..41ada25cf --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/TaskSettings/Encode.cshtml @@ -0,0 +1,29 @@ +@using Orchard.ContentManagement +@using Orchard.Azure.MediaServices.Models + +@model Orchard.Azure.MediaServices.ViewModels.Tasks.EncodeViewModel + +@{ + var settings = WorkContext.CurrentSite.As(); +} + +
+ @if (settings.WamsEncodingPresets.Any()) { +
+ + @Html.DropDownListFor(m => m.SelectedEncodingPreset, new SelectList(Model.EncodingPresets)) + @Html.ValidationMessageFor(m => m.SelectedEncodingPreset) +
+ if (settings.EnableDynamicPackaging) { +

+ NOTE: Dynamic packaging is enabled in the Windows Azure Media settings. To enable dynamic packaging for the output video asset, you must use one of the H264-based encoding presets. +

+ } + } + else { +

+ An encoding task cannot be executed because there are no configured encoding presets. +

+ } +
+ diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/TaskSettings/Encrypt.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/TaskSettings/Encrypt.cshtml new file mode 100644 index 000000000..011485523 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/TaskSettings/Encrypt.cshtml @@ -0,0 +1,48 @@ +@model Orchard.Azure.MediaServices.ViewModels.Tasks.EncryptViewModel +
+
+ @Html.CheckBoxFor(m => m.AdjustSubSamples) + @Html.LabelFor(m => m.AdjustSubSamples, T("Adjust Sub Samples").ToString(), new { @class = "forcheckbox" }) + @T("When encrypting subsamples on H.264 tracks, adjusts the clear space at the beginning of each subsample so that a whole number of encryption blocks is used. This leaves slightly more of the sample data unencrypted but maximizes player compatibility.") +
+
+ @Html.LabelFor(m => m.ContentKey, T("Content Key")) + @Html.TextBoxFor(m => m.ContentKey, new { @class = "text large" }) + @T("A base64-encoded 16-byte value, which is produced by the key seed in conjunction with the key ID and is used to encrypt content. You must enter a content key value if no key seed value is specified.") +
+
+ @Html.LabelFor(m => m.CustomAttributes, T("Custom Attributes")) + @Html.TextBoxFor(m => m.CustomAttributes, new { @class = "text large" }) + @T("A comma-delimited list of name:value pairs (in the form name1:value1,name2:value2,name3:value3) to be included in the CUSTOMATTRIBUTES section of the WRM header. The WRM header is XML metadata added to encrypted content and included in the client manifest. It is also included in license challenges made to license servers.") +
+
+ @Html.LabelFor(m => m.DataFormats, T("Data Formats")) + @Html.TextBoxFor(m => m.DataFormats, new { @class = "text large" }) + @T("A comma-delimited list of four-character codes (FourCCs) that specify the data formats to be encrypted. If no value is specified, all data formats are encrypted.") +
+
+ @Html.LabelFor(m => m.KeyId, T("Key ID")) + @Html.TextBoxFor(m => m.KeyId, new { @class = "text large" }) + @T("A globally unique identifier (GUID) that uniquely identifies content for the purposes of licensing. Each presentation should use a unique value. If no value is specified, a random value is used.") +
+
+ @Html.LabelFor(m => m.KeySeedValue, T("Key Seed Value")) + @Html.TextBoxFor(m => m.KeySeedValue, new { @class = "text large" }) + @T("A base64-encoded 30-byte value, which is used in conjunction with the key ID to create the content key. Typically, one key seed is used with many key IDs to protect multiple files or sets of files; for example, all files issued by a license server or perhaps all files by a particular artist. Key seeds are stored on license servers.") +
+
+ @Html.LabelFor(m => m.LicenseAcquisitionUrl, T("License Acquisition URL")) + @Html.TextBoxFor(m => m.LicenseAcquisitionUrl, new { @class = "text large" }) + @T("The Web page address on a license server from which clients can obtain a license to play the encrypted content.") +
+
+ @Html.CheckBoxFor(m => m.UseSencBox) + @Html.LabelFor(m => m.UseSencBox, T("Use Senc Box").ToString(), new { @class = "forcheckbox" }) + @T("Use a 'senc' box to hold encryption metadata instead of a Protected Interoperable File Format (PIFF) 1.1 'uuid' box.") +
+
+ @Html.LabelFor(m => m.ServiceId, T("Service ID")) + @Html.TextBoxFor(m => m.ServiceId, new { @class = "text large" }) + @T("The service ID to include in the PlayReady header that is added to each file and in the client manifest (.ismc). This value must be a globally unique identifier (GUID) in Little Endian string form (like this 237A4EB1-9D01-4F4A-A2D2-79E51468014D).") +
+
diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/TaskSettings/Thumbnail.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/TaskSettings/Thumbnail.cshtml new file mode 100644 index 000000000..2479e10a3 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/EditorTemplates/TaskSettings/Thumbnail.cshtml @@ -0,0 +1,50 @@ +@model Orchard.Azure.MediaServices.ViewModels.Tasks.CreateThumbnailViewModel +@{ + var imageTypes = new[] {"MemoryBMP", "Bmp", "Emf", "Wmf", "Gif", "Jpeg", "Png", "Tiff", "Exif", "Icon"}; + var imageTypeOptions = imageTypes.Select(x => new SelectListItem {Text = x, Value = x, Selected = Model.Type == x}); +} +
+ @T("Thumbnail") +
+ @Html.LabelFor(m => m.Width) + @Html.TextBoxFor(m => m.Width, new { @class = "text small" }) + @T("Sets the width in pixels to be used for the thumbnail. An asterisk (*) character used in place of a width in pixels means to maintain aspect ratio based on the height of the first video source stream.") + @Html.ValidationMessageFor(m => m.Width) +
+
+ @Html.LabelFor(m => m.Height) + @Html.TextBoxFor(m => m.Height, new { @class = "text small" }) + @T("Sets the height in pixels to be used for the thumbnail. An asterisk (*) character used in place of a height in pixels means to maintain aspect ratio based on the width of the first video source stream.") + @Html.ValidationMessageFor(m => m.Height) +
+
+ @Html.LabelFor(m => m.Type) + @Html.DropDownListFor(m => m.Type, imageTypeOptions) + @T("Indicates the image format type of the output file.") + @Html.ValidationMessageFor(m => m.Type) +
+
+ @Html.LabelFor(m => m.FileName) + @Html.TextBoxFor(m => m.FileName, new { @class = "text large" }) + @T("Specifies the file name of the generated thumbnail image. The following replaceable fields can be used: {OriginalFilename}, {ThumbnailTime}, {Size}, {ThumbnailIndex}, {DefaultExtension}.") + @Html.ValidationMessageFor(m => m.FileName) +
+
+ @Html.LabelFor(m => m.StartTime) + @Html.TextBoxFor(m => m.StartTime, new { @class = "text small" }) + @T("A string value that indicates the start time in a video that will correspond with a sequence of thumbnails generated from the video. If no step is specified, this value is the sole time on which a generated thumbnail is based. The format of the string for the time value is: [hours]:[minutes]:[seconds].") + @Html.ValidationMessageFor(m => m.StartTime) +
+
+ @Html.LabelFor(m => m.Step) + @Html.TextBoxFor(m => m.Step, new { @class = "text small" }) + @T("A string value that describes the time increments in a video at which thumbnail images will be generated, if generating a sequence of thumbnails. The format of the string for the time value is: [hours]:[minutes]:[seconds].") + @Html.ValidationMessageFor(m => m.Step) +
+
+ @Html.LabelFor(m => m.StopTime) + @Html.TextBoxFor(m => m.StopTime, new { @class = "text small" }) + @T("A string value that describes the end point in a video, if generating a sequence of thumbnails. The format of the string for the time value is: [hours]:[minutes]:[seconds].") + @Html.ValidationMessageFor(m => m.StopTime) +
+
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/FrameBuster.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/FrameBuster.cshtml new file mode 100644 index 000000000..41eb3b81c --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/FrameBuster.cshtml @@ -0,0 +1,7 @@ +@using (Script.Head()) { + +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Job/Create.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Job/Create.cshtml new file mode 100644 index 000000000..8de75c7f2 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Job/Create.cshtml @@ -0,0 +1,69 @@ +@using Orchard.Azure.MediaServices.Models +@using Orchard.Azure.MediaServices.Models.Assets +@using Orchard.Azure.MediaServices.Services.Tasks +@using Orchard.Azure.MediaServices.ViewModels.Jobs +@{ + Style.Include("cloudmedia-admin-job.css", "cloudmedia-admin-job.min.css"); + Script.Require("JQuery"); + Script.Include("cloudmedia-admin-job.js"); + + var taskProvider = (ITaskProvider)Model.TaskProvider; + var cloudVideoPart = (CloudVideoPart)Model.CloudVideoPart; + var jobViewModel = (JobViewModel)Model.JobViewModel; + + var inputAssetListItemQuery = + from asset in cloudVideoPart.Assets + where asset is MezzanineAsset + select new SelectListItem { + Text = asset.ToString(), + Value = asset.Record.Id.ToString(), + Selected = asset.Record.Id == jobViewModel.SelectedInputAssetId + }; + + Layout.Title = "Create Cloud Job"; +} +@Display.FrameBuster() +

@taskProvider.Description

+@Html.ValidationSummary() +@using (Html.BeginFormAntiForgeryPost()) { +
@* Hidden for now. *@ +
+ @Html.LabelFor(m => jobViewModel.SelectedInputAssetId, T("Input Asset")) + @Html.DropDownListFor(m => jobViewModel.SelectedInputAssetId, inputAssetListItemQuery) + @T("Select the input asset for the job.") +
+
+
+
+ @Html.LabelFor(m => jobViewModel.OutputAssetName, T("Output Asset Name")) + @Html.TextBoxFor(m => jobViewModel.OutputAssetName, new { @class = "text medium" }) + @T("Optional. Specify the name you wish to assign to the output asset. When left blank, the task name will be used.") +
+
+ @Html.LabelFor(m => jobViewModel.OutputAssetDescription, T("Output Asset Description")) + @Html.TextBoxFor(m => jobViewModel.OutputAssetDescription, new { @class = "text large" }) + @T("Optional. Specify a description you wish to assign to the output asset.") +
+
+
+
+ @Html.LabelFor(m => jobViewModel.Name, T("Job Name")) + @Html.TextBoxFor(m => jobViewModel.Name, new { @class = "text medium" }) + @T("Optional. Specify the name of this job. When left blank, the task name will be used.") +
+
+ @Html.LabelFor(m => jobViewModel.Description, T("Job Description")) + @Html.TextBoxFor(m => jobViewModel.Description, new { @class = "text large" }) + @T("Optional. Specify a description for this job.") +
+
+
+ @Display(jobViewModel.TaskEditorShape) +
+
+ @if (taskProvider.CanExecute) { + + } + @T("Cancel") +
+} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Job/Index.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Job/Index.cshtml new file mode 100644 index 000000000..a54f2988b --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Job/Index.cshtml @@ -0,0 +1,9 @@ +@{ + Script.Require("jQuery"); + Script.Include("cloudmedia-autorefresh.js"); +} +@using (Html.BeginFormAntiForgeryPost()) { +
+ @Display(Model) +
+} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Job/SelectTask.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Job/SelectTask.cshtml new file mode 100644 index 000000000..9cf7bee26 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Job/SelectTask.cshtml @@ -0,0 +1,19 @@ +@using Orchard.Azure.MediaServices.Services.Tasks +@{ + Style.Include("cloudmedia-admin-selecttask.css", "cloudmedia-admin-selecttask.min.css"); + + var cloudVideoPartId = (int) Model.CloudVideoPartId; + var taskProviders = (IEnumerable) Model.TaskProviders; + + Layout.Title = "Create Cloud Job"; +} +@Display.FrameBuster() +

@T("Select a Windows Azure Media task to perform")

+
    + @foreach (var provider in taskProviders) { +
  • + @Html.ActionLink(provider.Name, "Create", new { Id = cloudVideoPartId, task = provider.Name })
    + @provider.Description +
  • + } +
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Media-CloudVideo.Thumbnail.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Media-CloudVideo.Thumbnail.cshtml new file mode 100644 index 000000000..68409e68b --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Media-CloudVideo.Thumbnail.cshtml @@ -0,0 +1,23 @@ +@using Orchard.Azure.MediaServices.Models +@using Orchard.ContentManagement +@using Orchard.MediaLibrary.Models +@using Orchard.Utility.Extensions +@{ + var contentItem = (ContentItem)Model.ContentItem; + var media = contentItem.As(); + var video = contentItem.As(); + var thumbnailAsset = video.ThumbnailAsset; + var thumbnailUrl = thumbnailAsset != null ? thumbnailAsset.PrivateMainFileUrl : Url.Content("~/Modules/Orchard.Azure.MediaServices/Images/Thumbnail-Placeholder2.png"); +} + +
+
diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Media/Edit.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Media/Edit.cshtml new file mode 100644 index 000000000..3d3e69017 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Media/Edit.cshtml @@ -0,0 +1,4 @@ +@{ + Layout.Title = "Edit Cloud Video"; +} +@Display.CloudVideoEditor(Type: Model.Type, FolderPath: Model.FolderPath, Editor: Model.Editor) \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Media/Import.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Media/Import.cshtml new file mode 100644 index 000000000..91f0d778f --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Media/Import.cshtml @@ -0,0 +1,4 @@ +@{ + Layout.Title = "Upload Cloud Video"; +} +@Display.CloudVideoEditor(Editor: Model.Editor, FolderPath: Model.FolderPath) \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/OpenJobsTable.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/OpenJobsTable.cshtml new file mode 100644 index 000000000..6e4686619 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/OpenJobsTable.cshtml @@ -0,0 +1,75 @@ +@using Orchard.Azure.MediaServices.Models.Jobs +@using Orchard.Localization.Services +@{ + Style.Include("cloudmedia-progress.css", "cloudmedia-progress.min.css"); + Script.Require("ShapesBase"); + + Layout.Title = "Manage Windows Azure Media Jobs"; + + var jobs = (IEnumerable)Model.Jobs; + var dateTimeFormatProvider = WorkContext.Resolve(); +} +@helper ShortDateTime(DateTime? value, IDateTimeFormatProvider dateTimeFormatProvider) { + if (value != null) { + @Display.DateTime(DateTimeUtc: value, CustomFormat: T(dateTimeFormatProvider.ShortDateTimeFormat)) + } +} + + + + + + + + + + + + + + + + @if (!jobs.Any()) { + + + + } + else { + foreach (var job in jobs) { + + + + + + + + + + + + } + } + +
@T("Name")@T("Description")@T("Cloud Video Item")@T("Created")@T("Status")@T("Started")@T("Finished")@T("Error")@T("Actions")
+

@T("There are no open jobs to display.")

+
@job.Name@job.Description@Html.ItemEditLinkWithReturnUrl(Html.ItemDisplayText(job.CloudVideoPart).ToString(), job.CloudVideoPart)@ShortDateTime(job.CreatedUtc, dateTimeFormatProvider) + @if (job.Status == JobStatus.Processing) { + var percentComplete = Convert.ToInt32(job.PercentComplete); + + @String.Format("Processing ({0}%)...", percentComplete) + +
+
+
+ } + else { + @T(job.Status.ToString()) + } +
@ShortDateTime(job.StartedUtc, dateTimeFormatProvider)@ShortDateTime(job.FinishedUtc, dateTimeFormatProvider)@job.ErrorMessage + @if (job.CanArchive) { + @Html.ActionLink(T("Archive").ToString(), "Archive", "Job", new { job.Record.Id, Area = "Orchard.Azure.MediaServices", ReturnUrl = Url.Action("Index") }, new { itemprop = "UnsafeUrl RemoveUrl" }) + } + @if (job.CanCancel) { + @Html.ActionLink(T("Cancel").ToString(), "Cancel", "Job", new { job.Record.Id, Area = "Orchard.Azure.MediaServices", ReturnUrl = Url.Action("Index") }, new { itemprop = "UnsafeUrl RemoveUrl" }) + } +
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Parts/CloudVideo.Metadata.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Parts/CloudVideo.Metadata.cshtml new file mode 100644 index 000000000..9f0dbc1c4 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Parts/CloudVideo.Metadata.cshtml @@ -0,0 +1,30 @@ +@using Orchard.Azure.MediaServices.Models +@using Orchard.Azure.MediaServices.Models.Assets +@using Orchard.ContentManagement +@{ + var videoPart = (CloudVideoPart)Model.ContentPart; + var activeJobCount = (int)Model.ActiveJobCount; +} +
+
+ @T("Upload Status:") + @videoPart.MezzanineAsset.UploadState.Status +
+
style="display:none;" }> + @T("Upload Progress:") + @T("{0}%", (int)(videoPart.MezzanineAsset.UploadState.PercentComplete.GetValueOrDefault())) +
+ +
+@if (activeJobCount > 0) { +
+ @T("Active Jobs:") + @activeJobCount +
+} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Parts/CloudVideo.Raw.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Parts/CloudVideo.Raw.cshtml new file mode 100644 index 000000000..93da13649 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Parts/CloudVideo.Raw.cshtml @@ -0,0 +1,19 @@ +@using Orchard.Azure.MediaServices.Models +@using Newtonsoft.Json +@{ + var cloudVideoPart = (CloudVideoPart)Model.ContentPart; + var thumbnailAsset = cloudVideoPart.ThumbnailAsset; + var defaultWidth = 600; + var defaultHeight = 400; + var backgroundColor = "#000"; + var posterImageUrl = thumbnailAsset != null ? thumbnailAsset.PrivateMainFileUrl : Url.Content("~/Modules/Microsoft.AzureMedia/Images/Thumbnail-Placeholder2.png"); + var tag = new TagBuilder("div"); + + tag.Attributes["data-player-video-id"] = cloudVideoPart.Id.ToString(); + tag.Attributes["data-player-width"] = defaultWidth.ToString(); + tag.Attributes["data-player-height"] = defaultHeight.ToString(); + tag.Attributes["data-player-apply-media-queries"] = "true"; + tag.Attributes["data-player-auto-play"] = "true"; + tag.Attributes["style"] = String.Format("width: {0}px; height: {1}px; background: {2} url('{3}') center center; -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-size: cover;", defaultWidth, defaultHeight, backgroundColor, posterImageUrl); +} +@Html.Raw(tag.ToString(TagRenderMode.Normal)) \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Parts/CloudVideo.Summary.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Parts/CloudVideo.Summary.cshtml new file mode 100644 index 000000000..d2afe987f --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Parts/CloudVideo.Summary.cshtml @@ -0,0 +1,11 @@ +@* TODO: Perhaps only a thumbnail image and some metadata should be rendered in summary view? *@ +@Display.CloudVideoPlayer( + CloudVideoPart: Model.ContentPart, + AssetId: null, + IgnoreIncludeInPlayer: false, + AllowPrivateUrls: false, + PlayerWidth: 600, + PlayerHeight: 400, + ApplyMediaQueries: true, + AutoPlay: false +) \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Parts/CloudVideo.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Parts/CloudVideo.SummaryAdmin.cshtml new file mode 100644 index 000000000..dd55aa648 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Parts/CloudVideo.SummaryAdmin.cshtml @@ -0,0 +1 @@ +@*Not showing anything for now. *@ \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Parts/CloudVideo.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Parts/CloudVideo.cshtml new file mode 100644 index 000000000..6c5a0ab51 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Parts/CloudVideo.cshtml @@ -0,0 +1,10 @@ +@Display.CloudVideoPlayer( + CloudVideoPart: Model.ContentPart, + AssetId: null, + IgnoreIncludeInPlayer: false, + AllowPrivateUrls: false, + PlayerWidth: 600, + PlayerHeight: 400, + ApplyMediaQueries: true, + AutoPlay: false +) \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Settings/Index.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Settings/Index.cshtml new file mode 100644 index 000000000..01ba9293b --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/Settings/Index.cshtml @@ -0,0 +1,46 @@ +@model Orchard.Azure.MediaServices.ViewModels.Settings.SettingsViewModel + +@{ + Style.Require("jQueryUI_Orchard"); + Style.Require("FontAwesome"); + Style.Include("cloudmedia-admin-settings.css", "cloudmedia-admin-settings.min.css"); + Style.Include("cloudmedia-tabs.css", "cloudmedia-tabs.min.css"); + + Script.Require("JQuery").AtFoot(); + Script.Require("jQueryUI").AtFoot(); + Script.Require("jQueryUI_Tabs").AtFoot(); + Script.Include("~/Modules/Orchard.MediaLibrary/Scripts/knockout-2.3.0.js").AtFoot(); + Script.Include("cloudmedia-admin-settings.js").AtFoot(); + + Layout.Title = T("Windows Azure Media Settings"); +} + +@using (Html.BeginFormAntiForgeryPost()) { + @Html.ValidationSummary() + +
+ + +
+ @Html.EditorFor(m => m.General) +
+
+ @Html.EditorFor(m => m.EncodingSettings) +
+ @*TODO: Encryption is disabled for now. Uncomment when we need it again.*@ + @*
+ @Html.EditorFor(m => m.EncryptionSettings) +
*@ +
+ @Html.EditorFor(m => m.SubtitleLanguages) +
+
+ + +} diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/TaskSettingsEditor.cshtml b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/TaskSettingsEditor.cshtml new file mode 100644 index 000000000..d78b69382 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Views/TaskSettingsEditor.cshtml @@ -0,0 +1,8 @@ +@{ + var model = (object)Model.Model; + var templateName = "EditorTemplates/TaskSettings/" + (string)Model.TemplateName; + var prefix = (string) Model.Prefix; + + ViewData.TemplateInfo.HtmlFieldPrefix = prefix; +} +@Html.Partial(templateName, model) \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Web.config b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Web.config new file mode 100644 index 000000000..6684dcd12 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Web.config @@ -0,0 +1,70 @@ + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Orchard.sln b/src/Orchard.sln index c566817ea..e2d0ae78b 100644 --- a/src/Orchard.sln +++ b/src/Orchard.sln @@ -18,6 +18,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.Web", "Orchard.Web\ {8F116B06-1C0E-4E4C-9A0A-D2FAB851E768} = {8F116B06-1C0E-4E4C-9A0A-D2FAB851E768} {43D0EC0B-1955-4566-8D31-7B9102DA1703} = {43D0EC0B-1955-4566-8D31-7B9102DA1703} {0DFA2E10-96C8-4E05-BC10-B710B97ECCDE} = {0DFA2E10-96C8-4E05-BC10-B710B97ECCDE} + {14A96B1A-9DC9-44C8-A675-206329E15263} = {14A96B1A-9DC9-44C8-A675-206329E15263} {9CD5C81F-5828-4384-8474-2E2BE71D5EDD} = {9CD5C81F-5828-4384-8474-2E2BE71D5EDD} {C0C45321-B51D-4D8D-9B7B-AA4C2E0B2962} = {C0C45321-B51D-4D8D-9B7B-AA4C2E0B2962} {5E5E7A21-C7B2-44D8-8593-2F9541AE041D} = {5E5E7A21-C7B2-44D8-8593-2F9541AE041D} @@ -239,6 +240,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.JobsQueue", "Orchar EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.Caching", "Orchard.Web\Modules\Orchard.Caching\Orchard.Caching.csproj", "{7528BF74-25C7-4ABE-883A-443B4EEC4776}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.Azure.MediaServices", "Orchard.Web\Modules\Orchard.Azure.MediaServices\Orchard.Azure.MediaServices.csproj", "{14A96B1A-9DC9-44C8-A675-206329E15263}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution CodeCoverage|Any CPU = CodeCoverage|Any CPU @@ -997,6 +1000,16 @@ Global {7528BF74-25C7-4ABE-883A-443B4EEC4776}.FxCop|Any CPU.Build.0 = Release|Any CPU {7528BF74-25C7-4ABE-883A-443B4EEC4776}.Release|Any CPU.ActiveCfg = Release|Any CPU {7528BF74-25C7-4ABE-883A-443B4EEC4776}.Release|Any CPU.Build.0 = Release|Any CPU + {14A96B1A-9DC9-44C8-A675-206329E15263}.CodeCoverage|Any CPU.ActiveCfg = Release|Any CPU + {14A96B1A-9DC9-44C8-A675-206329E15263}.CodeCoverage|Any CPU.Build.0 = Release|Any CPU + {14A96B1A-9DC9-44C8-A675-206329E15263}.Coverage|Any CPU.ActiveCfg = Release|Any CPU + {14A96B1A-9DC9-44C8-A675-206329E15263}.Coverage|Any CPU.Build.0 = Release|Any CPU + {14A96B1A-9DC9-44C8-A675-206329E15263}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {14A96B1A-9DC9-44C8-A675-206329E15263}.Debug|Any CPU.Build.0 = Debug|Any CPU + {14A96B1A-9DC9-44C8-A675-206329E15263}.FxCop|Any CPU.ActiveCfg = Release|Any CPU + {14A96B1A-9DC9-44C8-A675-206329E15263}.FxCop|Any CPU.Build.0 = Release|Any CPU + {14A96B1A-9DC9-44C8-A675-206329E15263}.Release|Any CPU.ActiveCfg = Release|Any CPU + {14A96B1A-9DC9-44C8-A675-206329E15263}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1059,6 +1072,7 @@ Global {10AB3CE2-A720-467F-9EC8-EBB4BAC9A1C9} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5} {085948FF-0E9B-4A9A-B564-F8B8B4BDDDBC} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5} {7528BF74-25C7-4ABE-883A-443B4EEC4776} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5} + {14A96B1A-9DC9-44C8-A675-206329E15263} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5} {ABC826D4-2FA1-4F2F-87DE-E6095F653810} = {74E681ED-FECC-4034-B9BD-01B0BB1BDECA} {F112851D-B023-4746-B6B1-8D2E5AD8F7AA} = {74E681ED-FECC-4034-B9BD-01B0BB1BDECA} {6CB3EB30-F725-45C0-9742-42599BA8E8D2} = {74E681ED-FECC-4034-B9BD-01B0BB1BDECA}

@R&?`j+346DCd#^<1(i;H&1JB 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 wT}hw0AocWmQwdP6{wyy + + + + + + + + + + + + diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Content/expressInstall.swf b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Content/expressInstall.swf new file mode 100644 index 0000000000000000000000000000000000000000..0fbf8fca961e6319d84442248f6ba314797dccec GIT binary patch literal 727 zcmV;|0x11MS5pQv1pokeoP|?OPuoBc9Xq5k1WKTQ`wM9VaMwSB_o5%t)!o>)g&X)EAYjgEPLcl5K%kkuIK}@4lZ{BkGMYAU20z( zNRb@8AZ~RNT{i-oQ>63S3q@bamddC&V#&}IBHXmBea0RPhMY!G_6yWA-{&u00bI?EPCUrE(n7GhyT+_4sC3vIfO8o*Hw?~a z;QV28jGXsc=C?Kce^ve?K|~w@>bMSCq>Q(O#T42y^Mv*pwUSN?9aMQms*Ld$rD0~q zQhI{Tv*fb=mqG|Gjsr39Bp7Dejr)q)1J&t=YBY?2Llv85=!N{vRx3=YEoRTjX+)n# zs> _assetDrivers; + + public AssetController( + ITransactionManager transactionManager, + IOrchardServices services, + IAssetManager assetManager, + IWamsClient wamsClient, + Lazy> assetDrivers) { + + _transactionManager = transactionManager; + _services = services; + _assetManager = assetManager; + _wamsClient = wamsClient; + _assetDrivers = assetDrivers; + _notifier = services.Notifier; + _authorizer = services.Authorizer; + + T = NullLocalizer.Instance; + Logger = NullLogger.Instance; + } + + public Localizer T { get; set; } + public ILogger Logger { get; set; } + + [HttpPost] + public async Task GenerateWamsAsset(string fileName) { + var asset = await _wamsClient.CreateAssetAsync(fileName).ConfigureAwait(continueOnCapturedContext: false); + + return Json(new { + sasLocator = asset.SasLocator, + assetId = asset.AssetId + }); + } + + [HttpDelete] + public async Task DeleteWamsAsset(string id) { + var asset = _wamsClient.GetAssetById(id); + await _wamsClient.DeleteAssetAsync(asset).ConfigureAwait(continueOnCapturedContext: false); + return new EmptyResult(); + } + + public JsonResult State(int id) { + var asset = _assetManager.GetAssetById(id); + return Json(new { + uploadState = new { + status = asset.UploadState.Status.ToString(), + percentComplete = (int?)asset.UploadState.PercentComplete, + }, + published = asset.VideoPart != null && asset.VideoPart.IsPublished() // VideoPart can potentially be null here if the user deleted the media item, and an AJAX request was still issued. + }, JsonRequestBehavior.AllowGet); + } + + public ActionResult Edit(int id) { + return Validate(id, asset => { + var viewModel = BuildAssetViewModel(asset, driver => driver.BuildEditor(asset, _services.New)); + return View(viewModel); + }); + + } + + [HttpPost, ActionName("Edit"), FormValueRequired("button.Save")] + public ActionResult EditSave(int id) { + return Validate(id, asset => { + var viewModel = BuildAssetViewModel(asset, driver => driver.UpdateEditor(asset, this, _services.New)); + + if (TryUpdateModel(viewModel, null, null, new[] { "Asset", "SpecializedSettingsShapes" })) { + asset.Name = viewModel.Name.TrimSafe(); + asset.Description = viewModel.Description.TrimSafe(); + asset.IncludeInPlayer = viewModel.IncludeInPlayer; + asset.MediaQuery = viewModel.MediaQuery.TrimSafe(); + } + + if (!ModelState.IsValid) { + _transactionManager.Cancel(); + return View(viewModel); + } + + _notifier.Information(T("The Asset has been saved.")); + return RedirectToAction("Edit", new { id = id }); + }); + } + + [HttpPost, ActionName("Edit"), FormValueRequired("button.Delete")] + public ActionResult EditDelete(int id) { + return Delete(id); + } + + public ActionResult Delete(int id) { + if (!_authorizer.Authorize(Permissions.ManageCloudMediaContent, T("You are not authorized to manage Windows Azure Media content."))) + return new HttpUnauthorizedResult(); + + Logger.Debug("User requested to delete asset with ID {0}.", id); + + var asset = _assetManager.GetAssetById(id); + if (asset == null) { + Logger.Warning("User requested to delete asset with ID {0} but no such asset record exists.", id); + return HttpNotFound(String.Format("No asset with ID {0} was found.", id)); + } + + var cloudVideoPart = asset.VideoPart; + + if (cloudVideoPart.MezzanineAsset.Record.Id == asset.Record.Id) { + Logger.Warning("User requested to delete asset with ID {0} but it is the mezzanine asset and cannot be deleted.", id); + return new HttpStatusCodeResult(HttpStatusCode.Forbidden, String.Format("Asset with ID {0} is the mezzanine asset and cannot be deleted.", id)); + } + + try { + _assetManager.DeleteAsset(asset); + + Logger.Information("Asset with ID {0} was deleted.", id); + _notifier.Information(T("The asset '{0}' was successfully deleted.", asset.Name)); + } + catch (Exception ex) { + _transactionManager.Cancel(); + + Logger.Error(ex, "Error while deleting asset with ID {0}.", id); + _notifier.Error(T("Ar error occurred while deleting the asset '{0}':\n{1}", asset.Name, ex.Message)); + } + + return Redirect(Url.ItemEditUrl(cloudVideoPart)); + } + + private ActionResult Validate(int id, Func validationSucceeded) { + if (!_authorizer.Authorize(Permissions.ManageCloudMediaContent, T("You are not authorized to manage Windows Azure Media content."))) + return new HttpUnauthorizedResult(); + + var asset = _assetManager.GetAssetById(id); + return asset == null ? new HttpNotFoundResult() : validationSucceeded(asset); + } + + private AssetViewModel BuildAssetViewModel(Asset asset, Func> driverAction) { + var specializedSettings = _assetDrivers.Value.SelectMany(driverAction); + + return new AssetViewModel { + Name = asset.Name, + Description = asset.Description, + IncludeInPlayer = asset.IncludeInPlayer, + MediaQuery = asset.MediaQuery, + Asset = asset, + SpecializedSettings = specializedSettings.ToArray() + }; + } + + bool IUpdateModel.TryUpdateModel(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) { + return TryUpdateModel(model, prefix, includeProperties, excludeProperties); + } + + void IUpdateModel.AddModelError(string key, LocalizedString errorMessage) { + ModelState.AddModelError(key, errorMessage.ToString()); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Controllers/JobController.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Controllers/JobController.cs new file mode 100644 index 000000000..10a360ab7 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Controllers/JobController.cs @@ -0,0 +1,256 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web.Mvc; +using Orchard.Azure.MediaServices.Helpers; +using Orchard.Azure.MediaServices.Models; +using Orchard.Azure.MediaServices.Models.Jobs; +using Orchard.Azure.MediaServices.Services.Jobs; +using Orchard.Azure.MediaServices.Services.Tasks; +using Orchard.Azure.MediaServices.Services.Wams; +using Orchard.Azure.MediaServices.ViewModels.Jobs; +using Orchard; +using Orchard.ContentManagement; +using Orchard.Data; +using Orchard.Localization; +using Orchard.Logging; +using Orchard.Mvc; +using Orchard.Mvc.Extensions; +using Orchard.Mvc.Html; +using Orchard.Security; +using Orchard.Services; +using Orchard.Themes; +using Orchard.UI.Admin; +using Orchard.UI.Notify; + +namespace Orchard.Azure.MediaServices.Controllers { + + [Admin] + public class JobController : Controller, IUpdateModel { + private readonly ITransactionManager _transactionManager; + private readonly IContentManager _contentManager; + private readonly INotifier _notifier; + private readonly IJobManager _jobManager; + private readonly IEnumerable _taskProviders; + private readonly IWamsClient _wamsClient; + private readonly IClock _clock; + private readonly IAuthorizer _authorizer; + + public JobController( + ITransactionManager transactionManager, + IOrchardServices services, + IJobManager jobManager, + IEnumerable taskProviders, + IWamsClient wamsClient, + IClock clock) { + + _transactionManager = transactionManager; + _contentManager = services.ContentManager; + _notifier = services.Notifier; + _jobManager = jobManager; + _taskProviders = taskProviders; + _wamsClient = wamsClient; + _clock = clock; + _authorizer = services.Authorizer; + + T = NullLocalizer.Instance; + Logger = NullLogger.Instance; + + New = services.New; + } + + public Localizer T { get; set; } + public ILogger Logger { get; set; } + + private dynamic New { get; set; } + + public ActionResult Index() { + if (!_authorizer.Authorize(Permissions.ManageCloudMediaJobs, T("You are not authorized to manage cloud jobs."))) + return new HttpUnauthorizedResult(); + + var jobsShape = GetOpenJobsTableShape(); + return View(jobsShape); + } + + [Themed(false)] + public ActionResult OpenJobsTable() { + return new ShapeResult(this, GetOpenJobsTableShape()); + } + + public ActionResult SelectTask(int id) { + var taskProviders = _taskProviders.OrderBy(x => x.Name).ToArray(); + + // Short-circuit in case there's just one task provider, saving the user from another mouse-click. + if (taskProviders.Length == 1) + return RedirectToAction("Create", new {id = id, task = taskProviders.First().Name}); + + var viewModel = New.ViewModel(CloudVideoPartId: id, TaskProviders: taskProviders); + return View(viewModel); + } + + public ActionResult Create(int id, string task) { + if (!_authorizer.Authorize(Permissions.ManageCloudMediaJobs, T("You are not authorized to manage cloud jobs."))) + return new HttpUnauthorizedResult(); + + if (String.IsNullOrWhiteSpace(task)) + return RedirectToAction("SelectTask", new { id }); + + var cloudVideoPart = _contentManager.Get(id, VersionOptions.Latest); + var taskProvider = _taskProviders.Single(x => x.Name == task); + var taskConfig = taskProvider.Editor(New); + var jobViewModel = new JobViewModel { TaskEditorShape = taskConfig.EditorShape }; + var viewModel = New.ViewModel( + TaskProvider: taskProvider, + CloudVideoPart: cloudVideoPart, + JobViewModel: jobViewModel); + + return View(viewModel); + } + + [HttpPost] + public ActionResult Create(int id, string task, JobViewModel jobViewModel) { + if (!_authorizer.Authorize(Permissions.ManageCloudMediaJobs, T("You are not authorized to manage cloud jobs."))) + return new HttpUnauthorizedResult(); + + Logger.Debug("User requested to create job with task of type {0} on cloud video item with ID {1}.", task, id); + + var cloudVideoPart = _contentManager.Get(id, VersionOptions.Latest); + if (cloudVideoPart == null) { + Logger.Warning("User requested to create job on cloud video item with ID {0} but no such cloud video item exists.", id); + return HttpNotFound(String.Format("No cloud video item with ID {0} was found.", id)); + } + + var taskProvider = _taskProviders.Single(x => x.Name == task); + var inputAsset = cloudVideoPart.Assets.Single(x => x.Record.Id == jobViewModel.SelectedInputAssetId); + var videoName = _contentManager.GetItemMetadata(cloudVideoPart).DisplayText; + var taskConfig = (TaskConfiguration)taskProvider.Editor(New, this); + var taskConnections = taskProvider.GetConnections(taskConfig); + var taskDisplayText = taskProvider.GetDisplayText(taskConfig); + var jobName = !String.IsNullOrWhiteSpace(jobViewModel.Name) ? jobViewModel.Name.TrimSafe() : !String.IsNullOrWhiteSpace(taskDisplayText) ? taskDisplayText : String.Format("{0} ({1})", videoName, taskProvider.Name); + var jobDescription = jobViewModel.Description.TrimSafe(); + + if (ModelState.IsValid) { + try { + var wamsJob = _wamsClient.CreateNewJob(jobName); + var wamsInputAsset = _wamsClient.GetAssetById(inputAsset.WamsAssetId); + var wamsTask = taskProvider.CreateTask(taskConfig, wamsJob.Tasks, new[] { wamsInputAsset }); + wamsJob.Submit(); // Needs to be done here for job and tasks to get their WAMS ID values. + + var job = _jobManager.CreateJobFor(cloudVideoPart, j => { + j.WamsJobId = wamsJob.Id; + j.Name = jobName; + j.Description = jobDescription; + j.Status = JobStatus.Pending; + j.CreatedUtc = _clock.UtcNow; + j.OutputAssetName = jobViewModel.OutputAssetName.TrimSafe(); + j.OutputAssetDescription = jobViewModel.OutputAssetDescription.TrimSafe(); + }); + + _jobManager.CreateTaskFor(job, t => { + t.HarvestAssetType = taskConnections.Outputs.First().AssetType; + t.HarvestAssetName = taskConnections.Outputs.First().AssetName; + t.Settings = taskProvider.Serialize(taskConfig.Settings); + t.Index = 0; + t.TaskProviderName = taskProvider.Name; + t.WamsTaskId = wamsTask.Id; + }); + + Logger.Information("Job was created with task of type {0} on cloud video item with ID {1}.", task, id); + _notifier.Information(T("The job '{0}' was successfully created.", job.Name)); + + return Redirect(Url.ItemEditUrl(cloudVideoPart)); + } + catch (Exception ex) { + _transactionManager.Cancel(); + + Logger.Error(ex, "Error while creating job with task of type {0} on cloud video item with ID {1}.", task, id); + _notifier.Error(T("Ar error occurred while creating the job:\n{1}", ex.Message)); + } + } + + return View(jobViewModel); + } + + [HttpPost] + public ActionResult Archive(int id, string returnUrl = null) { + if (!_authorizer.Authorize(Permissions.ManageCloudMediaJobs, T("You are not authorized to manage cloud jobs."))) + return new HttpUnauthorizedResult(); + + Logger.Debug("User requested to archive job with ID {0}.", id); + + var job = _jobManager.GetJobById(id); + if (job == null) { + Logger.Warning("User requested to archive job with ID {0} but no such job exists.", id); + return HttpNotFound(String.Format("No job with ID {0} was found.", id)); + } + + job.Status = JobStatus.Archived; + + Logger.Information("Job with ID {0} was archived.", id); + _notifier.Information(T("The job '{0}' was successfully archived.", job.Name)); + + return RedirectToReturnUrl(returnUrl, Url.ItemEditUrl(job.CloudVideoPart)); + } + + [HttpPost] + public ActionResult Cancel(int id, string returnUrl = null) { + if (!_authorizer.Authorize(Permissions.ManageCloudMediaJobs, T("You are not authorized to manage cloud jobs."))) + return new HttpUnauthorizedResult(); + + Logger.Debug("User requested to cancel job with ID {0}.", id); + + var job = _jobManager.GetJobById(id); + if (job == null) { + Logger.Warning("User requested to cancel job with ID {0} but no such job exists.", id); + return HttpNotFound(String.Format("No job with ID {0} was found.", id)); + } + + job.Status = JobStatus.Canceling; // Set status to reflect in UI immediately - may be reset by JobProcessor later. + + try { + var wamsJob = _wamsClient.GetJobById(job.WamsJobId); + wamsJob.Cancel(); + + Logger.Information("Job with ID {0} was canceled.", id); + _notifier.Information(T("The job '{0}' was successfully canceled.", job.Name)); + } + catch (Exception ex) { + _transactionManager.Cancel(); + + Logger.Error(ex, "Error while canceling the job with ID {0}.", id); + _notifier.Error(T("An error occurred while canceling the job:\n{0}", ex.Message)); + } + + return RedirectToReturnUrl(returnUrl, Url.ItemEditUrl(job.CloudVideoPart)); + } + + [Themed(false)] + public ActionResult AssetsTable(int id) { + var videoPart = _contentManager.Get(id, VersionOptions.Latest); + return new ShapeResult(this, New.CloudVideo_Edit_Assets(CloudVideoPart: videoPart)); + } + + [Themed(false)] + public ActionResult JobsTable(int id) { + var videoPart = _contentManager.Get(id, VersionOptions.Latest); + return new ShapeResult(this, New.CloudVideo_Edit_Jobs(CloudVideoPart: videoPart)); + } + + private dynamic GetOpenJobsTableShape() { + var jobs = _jobManager.GetOpenJobs().ToArray(); + return New.OpenJobsTable(Jobs: jobs); + } + + private ActionResult RedirectToReturnUrl(string returnUrl, string defaultUrl) { + return !String.IsNullOrEmpty(returnUrl) ? this.RedirectLocal(returnUrl) : Redirect(defaultUrl); + } + + bool IUpdateModel.TryUpdateModel(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) { + return TryUpdateModel(model, prefix, includeProperties, excludeProperties); + } + + void IUpdateModel.AddModelError(string key, LocalizedString errorMessage) { + ModelState.AddModelError(key, errorMessage.ToString()); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Controllers/MediaController.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Controllers/MediaController.cs new file mode 100644 index 000000000..90b1d3172 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Controllers/MediaController.cs @@ -0,0 +1,171 @@ +using System; +using System.IO; +using System.Linq; +using System.Net; +using System.Web.Mvc; +using Orchard.Azure.MediaServices.Models; +using Orchard.Azure.MediaServices.Models.Assets; +using Orchard.Azure.MediaServices.Services.Assets; +using Orchard; +using Orchard.ContentManagement; +using Orchard.Data; +using Orchard.Localization; +using Orchard.Logging; +using Orchard.MediaLibrary.Models; +using Orchard.Mvc; +using Orchard.Security; +using Orchard.UI.Admin; +using Orchard.UI.Notify; + +namespace Orchard.Azure.MediaServices.Controllers { + + [Admin] + public class MediaController : Controller, IUpdateModel { + + private readonly IContentManager _contentManager; + private readonly IAssetManager _assetManager; + private readonly INotifier _notifier; + private readonly ITransactionManager _transactionManager; + private readonly IAuthorizer _authorizer; + + public MediaController( + IOrchardServices services, + IAssetManager assetManager, + ITransactionManager transactionManager) { + + _contentManager = services.ContentManager; + _assetManager = assetManager; + _transactionManager = transactionManager; + _authorizer = services.Authorizer; + _notifier = services.Notifier; + + T = NullLocalizer.Instance; + Logger = NullLogger.Instance; + + New = services.New; + } + + public Localizer T { get; set; } + public ILogger Logger { get; set; } + + private dynamic New { get; set; } + + public ActionResult Import(string folderPath) { + var part = _contentManager.New("CloudVideo"); + return EditImplementation(part, folderPath); + } + + [HttpPost, ActionName("Import")] + [FormValueRequired("submit.Save")] + public ActionResult ImportSave(string folderPath) { + var part = _contentManager.Create("CloudVideo", VersionOptions.Draft); + return UpdateImplementation(part, folderPath, T("The cloud video item was successfully created."), publish: false); + } + + [HttpPost, ActionName("Import")] + [FormValueRequired("submit.Publish")] + public ActionResult ImportPublish(string folderPath) { + var part = _contentManager.Create("CloudVideo", VersionOptions.Draft); + return UpdateImplementation(part, folderPath, T("The cloud video item was successfully created."), publish: true); + } + + public ActionResult Edit(int id) { + var part = _contentManager.Get(id, VersionOptions.Latest); + return EditImplementation(part, null); + } + + [HttpPost, ActionName("Edit")] + [FormValueRequired("submit.Save")] + public ActionResult EditSave(int id) { + var part = _contentManager.Get(id, VersionOptions.Latest); + return UpdateImplementation(part, null, T("The cloud video item was successfully updated."), publish: false); + } + + [HttpPost, ActionName("Edit")] + [FormValueRequired("submit.Publish")] + public ActionResult EditPublish(int id) { + var part = _contentManager.Get(id, VersionOptions.Latest); + return UpdateImplementation(part, null, T("The cloud video item was successfully updated."), publish: true); + } + + [HttpPost] + public ActionResult Upload() { + if (!_authorizer.Authorize(Permissions.ManageCloudMediaContent, T("You are not authorized to manage Windows Azure Media content."))) + return new HttpUnauthorizedResult(); + + if (HttpContext.Request.Files.Count < 1) + return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "At least one file must be provided in the upload request."); + + var postedFile = HttpContext.Request.Files[0]; + Logger.Debug("User requested asynchronous upload of file with name '{0}' and size {1} bytes to temporary storage.", postedFile.FileName, postedFile.ContentLength); + + var fileName = _assetManager.SaveTemporaryFile(postedFile); + Logger.Information("File with name '{0}' and size {1} bytes was uploaded to temporary storage.", postedFile.FileName, postedFile.ContentLength); + return Json(new { + originalFileName = Path.GetFileName(postedFile.FileName), + temporaryFileName = fileName, + fileSize = postedFile.ContentLength + }); + } + + private ActionResult EditImplementation(IContent content, string folderPath) { + if (!_authorizer.Authorize(Permissions.ManageCloudMediaContent, T("You are not authorized to manage Windows Azure Media content."))) + return new HttpUnauthorizedResult(); + + var editorShape = _contentManager.BuildEditor(content); + var model = New.ViewModel(Editor: editorShape, FolderPath: folderPath); + return View(model); + } + + private ActionResult UpdateImplementation(CloudVideoPart part, string folderPath, LocalizedString notification, bool publish) { + if (!_authorizer.Authorize(Permissions.ManageCloudMediaContent, T("You are not authorized to manage Windows Azure Media content."))) + return new HttpUnauthorizedResult(); + + Logger.Debug("User requested to save cloud video item with ID {0}.", part.Id); + + var editorShape = _contentManager.UpdateEditor(part, this); + + if (!ModelState.IsValid) { + _transactionManager.Cancel(); + + var viewModel = New.ViewModel(FolderPath: folderPath, Editor: editorShape); + return View(viewModel); + } + + var mediaPart = part.As(); + mediaPart.LogicalType = "CloudVideo"; + + if (String.IsNullOrWhiteSpace(mediaPart.MimeType)) { + var mezzanineAsset = _assetManager.LoadAssetsFor(part).Single(); + mediaPart.MimeType = mezzanineAsset.MimeType; + } + + if (!String.IsNullOrWhiteSpace(folderPath)) + mediaPart.FolderPath = folderPath; + + try { + if (publish) + _contentManager.Publish(mediaPart.ContentItem); + + Logger.Information("Cloud video item with ID {0} was saved.", part.Id); + _notifier.Information(notification); + } + catch (Exception ex) { + _transactionManager.Cancel(); + + Logger.Error(ex, "Error while saving cloud video item with ID {0}.", part.Id); + _notifier.Error(T("Ar error occurred while saving the cloud video item:\n{1}", ex.Message)); + } + + return RedirectToAction("Edit", new { id = part.Id }); + } + + bool IUpdateModel.TryUpdateModel(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) { + return TryUpdateModel(model, prefix, includeProperties, excludeProperties); + } + + void IUpdateModel.AddModelError(string key, LocalizedString errorMessage) { + ModelState.AddModelError(key, errorMessage.ToString()); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Controllers/SettingsController.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Controllers/SettingsController.cs new file mode 100644 index 000000000..5c9f46dd1 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Controllers/SettingsController.cs @@ -0,0 +1,189 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; +using System.Web.Mvc; +using Orchard.Azure.MediaServices.Helpers; +using Orchard.Azure.MediaServices.Models; +using Orchard.Azure.MediaServices.Services.Wams; +using Orchard.Azure.MediaServices.ViewModels.Settings; +using Microsoft.WindowsAzure.MediaServices.Client; +using Microsoft.WindowsAzure.Storage; +using Microsoft.WindowsAzure.Storage.Auth; +using Orchard; +using Orchard.ContentManagement; +using Orchard.Localization; +using Orchard.Logging; +using Orchard.UI.Admin; +using Orchard.UI.Notify; + +namespace Orchard.Azure.MediaServices.Controllers { + + [Admin] + public class SettingsController : Controller { + private readonly IOrchardServices _services; + private readonly IWamsClient _wamsClient; + + public SettingsController(IOrchardServices services, IWamsClient wamsClient) { + _services = services; + _wamsClient = wamsClient; + + T = NullLocalizer.Instance; + Logger = NullLogger.Instance; + } + + public Localizer T { get; set; } + public ILogger Logger { get; set; } + + public ActionResult Index() { + if (!_services.Authorizer.Authorize(Permissions.ManageCloudMediaSettings, T("You are not authorized to manage Windows Azure Media settings."))) + return new HttpUnauthorizedResult(); + + var settings = _services.WorkContext.CurrentSite.As(); + var viewModel = new SettingsViewModel { + General = new GeneralSettingsViewModel { + WamsAccountName = settings.WamsAccountName, + WamsAccountKey = settings.WamsAccountKey, + StorageAccountKey = settings.StorageAccountKey, + EnableDynamicPackaging = settings.EnableDynamicPackaging, + AccessPolicyDuration = settings.AccessPolicyDuration, + AllowedVideoFilenameExtensions = String.Join(";", settings.AllowedVideoFilenameExtensions) + }, + EncodingSettings = new EncodingSettingsViewModel { + WamsEncodingPresets = settings.WamsEncodingPresets, + DefaultWamsEncodingPresetIndex = settings.DefaultWamsEncodingPresetIndex + }, + EncryptionSettings = new EncryptionSettingsViewModel { + KeySeedValue = settings.EncryptionKeySeedValue, + LicenseAcquisitionUrl = settings.EncryptionLicenseAcquisitionUrl, + }, + SubtitleLanguages = new SubtitleLanguagesSettingsViewModel { + Languages = settings.SubtitleLanguages + } + }; + + return View(viewModel); + } + + [HttpPost] + public ActionResult Save(SettingsViewModel viewModel) { + if (!_services.Authorizer.Authorize(Permissions.ManageCloudMediaSettings, T("You are not authorized to manage Windows Azure Media settings."))) + return new HttpUnauthorizedResult(); + + if (!ModelState.IsValid) { + return View("Index", viewModel); + } + + var presetPattern = new Regex(@"^[\w\s]*$"); + foreach (var preset in viewModel.EncodingSettings.WamsEncodingPresets) { + if (!presetPattern.IsMatch(preset)) { + _services.Notifier.Error(T("The encoding preset '{0}' is invalid. Encoding presets can only contain letters, numbers and spaces.", preset)); + return View("Index", viewModel); + } + } + + Logger.Debug("User requested to save module settings."); + + var settings = _services.WorkContext.CurrentSite.As(); + + if (!String.IsNullOrWhiteSpace(viewModel.General.WamsAccountName) && !String.IsNullOrEmpty(viewModel.General.WamsAccountKey)) { + // Test WAMS credentials if they were changed. + if (viewModel.General.WamsAccountName != settings.WamsAccountName || viewModel.General.WamsAccountKey != settings.WamsAccountKey || viewModel.General.StorageAccountKey != settings.StorageAccountKey) { + if (!TestCredentialsInternal(viewModel.General.WamsAccountName, viewModel.General.WamsAccountKey, viewModel.General.StorageAccountKey)) { + _services.Notifier.Error(T("The account credentials verification failed. The settings were not saved.")); + return View("Index", viewModel); + } + else { + _services.Notifier.Information(T("The new account credentials were successfully verified.")); + } + } + } + + var previousStorageAccountKey = settings.StorageAccountKey; + + settings.WamsAccountName = viewModel.General.WamsAccountName.TrimSafe(); + settings.WamsAccountKey = viewModel.General.WamsAccountKey.TrimSafe(); + settings.StorageAccountKey = viewModel.General.StorageAccountKey.TrimSafe(); + settings.EnableDynamicPackaging = viewModel.General.EnableDynamicPackaging; + settings.AccessPolicyDuration = viewModel.General.AccessPolicyDuration; + settings.AllowedVideoFilenameExtensions = viewModel.General.AllowedVideoFilenameExtensions.Split(';'); + settings.WamsEncodingPresets = viewModel.EncodingSettings.WamsEncodingPresets; + settings.DefaultWamsEncodingPresetIndex = viewModel.EncodingSettings.DefaultWamsEncodingPresetIndex; + settings.SubtitleLanguages = viewModel.SubtitleLanguages != null ? viewModel.SubtitleLanguages.Languages : null; + + // TODO: Encryption is disabled for now. Uncomment when we need it again. + //settings.EncryptionKeySeedValue = viewModel.EncryptionSettings.KeySeedValue.TrimSafe(); + //settings.EncryptionLicenseAcquisitionUrl = viewModel.EncryptionSettings.LicenseAcquisitionUrl.TrimSafe(); + + // Configure storage account for CORS if account key was specified and changed. + if (settings.IsValid() && !String.IsNullOrWhiteSpace(settings.StorageAccountKey)) { + if (settings.StorageAccountKey != previousStorageAccountKey) { + try { + Logger.Debug("Ensuring CORS support for the configured base URL and the current request URL."); + var originsToAdd = new List(); + var baseUrlOrigin = new Uri(_services.WorkContext.CurrentSite.BaseUrl).GetLeftPart(UriPartial.Authority); + originsToAdd.Add(baseUrlOrigin); + + var currentUrlOrigin = _services.WorkContext.HttpContext.Request.Url.GetLeftPart(UriPartial.Authority); + if (!originsToAdd.Contains(currentUrlOrigin)) + originsToAdd.Add(currentUrlOrigin); + + var addedOrigins = _wamsClient.EnsureCorsIsEnabledAsync(originsToAdd.ToArray()).Result; + + if (addedOrigins.Any()) { + Logger.Information("CORS rules were added to the configured storage account for the following URLs: {0}.", String.Join("; ", addedOrigins)); + _services.Notifier.Information(T("CORS rules have been configured on your storage account for the following URLs: {0}.", String.Join("; ", addedOrigins))); + } + } + catch (Exception ex) { + Logger.Error(ex, "Error while ensuring CORS support."); + _services.Notifier.Warning(T("Failed to check or configure CORS support on your storage account.")); + } + } + } + + Logger.Information("Module settings were saved."); + _services.Notifier.Information(T("The settings were saved successfully.")); + + return RedirectToAction("Index"); + } + + [HttpPost] + public ActionResult TestCredentials(SettingsViewModel viewModel) { + if (!_services.Authorizer.Authorize(Permissions.ManageCloudMediaSettings, T("You are not authorized to manage Windows Azure Media settings."))) + return new HttpUnauthorizedResult(); + + Logger.Debug("User requested to verify WAMS account credentials."); + + if (TestCredentialsInternal(viewModel.General.WamsAccountName, viewModel.General.WamsAccountKey, viewModel.General.StorageAccountKey)) { + _services.Notifier.Information(T("The account credentials were successfully verified.")); + } + else { + _services.Notifier.Error(T("The account credentials verification failed.")); + } + + return View("Index", viewModel); + } + + private bool TestCredentialsInternal(string wamsAccountName, string wamsAccountKey, string storageAccountKey) { + try { + // This will trigger an authentication call to WAMS. + var ctx = new CloudMediaContext(wamsAccountName, wamsAccountKey); + + if (!String.IsNullOrWhiteSpace(storageAccountKey)) { + // This will trigger an authentication call to Windows Azure Storage. + var storageAccount = new CloudStorageAccount(new StorageCredentials(ctx.DefaultStorageAccount.Name, storageAccountKey), false); + storageAccount.CreateCloudBlobClient().GetServiceProperties(); + Logger.Information("Storage account credentials were verified."); + } + + Logger.Information("WAMS account credentials were verified."); + return true; + } + catch (Exception ex) { + Logger.Error(ex, "Error while verifying WAMS and storage account credentials."); + return false; + } + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Drivers/CloudVideoPartDriver.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Drivers/CloudVideoPartDriver.cs new file mode 100644 index 000000000..b1b7dd83f --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Drivers/CloudVideoPartDriver.cs @@ -0,0 +1,221 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Orchard.Azure.MediaServices.Models; +using Orchard.Azure.MediaServices.Models.Assets; +using Orchard.Azure.MediaServices.Services.Assets; +using Orchard.Azure.MediaServices.Services.Jobs; +using Orchard.Azure.MediaServices.Services.Wams; +using Orchard.Azure.MediaServices.ViewModels.Media; +using Orchard; +using Orchard.ContentManagement; +using Orchard.ContentManagement.Drivers; +using Orchard.Core.Contents.Settings; +using Orchard.Localization; +using Orchard.Mvc; +using Orchard.UI.Notify; + +namespace Orchard.Azure.MediaServices.Drivers { + public class CloudVideoPartDriver : ContentPartDriver { + + private readonly IOrchardServices _services; + private readonly IHttpContextAccessor _httpContextAccessor; + private readonly IAssetManager _assetManager; + private readonly IJobManager _jobManager; + private readonly IWamsClient _wamsClient; + + public CloudVideoPartDriver( + IOrchardServices services, + IHttpContextAccessor httpContextAccessor, + IAssetManager assetManager, + IJobManager jobManager, + IWamsClient wamsClient) { + + _services = services; + _httpContextAccessor = httpContextAccessor; + _assetManager = assetManager; + _jobManager = jobManager; + _wamsClient = wamsClient; + + T = NullLocalizer.Instance; + } + + public Localizer T { get; set; } + + protected override DriverResult Display(CloudVideoPart part, string displayType, dynamic shapeHelper) { + return Combined( + ContentShape("Parts_CloudVideo_Metadata", () => shapeHelper.Parts_CloudVideo_Metadata(ActiveJobCount: _jobManager.GetActiveJobs().Count(job => job.Record.CloudVideoPartId == part.Id))), + ContentShape("Parts_CloudVideo_SummaryAdmin", () => shapeHelper.Parts_CloudVideo_SummaryAdmin()), + ContentShape("Parts_CloudVideo_Summary", () => shapeHelper.Parts_CloudVideo_Summary()), + ContentShape("Parts_CloudVideo_Raw", () => shapeHelper.Parts_CloudVideo_Raw()), + ContentShape("Parts_CloudVideo", () => shapeHelper.Parts_CloudVideo())); + } + + protected override DriverResult Editor(CloudVideoPart part, dynamic shapeHelper) { + return Editor(part, null, shapeHelper); + } + + protected override DriverResult Editor(CloudVideoPart part, IUpdateModel updater, dynamic shapeHelper) { + var results = new List(); + results.Add(ContentShape("Parts_CloudVideo_Edit", () => { + var settings = _services.WorkContext.CurrentSite.As(); + var httpContext = _httpContextAccessor.Current(); + + var occupiedSubtitleLanguagesQuery = + from asset in part.Assets + where asset is SubtitleAsset + select ((SubtitleAsset)asset).Language; + var availableSubtitleLanguagesQuery = + from language in settings.SubtitleLanguages + where !occupiedSubtitleLanguagesQuery.Contains(language) + select language; + + var viewModel = new CloudVideoPartViewModel(availableSubtitleLanguagesQuery.ToArray()) { + Id = part.Id, + Part = part, + AllowedVideoFilenameExtensions = settings.AllowedVideoFilenameExtensions, + TemporaryVideoFile = new TemporaryFileViewModel { + OriginalFileName = part.MezzanineAsset != null ? part.MezzanineAsset.OriginalFileName : "", + FileSize = 0, + TemporaryFileName = "" + }, + AddedSubtitleLanguage = settings.SubtitleLanguages.FirstOrDefault(), + WamsVideo = new WamsAssetViewModel(), + WamsThumbnail = new WamsAssetViewModel(), + WamsSubtitle = new WamsAssetViewModel() + }; + + if (updater != null) { + + if (updater.TryUpdateModel(viewModel, Prefix, null, null) && AVideoWasUploaded(part, updater, viewModel)) { + + ProcessCreatedWamsAssets(part, viewModel); + ProcessUploadedFiles(part, viewModel); + + var unpublish = httpContext.Request.Form["submit.Save"] == "submit.Unpublish"; + if (unpublish) { + _services.ContentManager.Unpublish(part.ContentItem); + _services.Notifier.Information(T("Your {0} has been unpublished.", part.ContentItem.TypeDefinition.DisplayName)); + } + + if (part.IsPublished()) + _assetManager.PublishAssetsFor(part); + } + } + + return shapeHelper.EditorTemplate(TemplateName: "Parts/CloudVideo", Model: viewModel, Prefix: Prefix); + })); + + if (part.TypeDefinition.Settings.GetModel().Draftable) { + if (part.IsPublished()) { + results.Add(ContentShape("CloudVideo_Edit_UnpublishButton", actions => actions)); + } + } + + return Combined(results.ToArray()); + } + + private bool AVideoWasUploaded(CloudVideoPart part, IUpdateModel updater, CloudVideoPartViewModel viewModel) { + var isValid = viewModel.WamsVideo.WamsAssetId != null || viewModel.TemporaryVideoFile.FileSize > 0 || part.MezzanineAsset != null; + + if (!isValid) + updater.AddModelError(Prefix + ".WamsVideo.WamsAssetId", T("You need to upload a video.")); + + return isValid; + } + + private void ProcessCreatedWamsAssets(CloudVideoPart part, CloudVideoPartViewModel viewModel) { + if (viewModel.WamsVideo.AssetId == null && !String.IsNullOrWhiteSpace(viewModel.WamsVideo.WamsAssetId)) { + var asset = _assetManager.CreateAssetFor(part, a => { + a.Name = "Mezzanine"; + a.IncludeInPlayer = false; + a.OriginalFileName = viewModel.WamsVideo.FileName; + a.WamsAssetId = viewModel.WamsVideo.WamsAssetId; + a.UploadState.Status = AssetUploadStatus.Uploaded; + CreatePrivateLocatorFor(a); + }); + viewModel.WamsVideo.AssetId = asset.Record.Id; + } + + if (viewModel.WamsThumbnail.AssetId == null && !String.IsNullOrWhiteSpace(viewModel.WamsThumbnail.WamsAssetId)) { + var asset = _assetManager.CreateAssetFor(part, a => { + a.Name = viewModel.WamsThumbnail.FileName; + a.IncludeInPlayer = true; + a.OriginalFileName = viewModel.WamsThumbnail.FileName; + a.WamsAssetId = viewModel.WamsThumbnail.WamsAssetId; + a.UploadState.Status = AssetUploadStatus.Uploaded; + CreatePrivateLocatorFor(a); + }); + viewModel.WamsThumbnail.AssetId = asset.Record.Id; + } + + if (viewModel.WamsSubtitle.AssetId == null && !String.IsNullOrWhiteSpace(viewModel.WamsSubtitle.WamsAssetId)) { + var asset = _assetManager.CreateAssetFor(part, a => { + a.Name = viewModel.AddedSubtitleLanguage; + a.IncludeInPlayer = true; + a.OriginalFileName = viewModel.WamsSubtitle.FileName; + a.Language = viewModel.AddedSubtitleLanguage; + a.WamsAssetId = viewModel.WamsSubtitle.WamsAssetId; + a.UploadState.Status = AssetUploadStatus.Uploaded; + CreatePrivateLocatorFor(a); + }); + viewModel.WamsThumbnail.AssetId = asset.Record.Id; + } + } + + private void ProcessUploadedFiles(CloudVideoPart part, CloudVideoPartViewModel viewModel) { + var httpContext = _httpContextAccessor.Current(); + var files = httpContext.Request.Files; + var postedThumbnailFile = files["ThumbnailFile.Proxied"]; + var postedSubtitleFile = files["SubtitleFile.Proxied"]; + + if (viewModel.TemporaryVideoFile.FileSize > 0) { + _assetManager.CreateAssetFor(part, a => { + a.Name = "Mezzanine"; + a.IncludeInPlayer = false; + a.OriginalFileName = Path.GetFileName(viewModel.TemporaryVideoFile.OriginalFileName); + a.LocalTempFileName = viewModel.TemporaryVideoFile.TemporaryFileName; + a.LocalTempFileSize = viewModel.TemporaryVideoFile.FileSize; + }); + } + if (postedThumbnailFile != null && postedThumbnailFile.ContentLength > 0) { + var thumbnailTempFilePath = _assetManager.SaveTemporaryFile(postedThumbnailFile); + _assetManager.CreateAssetFor(part, a => { + a.Name = Path.GetFileName(postedThumbnailFile.FileName); + a.IncludeInPlayer = true; + a.OriginalFileName = Path.GetFileName(postedThumbnailFile.FileName); + a.LocalTempFileName = thumbnailTempFilePath; + a.LocalTempFileSize = postedThumbnailFile.ContentLength; + }); + } + if (postedSubtitleFile != null && postedSubtitleFile.ContentLength > 0) { + var subtitleTempFilePath = _assetManager.SaveTemporaryFile(postedSubtitleFile); + _assetManager.CreateAssetFor(part, a => { + a.Name = Path.GetFileName(postedSubtitleFile.FileName); + a.IncludeInPlayer = true; + a.OriginalFileName = Path.GetFileName(postedSubtitleFile.FileName); + a.LocalTempFileName = subtitleTempFilePath; + a.LocalTempFileSize = postedSubtitleFile.ContentLength; + a.Language = viewModel.AddedSubtitleLanguage; + }); + } + } + + private void DeleteExistingThumbnails(CloudVideoPart part) { + var thumbnailAssets = part.Assets.Where(x => x is ThumbnailAsset); + + foreach (var asset in thumbnailAssets) { + _assetManager.DeleteAsset(asset); + } + } + + public void CreatePrivateLocatorFor(Asset asset) { + var wamsAsset = _wamsClient.GetAssetById(asset.WamsAssetId); + var wamsLocators = _wamsClient.CreateLocatorsAsync(wamsAsset, WamsLocatorCategory.Private).Result; + + asset.WamsPrivateLocatorId = wamsLocators.SasLocator.Id; + asset.WamsPrivateLocatorUrl = wamsLocators.SasLocator.Url; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Drivers/ThumbnailAssetDriver.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Drivers/ThumbnailAssetDriver.cs new file mode 100644 index 000000000..77620ee0b --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Drivers/ThumbnailAssetDriver.cs @@ -0,0 +1,19 @@ +using System.Collections.Generic; +using Orchard.Azure.MediaServices.Infrastructure.Assets; +using Orchard.Azure.MediaServices.Models.Assets; +using Orchard.ContentManagement; + +namespace Orchard.Azure.MediaServices.Drivers { + public class ThumbnailAssetDriver : AssetDriver { + protected override IEnumerable Editor(ThumbnailAsset asset, dynamic shapeFactory) { + return Editor(asset, null, shapeFactory); + } + + protected override IEnumerable Editor(ThumbnailAsset asset, IUpdateModel updater, dynamic shapeFactory) { + yield return new AssetDriverResult { + TabTitle = T("Thumbnail"), + EditorShape = shapeFactory.EditorTemplate(Model: asset, TemplateName: "Assets/Thumbnail.Preview", Prefix: Prefix) + }; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Drivers/VideoAssetDriver.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Drivers/VideoAssetDriver.cs new file mode 100644 index 000000000..fa0f18e1d --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Drivers/VideoAssetDriver.cs @@ -0,0 +1,23 @@ +using System.Collections.Generic; +using Orchard.Azure.MediaServices.Infrastructure.Assets; +using Orchard.Azure.MediaServices.Models.Assets; +using Orchard.ContentManagement; + +namespace Orchard.Azure.MediaServices.Drivers { + public class VideoAssetDriver : AssetDriver { + protected override IEnumerable Editor(VideoAsset asset, dynamic shapeFactory) { + return Editor(asset, null, shapeFactory); + } + + protected override IEnumerable Editor(VideoAsset asset, IUpdateModel updater, dynamic shapeFactory) { + yield return new AssetDriverResult { + TabTitle = T("Files"), + EditorShape = shapeFactory.EditorTemplate(Model: asset, TemplateName: "Assets/Video.Files", Prefix: Prefix) + }; + yield return new AssetDriverResult { + TabTitle = T("Preview"), + EditorShape = shapeFactory.EditorTemplate(Model: asset, TemplateName: "Assets/Video.Preview", Prefix: Prefix) + }; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Events/FeatureEventHandler.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Events/FeatureEventHandler.cs new file mode 100644 index 000000000..71fac50d4 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Events/FeatureEventHandler.cs @@ -0,0 +1,115 @@ +using Orchard.Azure.MediaServices.Models; +using Orchard; +using Orchard.ContentManagement; +using Orchard.Environment; +using Orchard.Environment.Extensions.Models; + +namespace Orchard.Azure.MediaServices.Events { + public class FeatureEventHandler : IFeatureEventHandler { + + private readonly IOrchardServices _orchardServices; + + public FeatureEventHandler(IOrchardServices orchardServices) { + _orchardServices = orchardServices; + } + + public void Installing(Feature feature) { + + } + + public void Installed(Feature feature) { + if (feature.Descriptor.Id != "Orchard.Azure.MediaServices") + return; + + var settings = _orchardServices.WorkContext.CurrentSite.As(); + settings.AllowedVideoFilenameExtensions = "asf;avi;m2ts;m2v;mp4;mpeg;mpg;mts;ts;wmv;3gp;3g2;3gp2;mod;dv;vob;ismv;m4a".Split(';'); + settings.WamsEncodingPresets = new[] { + "VC1 Broadband 1080p", + "VC1 Broadband 720p", + "VC1 Broadband SD 16x9", + "VC1 Broadband SD 4x3", + "VC1 Smooth Streaming 1080p", + "VC1 Smooth Streaming 720p", + "VC1 Smooth Streaming SD 16x9", + "VC1 Smooth Streaming SD 4x3", + "VC1 Smooth Streaming 1080p Xbox Live ADK", + "VC1 Smooth Streaming 720p Xbox Live ADK", + "H264 Broadband 1080p", + "H264 Broadband 720p", + "H264 Broadband SD 16x9", + "H264 Broadband SD 4x3", + "H264 Smooth Streaming 1080p", + "H264 Smooth Streaming 720p", + "H264 Smooth Streaming 720p for 3G or 4G", + "H264 Smooth Streaming SD 16x9", + "H264 Smooth Streaming SD 4x3", + "H264 Adaptive Bitrate MP4 Set 1080p", + "H264 Adaptive Bitrate MP4 Set 720p", + "H264 Adaptive Bitrate MP4 Set SD 16x9", + "H264 Adaptive Bitrate MP4 Set SD 4x3", + "H264 Adaptive Bitrate MP4 Set 1080p for iOS Cellular Only", + "H264 Adaptive Bitrate MP4 Set 720p for iOS Cellular Only", + "H264 Adaptive Bitrate MP4 Set SD 16x9 for iOS Cellular Only", + "H264 Adaptive Bitrate MP4 Set SD 4x3 for iOS Cellular Only", + "H264 Smooth Streaming 720p Xbox Live ADK", + "H264 Smooth Streaming Windows Phone 7 Series" + }; + settings.SubtitleLanguages = new[] { + "da-DK", + "nl-BE", + "nl-NL", + "en-AU", + "en-CA", + "en-IE", + "en-NZ", + "en-GB", + "en-US", + "fr-BE", + "fr-CA", + "fr-FR", + "fr-CH", + "de-AT", + "de-DE", + "de-CH", + "ga-IE", + "it-IT", + "it-CH", + "nb-NO", + "nn-NO", + "fa-IR", + "pl-PL", + "pt-BR", + "pt-PT", + "ru-RU", + "es-CO", + "es-MX", + "es-ES", + "sv-SE" + }; + } + + public void Enabling(Feature feature) { + + } + + public void Enabled(Feature feature) { + + } + + public void Disabling(Feature feature) { + + } + + public void Disabled(Feature feature) { + + } + + public void Uninstalling(Feature feature) { + + } + + public void Uninstalled(Feature feature) { + + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Handlers/CloudMediaSettingsPartHandler.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Handlers/CloudMediaSettingsPartHandler.cs new file mode 100644 index 000000000..d8346fdb6 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Handlers/CloudMediaSettingsPartHandler.cs @@ -0,0 +1,10 @@ +using Orchard.Azure.MediaServices.Models; +using Orchard.ContentManagement.Handlers; + +namespace Orchard.Azure.MediaServices.Handlers { + public class CloudMediaSettingsPartHandler : ContentHandler { + public CloudMediaSettingsPartHandler() { + Filters.Add(new ActivatingFilter("Site")); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Handlers/CloudVideoPartHandler.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Handlers/CloudVideoPartHandler.cs new file mode 100644 index 000000000..cc0ab3530 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Handlers/CloudVideoPartHandler.cs @@ -0,0 +1,57 @@ +using Orchard.Azure.MediaServices.Models; +using Orchard.Azure.MediaServices.Models.Assets; +using Orchard.Azure.MediaServices.Services.Assets; +using Orchard.Azure.MediaServices.Services.Jobs; +using Orchard.ContentManagement.Handlers; +using Orchard.Localization; +using Orchard.UI.Notify; + +namespace Orchard.Azure.MediaServices.Handlers { + public class CloudVideoPartHandler : ContentHandler { + private readonly IAssetManager _assetManager; + private readonly IJobManager _jobManager; + private readonly INotifier _notifier; + + public CloudVideoPartHandler( + IAssetManager assetManager, + IJobManager jobManager, + INotifier notifier) { + + _assetManager = assetManager; + _jobManager = jobManager; + _notifier = notifier; + T = NullLocalizer.Instance; + OnActivated(SetupFields); + OnPublishing(DeferOrPublishAssets); + OnUnpublished(CancelAndUnpublishAssets); + OnRemoved(RemoveAssets); + } + + public Localizer T { get; set; } + + private void SetupFields(ActivatedContentContext context, CloudVideoPart part) { + part._assetManager = _assetManager; + part._jobManager = _jobManager; + } + + private void DeferOrPublishAssets(PublishContentContext context, CloudVideoPart part) { + if (part.MezzanineAsset != null && part.MezzanineAsset.UploadState.Status != AssetUploadStatus.Uploaded) { + part.PublishOnUpload = true; + _notifier.Warning(T("The cloud video item was saved, but will not be published until the primary video asset has finished uploading to Windows Azure Media Services.")); + context.Cancel = true; + } + else + _assetManager.PublishAssetsFor(part); + } + + private void CancelAndUnpublishAssets(PublishContentContext context, CloudVideoPart part) { + part.PublishOnUpload = false; + _assetManager.UnpublishAssetsFor(part); + } + + private void RemoveAssets(RemoveContentContext context, CloudVideoPart part) { + _assetManager.DeleteAssetsFor(part); + _jobManager.CloseJobsFor(part); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/AssetExtensions.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/AssetExtensions.cs new file mode 100644 index 000000000..2aaf54720 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/AssetExtensions.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using System.Linq; +using Orchard.Azure.MediaServices.Models.Assets; + +namespace Orchard.Azure.MediaServices.Helpers { + public static class AssetExtensions { + public static IEnumerable Filter(this IEnumerable assets) where T:Asset { + return assets.Where(x => x is T).Cast(); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/BitExtensions.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/BitExtensions.cs new file mode 100644 index 000000000..1edbfdf8f --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/BitExtensions.cs @@ -0,0 +1,7 @@ +namespace Orchard.Azure.MediaServices.Helpers { + public static class BitExtensions { + public static int ToKiloBits(this int bits) { + return bits/1000; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/BooleanExtensions.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/BooleanExtensions.cs new file mode 100644 index 000000000..a34456266 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/BooleanExtensions.cs @@ -0,0 +1,7 @@ +namespace Orchard.Azure.MediaServices.Helpers { + public static class BooleanExtensions { + public static string ToYesNo(this bool value) { + return value ? "Yes" : "No"; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/EnumExtensions.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/EnumExtensions.cs new file mode 100644 index 000000000..3ca875df1 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/EnumExtensions.cs @@ -0,0 +1,13 @@ +using System.Linq; + +namespace Orchard.Azure.MediaServices.Helpers { + public static class EnumExtensions { + public static bool IsAny(this T value, params T[] values) where T:struct { + return values.Any(x => value.Equals(x)); + } + + public static bool IsNotAny(this T value, params T[] values) where T:struct { + return values.All(x => !value.Equals(x)); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/FileSizeFormatProvider.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/FileSizeFormatProvider.cs new file mode 100644 index 000000000..42b06b790 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/FileSizeFormatProvider.cs @@ -0,0 +1,64 @@ +using System; + +namespace Orchard.Azure.MediaServices.Helpers { + // Credits: http://blog.flimflan.com/FileSizeFormatProvider.html. + public class FileSizeFormatProvider : IFormatProvider, ICustomFormatter { + public object GetFormat(Type formatType) { + return formatType == typeof(ICustomFormatter) ? this : null; + } + + private const string FileSizeFormat = "fs"; + private const Decimal OneKiloByte = 1024M; + private const Decimal OneMegaByte = OneKiloByte * 1024M; + private const Decimal OneGigaByte = OneMegaByte * 1024M; + + public string Format(string format, object arg, IFormatProvider formatProvider) { + if (format == null || !format.StartsWith(FileSizeFormat)) { + return DefaultFormat(format, arg, formatProvider); + } + + if (arg is string) { + return DefaultFormat(format, arg, formatProvider); + } + + Decimal size; + + try { + size = Convert.ToDecimal(arg); + } + catch (InvalidCastException) { + return DefaultFormat(format, arg, formatProvider); + } + + string suffix; + if (size > OneGigaByte) { + size /= OneGigaByte; + suffix = "GB"; + } + else if (size > OneMegaByte) { + size /= OneMegaByte; + suffix = "MB"; + } + else if (size > OneKiloByte) { + size /= OneKiloByte; + suffix = "kB"; + } + else { + suffix = " B"; + } + + var precision = format.Substring(2); + if (String.IsNullOrEmpty(precision)) precision = "2"; + return String.Format("{0:N" + precision + "} {1}", size, suffix); + + } + + private static string DefaultFormat(string format, object arg, IFormatProvider formatProvider) { + var formattableArg = arg as IFormattable; + if (formattableArg != null) { + return formattableArg.ToString(format, formatProvider); + } + return arg.ToString(); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/NamespaceHelper.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/NamespaceHelper.cs new file mode 100644 index 000000000..1aa122c91 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/NamespaceHelper.cs @@ -0,0 +1,27 @@ +using System.Xml; +using System.Xml.Linq; +using System.Xml.XPath; + +namespace Orchard.Azure.MediaServices.Helpers { + + public class NamespaceHelper { + + public static XmlNamespaceManager CreateNamespaceManager(XElement xml) { + var nav = xml.CreateNavigator(); + var nsm = new XmlNamespaceManager(nav.NameTable); + nsm.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance"); + nsm.AddNamespace("me", "http://schemas.microsoft.com/windowsazure/mediaservices/2013/05/mediaencoder/metadata"); + + return nsm; + } + + public static XmlNamespaceManager CreateNamespaceManager(XDocument xml) { + var reader = xml.CreateReader(); + var nsm = new XmlNamespaceManager(reader.NameTable); + nsm.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance"); + nsm.AddNamespace("me", "http://schemas.microsoft.com/windowsazure/mediaservices/2013/05/mediaencoder/metadata"); + + return nsm; + } + } +} diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/StringExtensions.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/StringExtensions.cs new file mode 100644 index 000000000..828b27515 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Helpers/StringExtensions.cs @@ -0,0 +1,7 @@ +namespace Orchard.Azure.MediaServices.Helpers { + public static class StringExtensions { + public static string TrimSafe(this string value) { + return value != null ? value.Trim() : null; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Images/Loader1.GIF b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Images/Loader1.GIF new file mode 100644 index 0000000000000000000000000000000000000000..a54810a890310680c44badf3cdd5b08170fa234e GIT binary patch literal 11824 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 literal 0 HcmV?d00001 diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Images/Thumbnail-Placeholder.psd b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Images/Thumbnail-Placeholder.psd new file mode 100644 index 0000000000000000000000000000000000000000..329aa1903c24aa7935735b7b16661f2ac9f45170 GIT binary patch literal 77834 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 F;y+dhV|D-l literal 0 HcmV?d00001 diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Images/Thumbnail-Placeholder1.png b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Images/Thumbnail-Placeholder1.png new file mode 100644 index 0000000000000000000000000000000000000000..8f2f01e4b05f622542ae211a0d25d3891a1caf79 GIT binary patch literal 11679 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 + + + + + + + + + + + + diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Infrastructure/Assets/AssetDriver.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Infrastructure/Assets/AssetDriver.cs new file mode 100644 index 000000000..7f37289a1 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Infrastructure/Assets/AssetDriver.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Orchard.Azure.MediaServices.Models.Assets; +using Orchard.ContentManagement; +using Orchard.Localization; + +namespace Orchard.Azure.MediaServices.Infrastructure.Assets { + public abstract class AssetDriver : IAssetDriver where TAsset : Asset { + + protected AssetDriver() { + T = NullLocalizer.Instance; + } + + public Localizer T { get; set; } + + public virtual string Prefix { + get { return GetType().Name; } + } + + IEnumerable IAssetDriver.BuildEditor(Asset asset, dynamic shapeFactory) { + return BuildEditorInternal(asset, a => Editor(a, shapeFactory)); + } + + IEnumerable IAssetDriver.UpdateEditor(Asset asset, IUpdateModel updater, dynamic shapeFactory) { + return BuildEditorInternal(asset, a => Editor(a, updater, shapeFactory)); + } + + protected virtual IEnumerable Editor(TAsset asset, dynamic shapeFactory) { + return Enumerable.Empty(); + } + + protected virtual IEnumerable Editor(TAsset asset, IUpdateModel updater, dynamic shapeFactory) { + return Enumerable.Empty(); + } + + private static IEnumerable BuildEditorInternal(Asset asset, Func> harvestResults) { + var a = asset as TAsset; + + if (a == null) + return Enumerable.Empty(); + + var results = harvestResults(a).ToArray(); + + foreach (var result in results) { + if (result.EditorShape != null) + result.EditorShape.Asset = a; + } + + return results; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Infrastructure/Assets/AssetDriverResult.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Infrastructure/Assets/AssetDriverResult.cs new file mode 100644 index 000000000..cd432254c --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Infrastructure/Assets/AssetDriverResult.cs @@ -0,0 +1,8 @@ +using Orchard.Localization; + +namespace Orchard.Azure.MediaServices.Infrastructure.Assets { + public class AssetDriverResult { + public LocalizedString TabTitle { get; set; } + public dynamic EditorShape { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Infrastructure/Assets/IAssetDriver.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Infrastructure/Assets/IAssetDriver.cs new file mode 100644 index 000000000..3c72e8021 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Infrastructure/Assets/IAssetDriver.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using Orchard.Azure.MediaServices.Models.Assets; +using Orchard; +using Orchard.ContentManagement; + +namespace Orchard.Azure.MediaServices.Infrastructure.Assets { + public interface IAssetDriver : IDependency { + IEnumerable BuildEditor(Asset asset, dynamic shapeFactory); + IEnumerable UpdateEditor(Asset asset, IUpdateModel updater, dynamic shapeFactory); + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Infrastructure/Mappings/PersistenceConfiguration.cs b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Infrastructure/Mappings/PersistenceConfiguration.cs new file mode 100644 index 000000000..f24372f4c --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Infrastructure/Mappings/PersistenceConfiguration.cs @@ -0,0 +1,25 @@ +using FluentNHibernate.Automapping; +using FluentNHibernate.Cfg; +using Orchard.Azure.MediaServices.Models.Records; +using NHibernate.Cfg; +using Orchard.Data; +using Orchard.Utility; + +namespace Orchard.Azure.MediaServices.Infrastructure.Mappings { + public class PersistenceConfiguration : ISessionConfigurationEvents { + public void Created(FluentConfiguration cfg, AutoPersistenceModel defaultModel) { + defaultModel.Override(mapping => mapping.IgnoreProperty(x => x.Infoset)); + defaultModel.Override(mapping => mapping.References(x => x.Job, "JobId")); + defaultModel.Override(mapping => mapping.HasMany(x => x.Tasks).KeyColumn("JobId")); + } + public void Prepared(FluentConfiguration cfg) {} + public void Building(Configuration cfg) {} + public void Finished(Configuration cfg) {} + + public void ComputingHash(Hash hash) { + hash.AddString("AssetRecord.Ignore.InfoSet"); + hash.AddString("TaskRecord.References.Job.Via.JobId"); + hash.AddString("JobRecord.HasMany.Tasks.KeyColumn.JobId"); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Lib/Azure SDK for Media Services Notice.docx b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Lib/Azure SDK for Media Services Notice.docx new file mode 100644 index 0000000000000000000000000000000000000000..8400fcd5c1a08307072647eb37b0e05d3de82210 GIT binary patch literal 19754 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 O_N9lOo_2vxf&UkmJX})% literal 0 HcmV?d00001 diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Lib/Microsoft.WindowsAzure.MediaServices.Client.dll b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Lib/Microsoft.WindowsAzure.MediaServices.Client.dll new file mode 100644 index 0000000000000000000000000000000000000000..e2b98a0a3f389de70d2a2801e7d075e8a09e9547 GIT binary patch literal 202992 zcmc${37i~7`N!ScGt)EMdt_&Knax2Cj)Z1sH-vx?!WB-r?<3r2kc2>onM5VS!~mkG z0TBTO6eZ$?iYJN}-r|W7yuc6!@#Uchbd6tFu;A z;+Is;yL8qC=UsMLymHq0OJ-G8T{dg!WwQ=G_QYA2#uqM`+t(NFn2Dg!O`Gua7`Zqpw(#J2mbg zdT;M%>ITgBW2!NXrwf~Y%xL|X+4@1L!_lF68BguC%kzqUv>mAU6J1^qf0Eh=1AlX{ zJ*esq!V{%TrqOJrBhzS(0JzvGLDUUcPe=sD_oJP8IdUI|Tm=FvVydkikGhmroYAxW z=p#8 z%;?nWLA+Kk^D{{{_et4o2bbAgjIe^yi#i0wNVeHVtuLJq4+WLm>5eNOrbyAj(9X1| z5lKAsYu_bo9c|tpv1deq!m&BkKrPv?Z6K63T>FkF97;xWHih}IARhyV8>Ms9#(Zy) zS31QD$=0KjD6(IBh-adhB$p2oMz<_hKLO?5Lawfi3;o%;m@D{o$c}^zY zK_ZNg0+Y9{cr;K$yItnjz9;6IZTk|nZQ4HH9i3pjZ#bK*BE%f7tkcw^lYsnn zkn=a_VezArL2eK;(J4UDsrnp2(i75^HY`?flh|o|j$FSQx;^<)us$ErJ<1X7tek3s zBTymM+-PAzd?xW5A{_POdE_y&xr>H0#8@zea#9Ayf{FHmI%pVZ^!kB>So@(wZx(~( zv(h)axLEx>G8`%-V(N)blt|Aa%hj0(DTHIwoHASrzH~i_x}tMHSI5~lFxJ0D16a=*ja|LvohL?ZDe_pa4TU{x zGz#`+qH8I`P_9_0-Ypul|%~BL| z@#_qzt929$)>JA|0KnE@q-Bz7Zmnb~(xIRj6j7aDP?H%`{bR_L*Gx}kOsfjsnXwgSTxv6WUxSn4DL8BZ|8D*KS<+>R4YkE?Mp?QJX z=v|VXpr9_2 z`I?^AJJZ>NJT?*A&aIZM5g(_I#3Ov{uQ~hw|Rr z=|Clw=d0x1TgcRvq>!zPqRe5%#~fCs1ywSIg5?M5>l0AX3R=&2 zuM4lzjF}X>kLVS!G8`6$>td4eS~|)`-@5oM)bzAbwq+O{t0(bn44t30o_CSdjiExV z(W5zrhQWAw;*i;WjV_@fSFhmVxMXa3P&HMdAax1dNv7Z` z;33#(ZS~SfJuXHrz6+w&D(PJDhYMCYg_^{iH;om4m-yuHHRZ69nDHtej7?dO{@{&J zSK0XQ#K}a92^ibnuep(9Y%*48{1hSC_zyg*?}9>%JVUD5Y|kTjPbPgvDkzL!&I7km zbSshVBcfY{W1~(?uORhgvn((NU8ME-5!r=JI}5_oF#B$TF6uCu-%ZMy@s+J&N`|2y z#HiOWdJ~xd(+R_f_Jd;HqE@^8oaVMcd5%DTc$rX5W(N8U+w0DY5zXOul*dE5Bs&B=`|c(P1@1_2K!8gY4o>MOLZ0M9YB8V zHxL8;Py_u=L;t_b%IYugF|v45k#i%P?{vr}T2Db-6`~!efZDI%$u&GWTiBDI9k1nG zd4x{tgkUW|<78-$7*UXnX&$;moNo?Z2~BJ6v9)ds%g0!=#QTNClN8hP*M7}M{5{e* zPGgc2F_F!NHl|(M%y_S*Y*>NC>emSlgG^mygKS+~1i8A(K%1$Ha?qcvi&o&*#U1qy zBSGCbxY7bP2j6I9f>j#MiC)Ds*c^N-MF+-B{A!2(rqJqZ3HmxfYug!*1}lGiu|xr8 zqETk|;D&h(;hC}NY5+~iNbzpU%-Q5^$_@{7ZOo3*Pt^(=IDcbq48vAKd;^!+*qMMUzFm{^7=1vc%NPpU+(%y>ts&z-(}>2smxpsYatl-he!SBEkHJ@ za7x2)rn^li@0RN1cN5L&WTDpR(W;Z1>b1uy+`Oq-WG{Uun{0-)_w7iBL?&vue82#~E-hS;Vo=%5sB?$H6Qjx5gz;yGM;C+_Lnu%|O z!@8)deSI%&v5A8DgL2y(e7}K~f*JIkJz6kx6f4fMakg5+CT+tu4AVUAT0Hr+-}9uy zy5cCC2)*Wt?XcEz{aV7o5860z<*`;gx)lNZ?}9S41yq;)As>dpurBdQK0j=*;S_Mf z-H#e*Q^2hPF>Bt+Y-4}Ix$JrqdZU1kwv#Zyj9R-y!+NyHV)eU3k=IG0%V+D#8w=XR znKyZwd6OSDZh1+zl|R!8qc^A(Qf;N(>Ce^-BkA9C#-V9RpytnCG9{TDGm^=8enfmR zW-F@OoG8;4PhIA~Ph^6;mQqVv0fC2Ogc%+n&15 ztU8zh>z#Up!8*Oh#%$EBpkyl+M)p0*V^jZkyc(fZqn3 ziQmq1Bz`_-?TozmsQ-Js&zlhEXIu$@RVC z$cJXhoc}!_GrP=kKv*8~r3DW|iiP;S1O+3DF(c;x#?OqL7T*J+C%;ai<3qw^A0V^dLR6w6M~6pmsGLYe&zxMn7xY@mt#WM(Lh`~( zTKyoQbyZTb>^HSq!h*mjJK$bJ?v>XowQhMo01HeF?TvSu7Mk^Qby`{0$BsHwZ{M#O zx+ZKU`U)xP2LZaap7Bmb*7RrEh_I8ZAA*yf{76jcLS7%yYjRA>2{np{R1o)3PTvRy z@dqU_bo7G|u6~SY@qIjk>V4>1mq*T{U|yHi=VysEmFBCz(-uV^Cu;I_TiaI>R_&$0 z)|_qpY|{D6{}G)}|L^FeRX{0Zlc>E?R%G~Bnn?5sO0|;jt}rOY_w(V`{tP~d`%P|t zG5AB0n^yJ19zP#_6+Y^JBA|7tYt*fC?dkO&;%qkAX-AP4+O=5S2my^tBF(rYs`*@9 z4EXVMfi(64Ty7o7s*g;a?-wZuovbN5E+1leBE-zjyj)TSC$E*vOwJd{tnYXRMdDqox_7 zp48VeYJVQ;ANd^(zQrF)2bDioSR893lza<+?8J1-$Z6$sr9;mj3oTo7Hvj~c=MV@0JCR^+CmPJ{lu&a! zk=NW#B!d2+E+RpHzOGDy{z6^ZFy}K~f|_VVkB~(=xBE%jd;??D=5`u0GBz&mO8%MX z3$y^{5kt%wzeQ3%`UcO_<1ea-9xAVKe|ES(*B?aR7w@SwaIpP{-2B>Rdp>JV<_Tb! zi}CdB$=nP$%QO0cl3U&{q3rWj_9v1)DH`-i5us0tN}jTdPM)%hQl7GlR-Uqp8YZP> zpSS#*Wv0viG%a)dB`aBj<&<@FP{F&;rzgTgi52ug2-doJT+c|`#qy&edW2P@S@UJ+ zXe0>tx`b2{gQbkZ1;;l+u4D|#M(Fo&tZS6MYs3n|{Rj#4b(<1fC9NS#X0Kl&j24m! z*iZZfoMa#)TDDNsWJL6?WMs=mKZM?#B$g1%6IhwWsG2bTI*;XNGzO5N_l?rMJGpFISYujgr9-`Eqeo$*F7aT4q!phNhxwSc&%o1&nlBaegFRKWL@57G zIDVQ7bk-=QO=8au^%i?sVzhLkBwusrtlDC)S)?t2nu>;k|}`f8^h#l)jgD`gab1B)o=ydXFR5Y1rzl zLf{>t?>$L3u?5MxDzHfRQ|%S$e`gvERnjT6?L z7>BKN#e8X5UG1bu{nkXkKL^lW1t8iRY7eWS(G#j6^+i62A&6%Bn6MH#8RKmS*bYk?QxvyE<1D^%nLPbK{eWIK_UR zDiIcMbA6?uYcYYNpQkxmuix1hQ>xnMW3CX>g^^&*R0irH z^jj%yh03N6dMZ@oLOi z$pn(!{EOen_nh{Q&sPpLP;ibsMir|PObcw4|YnrI(jAVJ>g{-0Z+oABW9|<;}Mqge)abP zN{39l2|UTokA3d|Xfj8!wda;n zW5>BtGsuJ?TTNfaJNhS&Ufh$<@MfRs*LdL~{ui(2L=}1(+uxb-yoKUbiV3AYoqjT5 zBp(}SK_}{W3enI90E}5i-R_(#d)PIC{lNKM2`uE5cD=G%oO)7b{7l9kkNM<$lhovUrh*(2b_9Z)nm)mL_e%QmHs;aG-^c z3lcuMGv10R*JB=Z4Q*50rk#&%Mq1j``rx9B8( zOAMMjLi2K~5~L<>LvZ>jJG5iLi02i)vz88oOJ2SJrIY#G@&AK>39{G-pb;bqrU z!Qa$^=hM4@e-DBiCGi`9rNdhBp9L=wKLB3z7xC|O`t|Mn3xV}F!;kymcQnHunMH;n z|1~V+xLp~)mVMAqgtbB$UWXdWnEbB!`!#loXere-{{hj`SbPW>?k(N)i-!FrWg`1a z4ORA+nyQ&yQV0Nrx*DO(E^D@VYs-m38Y;ARsv^D%H7mW<8yiL%wuI=~0(4z92BOi) znwFRJl^JaU@`E1ch{_Q$KnHczBc`485Q`*^`yS67|%cYbadI&2->vBbclVtUYB>Gzj795RZ76M=_|Y z3KH{9hN(12k%{6jQyb6hyB!nz4ywv*YP5|gl=S!k&7x`S{jiN^XY5Jj&&Ro$kEzAC zIrx=wAAx)+o-8(9wr*LtH3tHoi@N%b^LZWa`A530F~s;kqk3Zv%@7*jf$xFv z_N8pIq$-xNmEw%$5qcn8IWF&C-#S;SZvyT0e=PjG}gu)kj%XaOFE|C1sg{RfQ zQUo~-8)uH^$&X#E&VnF5?sz-i?DUv95N!|C+iH5saC5Q`yy2-%ZD>u7iL(9K8JQhO zMW@)27kkE5H*&P-YG|n*m zc;_PwI^*!9G=BqN=;Rb(00=a=D}wiQWI z5oao;+Q*m4=m2<=&q&DGeJpFdh9;D70OSJVogp;yxcQTl&rv>c)QEDNz)BynsD-&W zn2p8&Vw}gMSENh=E0WQgyzBlhB%0fZ6zu|tSd5hfZ&VE*%_DRu#~f`}fHT5?*2}2d z?M%T!GEelqkKgaw?xB8-=8~;EMze^gGLq50W%nOJnGdAQc2;J-GS5W2>E%be^J>{f zuH-DLoUfNVPqQ~Gw$&FAi}j5?c-1c;%;@I44?(vdx_(Uw_PUKvzozhbPhxJE&gYg} z{n6(^%kF%d8e9Em5p{zeEn90vvt_G4mg~fH&%e`l8bXM+l_XjiOSk=h#PQ9t-_`2X zXGxFHij;3A>$bE~jv!t@VMcG*TI5`$hz%#D_WLvNc?X$nc4S;}a{d&NHo(n9smMRE zp+ost(K+)V7{@w7(~=jIhvuzOdhz9ISZgnO$yo@&fYfWJwf~`9_0mY5^*Zx zN;c;+*T-|#ND-?P>zV(bgD_{^+=Xqo5b3S9SzJ$Ms8AZ}Uhp&83G<5X+j|RUpN(x- zh-qfwUh128F$Bl^=&>)41^0q2#QOn`O>u!^+G=mHE+d=7qMi-c#&BOD-d~ZIcGs?< zD&1GiFdD>*z>n{|1>Qwjxjm(=U83fD0P*IO7d(H&1BqB3$VZFSfDYorm??JSRKoLF zEZnek|3Um6d7FHcb{)va2NS7!2oHH!R%<-W*@D{LX0n|_y zcTIU7Zh+kFti|l4SR`O!C?g35tfUJUzg5zgTeO&i1KDfY8m33g)!z_L>ui!K#;jP7FHw15!K$|NHHEPyHk(byKCH2) zME`K;hnyi&1mY=C5YdNP`-iV}6Zs<=XXhfKS(#eT&cUG0&h0D`@e$C~x=YqWU3)JU zpT8qN$uU<~a(S%kikpe5WH(W{g;ko97PYOB#z*qe-4mFybcefw3WZ;RuYkj$LB6s* zCF6h?6Lb!9=^Rgy4THZ|2}znrkS0^^EsXA`W0rFpk{As}H*ZZ{thtazW*ft4-E|W=Q%w#eE#7k0y0U$0;5e9%*nj#DUu`ERx@KPtyy1Ka^9orP~$rAAvGCOV} z%coGuFFv*n3xleN5jz$x$6opO!6$Pj-xU+kQt1oPE zc5k*6O{4y=r5zk0-9)dxv(c-i?cUS)s=gGuoGXamz`Kx*-=vpzof}^#sTdPV(UZ4w z1a^>={R8T1Yt|wT(*&zXU!@U-YlSj=ydx!cN4T3>)?X!Fu~}A06YYcQUTtmzF%ETSY1P@RM6F8 z7!`Db!p|mqQ$eRGd38Rxx+1t}@YQ;D{t7~$|7?r&$b5J+J>v9uEb48FL+znsFHDz* z)3?)s>esjwu~X-3l&Qf8qsp$pwJ{zJ9pi1l#eX_^%^^XCdCWl)5`RhDaf@ro<~G4y znjlkKh)tjyT?t+7aCiFsh^;x>g<65#WRQI{}-_@7MZ;tTl3WLd(# z@CyNZs(&K;zV2eSF7b5d>#7O1kNsJ#xK0^ZSFVYc^RVzCu57PE;<~ZolHxCEis}*w zyTDw05%Bm;_|dd1m2(m@QW~`Xm?mi@+mP2PuktJBcWK`rp7YK{hR3SD;sG_8zz%k6 z3%2XBw}Gsl5ASP*GJJCncu#(Oj0CqaN+g=lN;A`*?qiciy2J=O5*3rYzp^YJ*qqrrvQdW%p|f z)HhVP(tdOT^wXX~{D-i_r5rBUMfhf#e7u6_Zf{IrOI&?ewU>ii#!gvMHx{_M3ndrX zEpM@C&XO0qRvfaJJk7&wejM4fd)YS)u&zc9BI$B)avki7 z89&2?pHuznv`VrLhrT#~mZv&+)@UR9!5=D{9V9d;(IUSUkI!}`AxB1M4$Cr`iRc7s!1?SlaN?@P)V4rNi3SJsZD6> zl^TmSfT)(4qx~&ahN->ddxOy30lKpoLTFyWviaFyS-Hz!Iy%ap;%u~<&Oz~QJi$%i z;hr=*1AamaOpFb?JO~>Vlf=d%d4~!mXJg3shMyrx>%1$kfNqDRNm?$`*~X=nO|Uy@ z@f8)TOzpIcUf!YU2zQR`Dkfmq7j(y%QY{Yb9|aTakXMrH{}*T`IgoqrR%T>ee^jwTW> z=hZYF>q?zCHrGSAicKoVCJj8S-#{2!as2Gc?GR}FMrC-fU(*|N`zm#tv(&b65enz7 z42kZ9jQN|iDDs?fvlg%6AcSAdM|R|mBfa4R*^eH&g%4zVm@&Uc&g(%R;AdwnXvFku z`zX;~aN*bX6}SQ($9HyP>1oZeR4zXkLvBC0=aTcvmMS^ZTH9L`+GU1{G`iG%&|AeR zp}R10ZZwavUa=1fGWU2pX0&1##7rof7@5{;^M(;Mn}4$@%cX$zg&?~l3>q9Ss@-lk zOX{{+5}vF7k@zv(!+2+^-Rzb9`EvDtJ#xf%RjmG`S56=+U$X)qe%>%CGq$ zBy4)uI%u*^q3#}IL53R`mOAL$Y4AQljr!}*kp2ceTJ)_teakw9`R3a7^z*Afal2_DIsX6snJ3QXi*Fk40Y~mOnF$ z9?*Mo^m)Cq5w>uUt-LAct*GFMUQz9(hlSDm)z9wb(c@>hE3Nu@6jF4*QutMTuR;B8 zxC1^)@H-v6KXK}BcQD?OpnjKwCkbXaR{Zl6{~Zqgz2J8_c%$HVJNSKq-{WA~dQg9_ z!NbnwaZmDbheF=xVjT*j_4fnIkNE+;xsoe;^z!LS^dvqeJC9KS0TLBiU-U!V2jY z+{c|VIhXh?3r>|K#7u3cPlsF@yr@6{;yw6l0 z&&1b=iRxzf+81GEDNjpYBCFh=yC|!{7>~dKt5QH)NAx} z+5oe~=oe}WH<`B$OYJ%mRk7Mb;MWR%9S=L)u4zT>qiOpx0K~^qgaIJ#OA!Wu_;`vi z0K_L!gaIJ#PZ0*N3XrYz6ucE{J_0_zp8O*XM;w|qWd!TL=aYfvw|cQJMlW{m{6>*d zjg`JBuhtytW!||eckKYQQ*9BC%8SXPasdy&b|Bv|K5_1`)g$c{*E8g@*KaRH{-bndNG zZxp@T?y+Om<_|!hd*`d&Ro@6x;f707^;f-_?;yT~=Sm^fYV%|h{TX&R#SWf}0`hS; zxLF^{VjVA!-UKrGE8*>q7pJfC-r>hNo9@8MFDRHBWmLsnZ^ICBVs|=(_|<2i(X8(J zCyB(gO|SUP$w_|6_OcddT+hIu)3G!A?+iv}_TCvxo^fX| zW%`}L)MTODMBHw!n7+npgQFoQ&8h zbZrEjujc(W3KnB+>G%OgR_l>`POiVpAKTG)JH+2k#IX@>8Nitr#`=oy;-Sly%Sd~B zRv-Ud0K=$T)SaDucjLQhXTP(7OU`*#-_^iq{pU91@)ETLddN0m+CxgA z9f<7VYD8jNcj(R7)d54L!f0dC;`1-b?8C&35`bEUzotnSAwc-98bHdB0>N0^D` z+_EbB>VI=8Uvh5r$5sXp5rZEPgZDZH_k-(0g={b^J+LGEE)~DrlnuXrT~Sg7yTG+D zsQ4&j-A`1kZiad0=@E*gTvulKnw~13gIwm=p5fS3BZyDp*|rj^>$Jp;_JC9vtf2=v zN5e2ptomUHtQE@e(Vnf6f)}-KRGN2*+LCTJ*JiO{R{&EN@khjgI=n7CFAFM3U?ytD z=&wnk$*?p4#Me`V0U*ASA`Ae*B*i5$0K~UagaIJFogxeX@lc8|0K|7vgaIHnqzD6W zGu}t(qsP_D`1qVYHtFM`)k}Ax_5G|CQE589CzLz2lVEoNlJ6TShXsei5 zZR}_DYhUJb{8)I0HMdlMpv$c35M>w8A-XQj?RoMmC+a3Cw+Sb3UmQLldG!;Nu`Ys+ z?1YV|vWOx(=J^OQalQv+sAHHGY08OD8`cOEXbg2}_oIY%*?L(TNyP z%klkUOytWw)lULfKg9ztico5=;)8ie!pB#@Vi~uHWYP2GziTspKl+;TWk4*)pH{vi z=hyTcy@!^q8ug=%#POrY?D-R(84cAf_3P~Q*TYl4$wsNRHi_R3^LxT1-d}eB7S#ql znv?hqUlMcFV9N@@R_2n)W!SSROv^;yMagBPHODkOXD9@f-M-)Chw%RV>pU&RINXYHM57ocixre3RyndsITZd} z1}=0_p~U_(6&=0K^YdgaIIalp+iO@o0)L0K{V{ z!T=CIP7wxx*q9;=0P%Q=FaTZsI~a}rEpGYvlRo~V5A}Kc?bI7}r!}D%FJm}%qMHmK zNq0_MNtz7%(UYW^I3u>uu{P1Z`&HmP#l0F8<(N9{;8O)E^@uN}q5Nc9LuYvw}=W^`QCP^tTNF*wkj;*rScjX zaqGjWyii3)lQk!fcsf;NeOS6^rT8o)eOTds^aT2c8;&K=X0hv{kT*Iu8oHs;A(GzP zlA_UjyW4y3L|ya@MS6Z+=f~e@6F4Tw&NPvR333o0>3BbrWQ_LwG+0pmCaJ35;!zh- zZh}^}aR2KxdjqU3T}%F}RNn(6)NeESyyFZHU==P_ae#XT_c=Heyp3Q@7LCVmlbau7 zZQH)6a{L{>`^uBM;|%~@>?ywT@nK5%T`=8l7upk>!fp=fBzuBTM~Q88vbWLP)*OQBBh*0r zJswW?mdGndUVb#9`ayw(TfI|V{2fdhYq!nz%8|co8=O5))7{D*`YA7n2iO0lJ2Gm& z-peJc<0&IvRzDsUjWhU)%RrpVF;Dc~f-6hZY4$Sk7J+-Z7^f-ri-0r7jdy3VlkF#N zj^``-8M?10YZ}fSerWf&rENCwE?nl?tb7SQU7l=u#?(yGXS>M2_0RbGh@KsvhqDLl z2Y@{p-&#OEE)XXlpH44YM`AWG>KPqEg^X>Rw^HTfL*UU}xZBNvcTU@I==T8_0eP+A`p5kA}vLe9yl%^@&dNPPts>yw04v1+ODA z@hs7;ouF>En0(YOGu~=sxLWo4F`2P0*XrXCV*qE3g&mxgkzNYM0t>g9=a{BrhqCUKEB1C*c5Wo4fM;`EsIep4@&1{ToJdF24x_sr_ z*CKuOxt*Cma62>mNY&?3wcRktKE4ZSfz;LA{M&h02c`tAMDLzWX z+ZEh-6YzuJ&jJ_oF9g;fBhzovk;woMPo)S0K>RjE7y#mTDZ&5{zfTbcfcQg-FaX3K zQ-lE^{*)pN0D%Y74bTRF_)Cf~0K{KYgaIJ_mLd!Q@%I#A0EnkkgaH^0^QnR8a2^_z z|0fMK0K`91gaJg~mzY%+Ty#rqw14A+sQ*l(8UW&%6k!0e)q2cHyleCbmoZn>PSh>C z`O!kLv?F)q=F7zsrgM44>Jfx8e~q^19q+&c zcuerPgO%DeGI)azb$DeSOFM&KAXw@dcn`tS&%nyx^fRyoVvQPD@`%->f#(R`$-$A} zogFNB$GbWBAi)OF-FGUytqCZ6#0Af;#FaX3r ziZB2~F+~^vVlYJ*0AeUb7yx28MHm2Ln-pOH4dPhJ5?#qdt>X-R)b;U@ua!Ft&_D2u zmV)xDe-yZ+3BJU@eHnD>-6Cu4#ocdNS9_^3inZRixijMmXDWr|eoIV%E$`c$m~I)} zeC2bcqd29sI0k?iNf8Esn4BUE;P>jpYP<-hF}dv{6Ca>2vzyMO49=d;6HWfBBPpb_ zr`cxqCnV6Ez+g|WLgzN@=~wWP*wcP=q0-@lN&HtL=hyVKb@gUGh5tUEyIS+%?xogz zM9#12Nj_PvQzzvKl@Bh;|Drr!Y01ZrE>>-u1gdYwPOFQcU(*vclx#gghQ994*FAg5 zUdv4UXN0yABZR$`T)e;#8NUuv&NufK;=V$Ce-eWwYa|Wsum)e*um;^s`@68yINgy% z)kGZQ7;`stGwhIQW_vBwm1W*CF2(;MX9u@bokLJKnAAP!0~)yhqN@HYj|sjYJYX-t z#!V%{JozLU1+|k^Zaea6?F@bAtyQ^;DmOkmg|`>~RgL0rStQZS8|AiQSXRkz12u(k zf9k~>RJod7ymlYn<^NT=PH^)jH(g>faw-hz_xMgxF=~r>HvN;gQP!(e)}f@V3T`j! z^;;>cNal@jTUjk9^H?H1W#3xwjUsQ;R%GgSSctz-t+VW0_Mz0c^p<2X!aE0_epHn# z{!XMhtrMBl7t+sGdwflewKKK(*`#f4^UYag+VD@4Ow{lL+<`THafAm`J!?~|RCgjL z?`p}al*mdkT4corpx13hRwB!JaJ`~elUGNXOr9u{kryJ9RsW?-+?~DGP?n7A{N+<; zeYu<8B6u3P`d6MM78wF?)ip+-9`wT*;7v>%+iV2P-Ii-R2x!GsUyRa@UMqn%BSx>} zd+bfpEm`>ky;n+>Qz)N&X37(vnJBf06istoL!@mI`#2q^E`|bQtEKs+{p0=SiPlhkU8}nf9Z0&cHQ+U#vknTS3}P!_Zycva6O=4yV+$c4NGRA2c>*EHGb zaf_l4z$($tXhhG)w+jDPx&Zhy8~9+H*{*{0OS|l{V<|gr(I04S(Mt9DMk>lHUF>rM z)v0yIw*C6{zSKigLou-B`hlia4EmA2%1%)JiYY+ro$~+nIkV5(8 z)p%HdE}w3>dy+3*jG2$OA#fv%*S#w@g3?(`nFreY3bWxJX`J2=Cbr{>$?t@_T6v`4u;@h zsK{NUaIh{>LX*I8sb>1u3`8wZkp!quQaWTx- z`5xf^3twj^o@{de|C|3+_S{0``&!y#w#bH&Wa!oIuU7M zh^C=Hr%%hkrsD-iYgE?t7AyXQ5q1%eP~ed~;_0x2Quw3`w3Li)Wp2FhXQT7=psO>) zwa%p<-IfZ8XwFJvdBQ1z?0|*4x*;`0gN05Y-A>p&~Rw+T34BRZdrgjPu8kySRcW0wgH#I#3NL_g$)ZO>k~=Y{8jh7JMp0O|Le6U zHlG&wxhXVGIXYI4<9N`xnZcY5U1l)n$m-SNkh8hf_^wx(rcov}9>0DrF@~|3CK{b} zQQ+r~2N1YMyNoRxa$ANi8FGDvNEdUKLy}gjgkY4=Rz;FfJHVJ53OKi3zL3V3za8`P zYHL0gH;MNAizM5%P78+fHV|{EtIIKZl_+xMmqybfqwxHjtFvf_9QiOF3%TeTV#GZz zV{zX?ZoJQrS5Qgub|fkH6yoi9>l7j;B?(%Eqsc4xcjPt)+iH3-ruL9Q?lk@zh+5rI ziH-+B`;)HvD(wh=Lh3)w#8)Yw9f(S6x<;`1Pc!iig3AtnvtaX?X5u#rHlJxGzDcn8 zOf&Ht1ZzzTI*rck9H*IPk9OWu7sD(+=R$Qc%;a-^RDP9E^vsW%iPs4}ShO2@)A>=| z`sEO1x`8sKKE$y?z$R=)W;=(PvvdBhS9r7z8cwmrCm@pzns2+cS#03O+N{m6+WUvU zPEnijqmvQzh7J**e{B}RC1GTWgDwuO&8vtTviZB4gtQ27Yi0x8@0U)+d5e9(RAw?Jf0z1p) zVgQKQDZ&5{b5eu>Aa+U-27riCgaIISP7wxx7)=odfGDR313-+W2m?Tjrw9Y^jo%`n zewBwDp6}zXQ1`zsbg^nrIe3gr7 z%uLVdi`x=&{BS>dJrNo{@o^%y`NTB@cl3$-kp}$gToTkp$`PF4r=G4n@KgU6d9?b& z{YZ9$AB(H%Ul^C_BFGi?JWXG=u4k#@Isg}dM+)+zciU6ObGn`- zSeyNtJ`g?-{+`NNyRi)bu^>el0AjBcVE~AQDZ&5{d#4BkKBEgk^_tob{4j zCbkW2F>bVtD>MgoTcBNb6KN`^|B~kRy00RkX^bvpzrnZRDHHutC2M~E$`v%(L%=1H z8n9~@@NDtZW1s2wI*ZjAveED~E8LGhM8opqw=;%Kp4$_xlX-p?MP7}kzP-qGQOz6e zO0(?P$q$h`$Kp2da>2>&+m`eVC-%%XGr;C?li@3;KFKK-m22Xzo77i5X;Qndy4C)C z92)q-iq-8^whs0uE=0e6kqYd%x>xq+UR#c@*q_YcpTquC`WE~1n=m`UP~FP-n%JK> zd&*H!k5hQ8)V#=D7qpRV^EG7=KLO#fftHV0fm)NeP$j4>Q6yV{QM+AB*>6(WXC?Kj zU{|kO)}aXGjZ8}&Iz+lpv03YlTHCIz)-c|F2Zy$IYL+cMV7X0PTl#f}nr!-6`?#j( zaz0J1M7t_E-SU96TN(i3z!YHsh=Wpu0U!=e5e9%bBt;ki;?NXfK-y>scyStF0Eoj< zgaIH9PZ0*BN!Qcl=SzM1(Qa)z!REncxy8GyM4ZbiML5T8KH=*(e)O9ZtR+erkF{PB zSv?PF=~@jLPx)*tyGh2R%K&Ex^OU*tk6bC5Z}jBf{yOw-?o3aYPBz_xIlkW5@C4#Z zqcP>8Q)zy5_?I^3<2H@v)S`K)v*jIeKgqA$left`KN8+LdFQgYJqRSuMHFWI5!`Am zzwl<|>FaLcpPz)XQgM&2%GjNaHO-697K|rYFNU#Lnh=oCNNlWhD_{YdHp z1MnzS$-@bj6Gccvg}tv)JnkV^91h6n6;CEYv`{jmK1IXX0Zeu6?y3wwj5~KKny*y( z2_%9I7pE$rx`2FFGt^lk5+AL^8v6`rP?Mg|c|U~SE!2g}b>Ua|^y9stu-B&qMtg}3 zjU)^2X#}+y8o$-}fpt>ea8b%ZWu!kb`cXanpBb#bL64T>9F|ji#OGH^r%4~3 zuE!ZXIJTMh^G=K=MQ!0lOS6N5N(<}9ND}Nm&^z86jASa$fhS*kk*hxTfLqLqLwM;& zObv+lA*M?d#QQ20GBi?WXU5q~Zq)V@9vQb~VMzI)eBFiPy-9L*wD(Su?N73v@-PPs z7Xhi`C~M0R+yUUmf97t&d|Shlbd7CquXvPmzv@20CHO*E`z|WSUpDfXIdJ{mQsOgb*t^HSVQKz`rMnDR zl*-eMO#M9Q=x}nJ)D>|OChV=U*`E!Gda@JIUb*gkiD>y!%z1!t4i^e?4|>ev1aQpO zd;Q{Bwk=ALTL6i}l@FF833W+OOqPagJ=@dd+S7ClO-SS%3Ee(l-aFuqNdCP+kC_9D z-*6s|lWzBPpIlAPCr|r~j)mj5q*uDn9GL$(G-S(t8twYBZGA{>F!i0&I=!Fr4@1J~EVppDE^R9w!^6?JYP;(lGPCA5 zxR2P6tsgI`Hbw}IKrSL}`YchAJ~V*AaV-OZ)WVqr#3ztelgkq!YZq)ZLfFEhUzc^! z^kD~4M$c|Zm?W!+CH4EP?y~e)FG$DEfyxRBQhA7nyIIB7saRZvg;2lVW<0QkgeBOZ zq*bPqfqOQEg)s&$4E=Cp-en72xBfQY>tB?%_YV0zq5Sq6Nb}3MBQ1@rPT5*k##}yT zV+Wct&2QZ6-`nN42Pc2Uuk}TY`jPk?3hqa2EeS_gXT~`6so=4}q*&~T(8(*|_>C%G zK6(4gj*W0{|IArwr$1BNTBpyAjpPz_pc`x|e{6)HiB3{xrWTB(%Vb15uhG`ZWOB^D zfzW>4O`ln(IxL8*V#K72H_M~Z#cUl2X-AppQ7mjsBpjSAQ)+iql=($D`mwf7(rg~n zn|9PdXr!SzY;oK6feduAfnQ=a@Wm}QaL)TN61ao*QQZMcwYRnX4n!}Z{Z`f%)2frX z&{UI>7-}-QNRbT9;$OI$6^?es>&mrYd6#TId|03}1ksalUl%Vf%*t1&8FOwuq)Fy} ze4#yguFcr7&6-|w4nnn?+b*Ies`y&NwL%$wmYLTW4t6#yE1Si8i}Wy=+vPfqT@ARV zC+uoS=S@?lI9og26Y*Bkv*ykD%-2v`s+QrcUm$X?IOO%R z6xX#d(HNOJCZFw)(%VubjrIJ>I>bE5YuP{_U8UNz-y}K;n)>sd{X0;37m+Lc#%t1t zeM>zp#>*d$mE2d%oHLA>sD@Q$F8px%ETXrhxlDuJI+55-)rMbHiYL01BH4c2eaP=l z$%|<1BjwG_L@^U4)>n9}`YYw+W=AU921)8s^O~G=kB8~Nm`j&$qvgj-i8MY?xm%oB z9@c{Vcp3O`(_%J(ybZNfIbaA2?-Foh2Sv+y#h3Evi!S3?xsCExBG;&|am zcf5phr3VeQv{0zVq*%RqYEWGPprQP7-c*>Y?@_ONH*fJXd>-SEL@N-)?D4`JZb=hJ zS+crI)qA^@rBM?HZv*cuc{pvFsaA}1DX#L)$18c3{8GG%H^q6WK6mAY-1ucc;ih~( zemTHKl(o~P+j%=5;jSfCo0~~~cah(SQN`dks`wnPAkilFL0RH7ZQdIgNz(@2d8A!$ zye5XrWK&GcYY!tayKSVJ^08_9)EX%yMg~9L6_n!DM3~cR;5b`_8((LbMbbTC94L5u z9pLmbW89@`=o;e;0C8E0Fd&@~zAHKOe>tIkwMLHhl>*%eJ8VO2^jgXP>8-`gwhp_M zx2rnNb*-9SrqnR7DrLX`2H4dEGzQozp>F79IBk3+k&@xmY{&zUtJ4F?Y;>SvZQxIh zHo%WTKrDI*-t~g%Q$`aozw~_#IgC$AzOz=IGB%Zy zzp~HH-NES$zm#qv)&*d!Y-;0hPu@B2S}mPam;2sM-ifOnkFq(`KAg?LjH|RPx>ijL zzU5QepLg&){AVKF|2d}l&s6|nnR|?)wSxSBEt{g|2pcFnF5~S2-FHKmxl3F7vbL&T z+%8?FlIuh#k#WD*zpdk6R?=$-Nd}%LGh@5E0?A4;Vu_U`*tH;qs3pa(Bpd7}!Dc_9 zVeK!&#XYU|(}f7w*-uREYRb%6NsgqRP8qojohs6;4VJ%~U||_4-mIo&lo;bN*vi9X zuy%#m*qqqij4V$pR~yW7rDaT|!Vy&SEFLK<^_P(XmGpAGa?uTv4~pRm(UGb$ARHM@ z{x6MwD#I@v@iU9jwJNxQesn#_qBpBhvklHITWq9qn#%_sHkfxV^^|iHyc`!C%iJkN z_N(4Z$X#my_fhJ;xCo}Oe)#ZE~QF^&#e8rZe^`PUJb$3IfeX)&zuYS zWh10Nizr7-l>OOtpQX!I_M4n0>*rWUbR7g{4lFyfC*XNj^cp^U3ptML%^Wy`e`l5E zWlH5P*2@`zXAYb`lyk~STS!bo`VnW<3)dw_Z$d65ws?-~=hE1rMtm)?oA|ZdF2sz* z7A-%*4`vq&&}9QiF+2a;PI&w}T9K(RFE@M@hPtyuVR=rb7`|Q;?%9{?=_a5LUuCfS z?XVC^oQ=!o7SDgA>9oNx4(qR@NTbV=A&G9qr{QQZ*DDAmqbOQf51Aa+gp_`DOGhPk zU2()jF*5P%6@?j`#lMk{b#&=zvgKK24|PMtO}x|CZxjv(QWF>7+#wo^@?kRzcFO2B zE0-ZZlhYx=n}w6_Z7%KV9&1;(ff`GG5TcGj?@m~7dzx)7TAy5C&Bj=^P-=>DJMo#K z+`+5G6JuA$piIm0Ta*QDH|GtJ$NQ8=277h$HZ;p={GR3qsp+kS->dLF{1Lhi_XK{l z?d!w(x>L5~Ct2H1%-2;~rWhZHuF-77@McR&v^Fbxty|gP_o_7e*+}iQ?y*r~O^_}j zkYBJ;6n9F)^}hl7)B7nyb++b6xo8j-pS7!13Rzo+sEcZ$`dgf_J^9?qZpg(y;Uiyg z`TbOICjOpYxO27a!!HHI8}+U$J7!JovaE}hf-zJ%gkrj1NlOs0vm$4EloEslUvPYD z?&PozQPKKZ&VE*{4Xq_I_iJmdS!<>h>Vm?Z+GbiH<_Pgts&$r4tj^WMO1fsaS--iK z3bsm;|7$10Kj7-0s^n){71Ee{-AIdS-%&1`K!4MxySdj^@~~#noLjv@3X{&LcYLQB zApK4snfN1Q)BHM5ywgQ2EUN{)kPF|E&s=<0ThjGyU+1?cy<34zO7Coo`!0R8(0%uW z@Av2%WnlcimyhcA)UsPr+%qA?`}F;Qy8*?LZ4NGgq3Q>~J35<#3x#+c)20kJbc@^e z`1r`n)ek>M{Ff;H*@+~mt!(M~T$k4se?<8c>QIbMRfk_W@^e z*_ic!^5{J+%nrlRCloPZ{eIx;Cwat674?fPQ8x#lR^Vq^Vt-bM2Y6`yzHG|`pHukf zTM~Rhh%Y7yE>VJSwB_(6g@5@u63|JPZ<*w)O7h@yC%IHf5OdLI@u~&Rb-?f|E0^qAjO1z9kyp=8+Yx;p}BEg9$j9!+pwI!AmwTP9BB^jeG)9{r^oMhRt zEsli|=UT-{-);`DBl5-HRJ1j+=UN{N>S@YXZG{sHYd@p+6a|^M(vMM-=*@I}SaXpv z_&7|uH~tvsZG?fg!ls=dIa1$t?D%W`;BxlPE73x6e) z_MZ#9j;b*aO87f%kstksl*>=|qi6L#LtXY3#bsR6dw6q~Om!A_GLV)#<>kbyTNEU# zw|>1!Z~LV&=_Ru)p>wO~NU0eB;!P>SfHY>Mp-yinoaOen=#{I#Rk4rBFaivab@fRq zN0+M0f11}m1rPJZ=5h~c>Sc4eO#E{qR34J5`~}c>l^bU7fX?im#5-*lKJ()f;Nrhf zrO_{mrV<$DX)t!~ByV2mjV<)-m|Nv3C^wH;yF`B?QF6@MF2GLC6mIX$KgszP)J{;` z+S6WSx_AOwX|g@-_L=eF1UI#b8#^c)|4JqCrm$kam=2(OOtaNrgQFcuGPEN;T-Y{& z`FHun3<4U_nWWkz%Wjtsqkc7wxm8upT8Tt8eW%{4Ap^qF=v0%>=+re&L0mE3mc}pu z#M@JZ0rY{4H=VLE#?uG3C6DL4r?GZdn$!SjtxpjK%#GfldbZir+~}qTJhgfdJaf@w z?Hy@+13=uJA`DPJS`RP%;zjrQ>$j~cNHG0vE1~}DD=y*3-=Ig!o(Ma^cp_XiPZVrr zPekV{E~i$12Ro}fzUUesmCdkPBlGWxMiu=*uU!3)dS&Z>;w2rFLBG;I>@OSrS%Edh z+;A{z%yIk|KC|oeZF3_R&iyPFSLBkwoK%PPvW%i%XOj-ic@OcvM|IZRKNmd>fiZV0?5MwCQbYU+ z9>aA7c)W^9wIq1W_`nw?;x#n{zwbo6uBZUN_e8v|f&;&BBAz;5G3r#o_|#Mt;1BQ< zy<9m5tXuO))teh9P*2`{lyS|+XtKl6KUKV0m8HbqP)#$5p8;F_7mqMlt9TZf&Ul}i z`3!%py-$gDM}n2#k<f0JM|!H!PrguSRE_U?|@Cpuz#x9voCkB->$J7U*$#D1|O z_TL?`+fVPr!wDU+=eA?F_lKj+5|imGjoBYpd&?M-*RzD#J#fw%#NQkfA*if@OicZh zHI4xwK9wR20P*P*VL;jn(znKfMqBs{Q5$XHPV(CDvW{&*@z&@;TllPA zv;}*g5*@3y&_4so2$8l0!=BU;duvB*VP+=^^E+afcf`KABlfY5*jckW<#usL>~$Tn z_jJU5ts^$vu2XKicf>C5h<$rU?1qk5Z~IQUjdjGH-Vu9qN9Gl-v0ou^;P* z{dY&~DLZzeyRIYls~xd_>4=SHccOcGN9@%du^;bxg~2BX)AsDYqj!VsGz=eX=9AuyZH6r+37DtRt4WQ3q|brX%)m z9kGX&J5ji`BlgLT*geKNQMj%n_Q{Ue!gwbN3p--Z?ufmvBlbfbu}^ix?moAThsIo( zdt}4<0~!dLbKy*i!&LknLHK>vGd5^0teA0D0~j+lg=rH^U>=@i8AdTOI$CNzD~tb( z>`z859ec)5lb!Z=#?4PKZf3@lC6RLpYs`i!=fZ6=4@zfaDmte@RBK}_&50~`WNJ0q(am*;s$DLX8!f8)RjI^j6}=sD)sNs^(X{*~tt{kX z9p-0Rj(<3aZx)PS^Idw&6LJ>`;s8-N!3A+1*yj7%w{s#gxE~qxYY+VU$uG&rt;pO- zTK!u3t)eUkLT`D>PcyAE$w_CC zxg*}I_Zb*GUsKduCzq-{u(bB8d`%v4@PmRUJJ@119kX9oBJ&-57&5??}6PK*?VT_5e{T+9}!TNvsd+)vBT`&H}Edy`-=vzgS?A@ zF5|x?-f|AgoyU*TEC;?2SaC14c#!fIb|!Evk(Tm{LQ5g>T*>z!c}xBWTV6~4i~N~o zw&veT;DzLW7s*GP>>om@R*?G@6H0#!WxW*Men50QLaDf#(OdIMBmd8H(LN3WF@mWW z)inAD)zL=#G8kEE%$#cPi%GPK@58AA?UUHO$;h#Ay~OA#NxT(-A4kFkTT6Hh$yZtx zuYyc_WxtffJGLgSkgsbc?PYp55$84|o=mh0t+_0D&X({vNqYYu>fSrPilTe`pPAhx z_mbWN1h@eLp#>5kArMMJfP`KG0@6YX1X3Ug9W1Aj4-fQkAuFzG3lOPZH|3rwL1w~7P z*}Xt{@&yClqGMiqN%UlHv zJsBDMbL_tDzn4t(z7xKr!sV#nx=x$j`JL$pRt%r9qzYqi>Wsm2b=J;>u`5=_cEZ1lT;X$KZtxp+@b5+VA5PQR zrx5M|M~&y;|1gNt9M)S6W|}AAxH1VU`VCzFV4v_a{QEqFeF)dV5cdYeg&)miUhr)4 zNBF-P#Hj%N+mQAn;Ab?1jRQSwy&1fe#QMO$y}`%R;PV35!Y>W8Ns#tTNYBR|&fX#H zJp9`R;yej<^T5Yh&^3g(ZNb-*plb!?h==@7z;Z!4uE6l@i>-#Zbs$bIgdK#iO<<3I z@PorF9P%^`!tVGomJkOkz$jQEaHYbR4EP^+CHS~0>_Lgz%YfC9 zN!iF}@UA>-^{+CX>NMKKyi^QQ@-X4uF${2RV@o??gxyD+bqV*g$K0+ z>alrcBX@&;r$9UAvmR7|`5<$kr-eZ0tZ8&6T&HD28Qtj(FtHgX=GHWf;2{eOHjM05 zU>F2K@9$u2C*q)(X(|srA#ao5E8b@QqP^Smj1FKAvA1_^ zTpRw0EBiJ-0dj>+mI?ElycfIIWj=#*oqv`;yVHl~uM}Jje0ct_H`wRzdnY)1zV3I9 zy{Q214PFK3rW+NbYbDdvk0TDp9uC@Z@E?u|IcS|=1vT{~jA+~h#6ivA%7#O$H$;+k zH3hmmt|#dXz7@mV&F_tDACY$RF<^dACXKWnG#A<+~69Sn0|g|Vkm3dRpD!@Uh| zkF*aWJ+#Jfg3E@9C>1uje-75lS!nfvQa zOC8v|nJWLm6(ENQI+C~K3m{T=qXXf#3Fr1+P|aCTZ`fgRHpK0bedG7wh0$Ichryv~ znzskXgQGNXh@Bvdx-g#l-~@XWBG~LzWS{5c<^Wr-08$>!>cD=rS>@I;rp^A;)c5aD zk3yuLl_MEjp>)cMd52{5E zaOV%+bDadI6aOy9_jiKf(1&p~p8#F02jw{va%oJ&lc9&n0f}n|`p3;4+TcQfTZuGw z3z9DQyQI5-sk~3Z!GaqYx!X2Qv*a3M9}$%+^uc9LgIl@3ZTjAj*htE4K8zIUwsIJj z!RXyf!RbB2;{N{B4=MngSh};5egAuJgTD+eyZ&7TnK#pRw+}A%V{kXy_wU?QJ_s~= zJkF^0qvFZ~>N#-xx3&2&x8~fNZw2tq`)>ylI>k%S)$^QpU(2q)o+!TyXw~d^THP+7d z)aXRml$lAH1*2^#aF9KrU>xKtBR314XW8<{rKe_QWTvNu^ORndG$~n7inJ+|`xMBF zEd$F)Ug*FWj#Eu^@vuA$bLOZFS=RcHUj6%Ww}w-b$wtP92(oZc zKTvXN9Y`Q8GZhY%^PzE|*QDlVXM>$;L5uX69hylb>+jfGX`Fma3m9 zQybJzo_fpxovM=00!S~MH|v=`$=E%dXG0o%wd$Q<}9$j!Bl%p8S79|}8RTvjeT{DmP>Bgv>fQ?AFQ0kji55|;g?qwE@;znsjuh+(HW+#E00#zlUO2x$>HB--KTJ9{&fZ;d zyw``?zxM$YHb-OGRM;w$MrXnUn*4Dosp;W7!Vz1wI`&RqWR&>b`KaSVi)*s@bV^;2j zv>xecnJM=86wSU`g!6W)Q$e3{j2?jF(Ps=bv(3#bmW5j^&ABnT$KaGjD z5GSrHjFW$zafoDOyTJoGuuVRYySMKKC#ffO)E-a_HJ-CFb70=-Z=dD=eTL#;*{r-$ z82PK7ltXiDDm+%5kUbKXN?2TI_Js0>_0G%8PRW}h*9q*4(1FL{u*YTFmX?{9o?4Kb z2b1w|nqnzlQ#GUh>w1$7j@>-PhVJAnL!r>+DS?0O)6^E|pwcXul?(j^Te>HX!F#9I za6YPMu6?4vcP$U6sXHw_BL$b&e0*SxPikRAnjX*^(>*PMIAow|?%SKdl7j01tkDx; zCQE}0Q=L!3#oYe<*w(~GYc))Z9dom?pzd)d#gzpzkGq)MoGfT7s6b;GlBI5r|HS9Q zHV2Cd{wAeoWi`WYU$;c_TzMc9d+pl)CGY%Qp5BG+D zAFRV(552^eWFO_S+gBn?+CFgA<~f|tzbAhb@BZren+!fAYxiahC7 z^8#&B;nfA4MX}Qvy>bd{0#kC*O!-WK=7KjCU@)LHyqh*I3txAjXfV9eZ1+Wxn{kNI z=pXoZ7>_aD%P?9o7gB?@JIyA0P3paCks38gIncx5U5csLQ#;~Xqi$hPasL9wn?5{a znU2>zU|`@v3%w?stL>ismIS6)ctr$XuFD^dnZp-2!ujjGQVrRSaT0<}k-1VQ&?_U5 z*W_H-+|lbJDRN(GuilKzJlI31bq3bY+;LN&8)6Smf<%&)8O$~iF3Z~326qxTanKD} zT6#XL0nmO{IT^X(R3FCMJZfHc?7(0*>9}1|I_M6WMh~=iht_hLRCiW5w_yg1 z${PbY#W$O1D5a`RsGLf8+y5qRcR9FWdl0Yc#Xbz~D+A^R|EJR1?^{b z48`S7$w~c7XMf>nDJPHj->=?tmzoa~Q_3hthb`$;`{Ty8P zqx-&mv={=PRX!IEVg38DR`7B%90ajCUHT^_z`u#WXW)IWI`MF~hsN*+Zx?tyQtL%m zE1Ze3-$R?T0DAqEc|jKTK+sq)fG>?eipE3!dvV_iTfNL*TXEqdM6*k><99(a7oe$Uh>H2-w zS6w}rtJ}{Y>wxrO^V}YF3t-pX-UR9G{-#?sHqbrR-IdQ@RsJut2F9`ixo_IMTK>z>=;cdAc#qMv47D5ra2$Y9?j_-*5F zeKBN|Kg!EhF;-AD^t`OvB>0_JUcDDw?+iv+uSWG6)mUlqUZnA$5d)G!tf)F@cMY8so>{7bp3rK zTGniSJ+c}+W{hbn{_rqGH{g*`BDc+&$Q_D9l5xXv{-mbS%`>YzN7ANPbCD8;apINDd-77o;CC!jU=3$yVE9v` zF^8)_R%35v#)6G|HkPzm_Vq{))`8@(?5^3>*vxG7);p(tjx#ID$pZOYJB%A&T&Eav z{sdmHSvY&4GkbgC0g&fO-XR&h2t!(u>`5|{nhB;6#HHskj||AQq(3bMePKTRoFbz zt|d9a6Z_|oWf;C_8D4LPYiD+dnc0qM+|uSCni zE3quo==$u+x8Vi6uSx!A6&SlvZOeKZEVt zadq_?9xR1q5y{s`egqQAQikb1UY6wR!?u=rfal|77=D_R?G~KDekAF%73Z-|Td{6G-HM)DZMz;>n+@L9YnumqY8%cl7q?BV zRga17KW=kouG{gtI$YOdO-RO3c-0+KYc*sMJL>Id$kISMvm6R3hieb^%Fds`^O>F4 zqi*iR^7`+>wCeA|>xp#z1YNHoc^N`HnAdI`?_s;qCYEG>lH*B!vHR$5XLgHZ*dDa$ zOmZs8l08Rvd$0|Aa30u2@({^OAf4IodvMmZ?!{QO_F_&t@5K?Z60WPU_xED`e?#GY z_w{nE$+qlU2=)0YNa#QN(Z2D1oa_4RkJ%6HxW6Ba@um9@Ec9SI_TzeS3?wW#YNf$7 zmBXUbnstXY3#ka!#>qfd_;OuI^MT;!-{Je?aot=C__oFpm?sZ zSfcJr(z(HRUBF_>egFypA0cFU2dEnOi6WogygLg6YEO9y0dfM5iDVfCR1A)SJ}r)AKLt7` z))olM{wZ0;p$_N~SEBmj)CCC7npRNkFaP*DIf)cuOeWVz!ZVTY;?bOC1|I z*2`N&tJp5modMbi-wgZ)FNBY`T_)Xbc7`l1dUw_izH#d;F9KZ%kQM6vJBk;p=o0Dr z>tl5*dx`x9AH(-zyJ0Vd^gDTZopi6TI~4B=pkwS169RqeP8jbHvk0u0AfP5dR@}6) z20&=(NtT_Ir8ij)Cf#A?Lo}V}2=f=~q2@O`VXGWrfke9$H6nURQEQ^(in{HY@xx%(2sH@Q6Z(~nC=#eI z`-62OY7I1iRps!@abVdIXfSKZ;rGaZdI4Ek9KWJr`9=c4ew6=CG)0$FzB&7tMI*j=Cu){VC$%W5tduP1Ly)B&g^>&?3m z4FbwxeR+2s8kgk*!6z_z4;|Zf7R4K&Xc^H!-jm{OAsWp45FG*9%ZBk3^70Xo6C1%t z>DVK`AaYSW zzu|8aRbPd4nSVeO3*WVCW!Ly;L^Ad3{2Y>#6?rQx}t(emNrcMKqOOdD6SI8I*Sn3iKNfw;wO`?wfLE6)+S7$y|_grbKODw zMkMnYCw?cAWk?XWO}b9vE|IL=&hW8mY%%Gjix5OIFG)f->ADGLldgxbm~_41NAb{$ zOue^oBa*e$SGW_&yz~>ECd*{uO(g4O0Q|-`dfB@j%Qr{_5Pe7VsHjTRekbaNiRwht ziBd!jBALQSQIklPAx+qbWL`2vZ6aCoqeLAOWr|Q|XJ>zpI($H34Uc*tYm=-`vI)r+ zAUSL4SqSoR&kej^;VRD^+?x$t{9{$l0=+QY-KPhvYt4Liz;%L8Z@3;xavFt{_|$<| zpZo6MA?$nKeNdVJTsAM* zuDumd1{34mfT|#m1*`*kE?^r-nTMR9dvh``=q_kC1aX+dj*(X8?IK<4Rnfja$)u`i znL*ccL3*>8g1|I|ur-EMvc|Q0JkiP~Of_7#Nw0Qy~ zXQegDpk~(8xDDDPHJDQfI|GulYc+I`dus-O{LF@yE+Hu22*J`_2ssF4|0N{DnX@i+ zupTl=E+P4H9c;n!I%xAp9jyQPbumBB)ScxV!ghhQ=RYhU!+Ag<1KF?enfhqCslJCx z2-{!Z7vzchfiB)`&xXUH*gET6IQyagCXnV{A=~J9*bdlxJ<;IamNK-Q`8GtYY^e?n zu`G{Jh-^*S%74{%_B_Ab@R-Yh!Z%2s1Sxaw&8}{!ThEuBC(o{pyexHCi$?wy&a6!) zg1kS^=A48!!MybZ>CL|1I39YYtc?@(*IVp$vOIj3MQZIiIT7w;9Z>iI$#Wn%`z9RA z<=hlyLz3N^qUR~il0j>5Z6A1 zwiY{}zr~R3*rE=kn9>6KM*o(Ww+SRmN$w(fjO2xuy+sJij5_8T!e&ODaBaapjrz`Y zfT@S$Xi90=r|@_?^#3KvpFnc9q`eQMzOnrf56%v>&j9&u`*9#~h6!Qcw#V@<`-bcZ z=GKwz5*?3zlH;)^%b^d;*5NEW{tWneGX4U{t?`#Z9*O@Er1W;bpKF~ku3u;L)1ot8 z_owU0aNVb{P8SUMpi4JTy9b$ic_P}Iz3EA48JdLQU6Y;y`%DUv>B?Ahx*0alc0GwB;9(VO*qMJBu9bdET$K>MK_QzGxz!i4x^{{x&(4X>=lr*M0@*S{$=aP(wX!B zPM@vboLwY&w-3%XwfdsxHhr;mhLSAoyU)8{Vb$cyxy97qgSg##odIdCJy}aK#pVOh zo6N)gY4s+ptlNKHljgjQ8Q|i>*}MT>Ah!>|{MQ}S1g_;QCv)}bAk2eI{rVtW2mJ