Jump to content

[Repack] VirtualBox 5.1.18 + ExtensionPacks


kanyos

Recommended Posts

vbx_zpswov8tl7x.png

Source: VirtualBox-5.1.18-114002-Win.exe
Released: 2017-03-15
About: VirtualBox allows users to run nearly any operating system on a single machine and to freely switch between OS instances running simultaneously.
Homepage: VirtualBox

Tools used:
- [Modded] InstEd 1.5.15.26 (LZX21) by ricktendo for remove unwanted files/prog inside installer
- gBurner 3.5 for remove unwanted drivers inside VBoxGuestAdditions.iso
- dotNET45sfxMaker by ricktendo for making this installer with 7zSD_LZMA2.sfx
- [Repack] Resource Hacker 4.2.5 by Vandit for replace setup icon and renaming installer properties

Removed:
- VBox Web Service
- VBox Python support
- UserManual.pdf
- Translation files, except En, Fr, Ru
- Drivers inside VBoxGuestAdditions.iso & ExtensionPacks, except Windows & Linux drivers

Tweaked:
integrated vbox-sha1.cer & VBoxCertUtil.exe with command -v add-trusted-publisher vbox-sha1.cer to get full silent install mode without popups when vbox installing network driver & USB driver [thanks to alfeire].

Bonus:
integrated Extension Pack

Silent Install command: /ai /gm2

File: VirtualBox-5.1.18-114002-Win-Setup.exe
Size: 70,3 MB
MD5: F0BEE738E4E37BC55E1B638EF9A84794
Download: http://www.mediafire.com/file/mtfert94mx7yjbd/VirtualBox-5.1.18-114002-Win-Setup.exe

Btw, Thanks to ricktendo for great tools :thumbsup:

Edited by kanyos
Link to comment
Share on other sites

VirtualBox is a pain the the butt to mod, typical Property stuff that works in other installes does not work in this

 

BTW it may be possible to repack back into the original setup wrapper, I notice RCData\BIN_XX are the 2 installers and common.cab (I use restorator to open)

Link to comment
Share on other sites

  • 3 weeks later...

VirtualBox is a pain the the butt to mod, typical Property stuff that works in other installes does not work in this

 

BTW it may be possible to repack back into the original setup wrapper, I notice RCData\BIN_XX are the 2 installers and common.cab (I use restorator to open)

 
I've tried it... yea.. it is very difficult....
 
btw updated VBox 4.3.10-93012 :D
Link to comment
Share on other sites

VirtualBox is a pain the the butt to mod, typical Property stuff that works in other installes does not work in this

 

BTW it may be possible to repack back into the original setup wrapper, I notice RCData\BIN_XX are the 2 installers and common.cab (I use restorator to open)

Can use VirtualBoxInstaller.exe -extract to get msi + common.cab files in %temp%\VirtualBox folder...

Regards... ;-)

Link to comment
Share on other sites

Here is what I am talking about, this is slimmed based on your installer, I rebuilt common.cab and the embedded product.cab's in each MSI installer... Then finally I replaced the ones in the original installer with those I rebuilt

 

Download: http://adf.ly/1713566/vboxrpck

MD5: 8cdb56d006f1874fc318d1a09bfe1678

Size: 83.7 MB

 

I hope you don't feel like I am stepping on your toes here, I of course will provide to you how I did this. Maybe you can use this to take your repacking skills a bit further

 

Tools:

http://xp.xpdnc.org/files/msi_vbs_examples.zip     (Optional)https://dl.dropboxusercontent.com/u/56155351/Tools/MsiTran.Exe     (Optional)https://dl.dropboxusercontent.com/u/56155351/Tools/vbox.7zMakeCab     (comes with Windows)InstEdRestorator 2007
 

MSI Instructions:

- Extract VirtualBox installer files

<installer>.exe -extract -path .\
- Edit the MSI to make slim or apply the MST with InstEd or MsiTran (Note: I also remove vc2k10 runtimes)

MsiTran.exe -a <mst_name>.mst <x86_and_or_amd64>.msi
- Do an admin install of both MSI's, now copy common.DDF into ANYONE of the admin install location and rebuild common.cab

makecab.exe /f common.DDF
- Do the same to rebuild product.cab's (use 32 DDF for x86 and 64 for amd64)

- Now we will add the product.cab back into the MSI, you can use InstEd but I prefer

WiStream.vbs <msi_name>.msi product.cab
- With InstEd change the admin install MSI's Sumary Information from Admin External. Long filenames to Compressed. Long filenames, you can also use this VBS command

WiSumInf.vbs <msi_name>.msi Words=2
EXE Instructions:

Now that we have both installers repacked with none of the stuff we removed, we need to add them back into the EXE... You can simply open the original VirtualBox installer EXE in Restorator 2007, copy the files from within Windows Explorer and paste them into the RCData BIN's, but I rather add them to a RES file, then apply the res file with Restorator because the EXE date does not change and you wont get those ugly shortcut icons that Restorator leaves behind

 

- Open provided RES file with Restorator 2007

- In Windows Explorer copy (Ctrl+C) x86 MSI and paste (Ctrl+V) in RCData -> BIN_00

- Do the same for x64 MSI (BIN_01) and common.cab (BIN_02) and save RES

- Now open VirtualBox installer with Resource Hacker, now choose Action -> Update all Resources (apply the RES file)

- Save and you are DONE!!!

 

Bonus:

If you are wondering how to get the DDF, you can open the MSI in InstEd, go to Media, right click on CAB and choose Show ddf, I prefer to use

WiMakCab.vbs <msi_name>.msi cabname /L
If I use WiMakCab.vbs I have to edit it a little

Edit: I just realized its easier for you to rebuild/embed the CAB's, just open your MSI in InstEd, go to Media, right click on CAB and choose Rebuild selected CAB

Edit2: You can also save space if you remove the linux and os2 stuff from VBoxGuestAdditions.iso (28MB after removal)

Link to comment
Share on other sites

  • 1 month later...

Hello rick, just tried to install both repacks silently, and in kanyos version Windows asks if it can trust oracle to install some drivers and waits the answer(button must be pushed) and your repack installed really silently, but running it found out that you left just English language interface...could you add Russian, and may be French and German? And if you decide to do this would you be so kind to remove the linux and os2 stuff from VBoxGuestAdditions.iso?

Best regards.

Link to comment
Share on other sites

Sorry but I am not releasing this because kanyos was first and I dont want to step on his toes. I was trying to suggest maybe a cooler way to repack it and yes vbox original installer (that I re-use) DOES install the cert silently

---------------------------VirtualBox Installer----------------------------- VirtualBox Installer v4.3.10.93012 --Command Line Parameters:--extract                - Extract file contents to temporary directory--silent                 - Enables silent mode installation--no-silent-cert         - Do not install VirtualBox Certificate automatically when --silent option is specified--path                   - Sets the path of the extraction directory--msiparams <parameters> - Specifies extra parameters for the MSI installers--logging                - Enables installer logging--help                   - Print this help and exit--version                - Print version number and exitExamples:VirtualBox-4.3.10-93012-Win_Repack.exe --msiparams INSTALLDIR=C:\VBoxVirtualBox-4.3.10-93012-Win_Repack.exe --extract -path C:\VBox---------------------------OK  ---------------------------

BTW If you look at my 2nd "edit" I do remove those from my Additions iso in my latest repack (its now down to 64.3 MB installer size)

Link to comment
Share on other sites

Hello rick, just tried to install both repacks silently, and in kanyos version Windows asks if it can trust oracle to install some drivers and waits the answer(button must be pushed) and your repack installed really silently, but running it found out that you left just English language interface...could you add Russian, and may be French and German? And if you decide to do this would you be so kind to remove the linux and os2 stuff from VBoxGuestAdditions.iso?

Best regards.

Try this:

 

VBoxCertUtil.exe -v add-trusted-publisher oracle-vbox.cer

[Run]Filename: "{tmp}\VBoxCertUtil.exe"; Parameters: "-v add-trusted-publisher oracle-vbox.cer";Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\VirtualBox-{#AppVersion}-MultiArch_x86.msi""/qr /norestart"; Check: Not IsWin64Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\VirtualBox-{#AppVersion}-MultiArch_amd64.msi""/qr /norestart"; Check: IsWin64

VBoxCertUtil.exe & oracle-vbox.cer are inside VBoxGuestAdditions.iso...

 

Regards... ;-)

 

XoJpJ49.jpg

Edited by alfreire
Link to comment
Share on other sites

Hello Rick, decided to try myself in repacking VB as in your example, but lost in the middle...i deleted the rows in the msi's from "File" table according to your rebuilt msi's, except those responding for necessary languages using InstalEdit, but can't understand how to rebuilt cabs: edited your ddf's adding the rows i left except yours, but running the

makecab.exe /f common.DDF

does nothing, the cab size doesn't change, what wrong?

Best Regards

Link to comment
Share on other sites

Guys, please stop hijacking kanyos' thread!

 

@kanyos, if you will PM me, or one of the other mods, a list of the posts in this thread that you would like removed, they can be split out into their own thread if you think that would be appropriate.

 

Cheers and Regards

Sorry, you are right... only just trying to help... you can delete my post if you want...

Regards... ;-)

Link to comment
Share on other sites

NP, I know you're just trying to help. :)  If kanyos wants to take advice from you and Rick to improve his release then all is fine and all benefit from the interaction.  But if he wants to leave it the way it is, then your posts and especially those of chymax3m should be split out into their own thread, at least IMHO. But this is kanyos' thread so I'll let him decide what he would like to do.

Cheers and Regards

Link to comment
Share on other sites

Sorry if it nuisance...

Regards... ;-)

 

I use this ISS to create InnoSetup Installer:

;InnoSetupVersion=5.5.0 (Unicode)[Setup]#define AppPath "{pf}\Oracle\Virtualbox"#define AppVersion "4.3.12-r93733"#define AppName "VirtualBox"AppName={#AppName} x86/x64 by alfreireAppVerName={#AppName} v{#AppVersion}AppVersion={#AppVersion}CreateAppDir=noDisableProgramGroupPage=yesUninstallable=noOutputBaseFilename=VirtualBox.v{#AppVersion}.x86x64.SetupCompression=lzma2/ultraInternalCompressLevel=ultraSolidCompression=trueSetupIconFile=embedded\Setup.icoArchitecturesInstallIn64BitMode=x64AllowNoIcons=yesWizardImageFile=embedded\WizardImage.bmpWizardSmallImageFile=embedded\WizardSmallImage.bmp[Files]Source: "{tmp}\oracle-vbox.cer"; DestDir: "{tmp}";Source: "{tmp}\VBoxCertUtil.exe"; DestDir: "{tmp}";Source: "{tmp}\ExtensionPacks\*"; DestDir: "{pf}\Oracle\Virtualbox\ExtensionPacks\Oracle_VM_VirtualBox_Extension_Pack"; Flags: createallsubdirs recursesubdirsSource: "{tmp}\common.cab"; DestDir: "{tmp}";Source: "{tmp}\VirtualBox-{#AppVersion}-MultiArch_x86.msi"; DestDir: "{tmp}"; Check: Not IsWin64Source: "{tmp}\VirtualBox-{#AppVersion}-MultiArch_amd64.msi"; DestDir: "{tmp}"; Check: IsWin64[Run]Filename: "{tmp}\VBoxCertUtil.exe"; Parameters: "-v add-trusted-publisher oracle-vbox.cer";Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\VirtualBox-{#AppVersion}-MultiArch_x86.msi""/qr /norestart"; Check: Not IsWin64 Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\VirtualBox-{#AppVersion}-MultiArch_amd64.msi""/qr /norestart"; Check: IsWin64 Filename: "{pf}\Oracle\Virtualbox\VirtualBox.exe"; Description: "{cm:LaunchProgram,VirtualBox}"; Flags: postinstall skipifsilent nowait[Icons]Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Oracle VM VirtualBox"; Filename: "{#AppPath}\VirtualBox.exe"; Tasks: quicklaunchicon; [Tasks]Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; OnlyBelowVersion: 0.0,6.01; Name: "pintaskbar"; Description: "Pin {#AppName} to Taskbar"; GroupDescription: "{cm:AdditionalIcons}"; MinVersion: 0.0,6.1; [CustomMessages]English.NameAndVersion=%1 version %2English.AdditionalIcons=Additional icons:English.CreateDesktopIcon=Create a &desktop iconEnglish.CreateQuickLaunchIcon=Create a &Quick Launch iconEnglish.ProgramOnTheWeb=%1 on the WebEnglish.UninstallProgram=Uninstall %1English.AssocFileExtension=&Associate %1 with the %2 file extensionEnglish.AssocingFileExtension=Associating %1 with the %2 file extension...English.AutoStartProgramGroupDescription=Startup:English.AutoStartProgram=Automatically start %1English.AddonHostProgramNotFound=%1 could not be located in the folder you selected.%n%nDo you want to continue anyway?Spanish.NameAndVersion=%1 versión %2Spanish.AdditionalIcons=Iconos adicionales:Spanish.CreateDesktopIcon=Crear un icono en el &EscritorioSpanish.CreateQuickLaunchIcon=Crear un icono de &Inicio RápidoSpanish.ProgramOnTheWeb=%1 en la WebSpanish.UninstallProgram=Desinstalar %1Spanish.LaunchProgram=Ejecutar %1Spanish.AssocFileExtension=&Asociar %1 con la extensión de archivo %2Spanish.AssocingFileExtension=Asociando %1 con la extensión de archivo %2...Spanish.AutoStartProgramGroupDescription=Inicio:Spanish.AutoStartProgram=Iniciar automáticamente %1Spanish.AddonHostProgramNotFound=%1 no pudo ser localizado en la carpeta seleccionada.%n%n¿Desea continuar de todas formas?[Languages]Name: "English"; MessagesFile: "embedded\English.isl";Name: "Spanish"; MessagesFile: "embedded\Spanish.isl";[code]varPinTaskBarCheck : TNewCheckBox;//the function is work well on Unicode Inno Setup, //if Non Unicode Inno Setup, one need to modify,//and I think you can do it!//Inno use Win32 APIfunction LoadLibrary(lpFilename : String) : LongInt;external 'LoadLibraryW@kernel32.dll stdcall delayload';  //if Non Unicode Inno Setup, use LoadLibraryAfunction FreeLibrary(hModule : LongInt) : BOOL;external 'FreeLibrary@kernel32.dll stdcall delayload';function LoadString(hInstance:LongInt; uId:UINT; lpBuffer:String; nBufferMax:Integer) : Integer;external 'LoadStringW@user32.dll stdcall delayload';  //if Non Unicode Inno Setup, use LoadStringA//here is the function//@param strPath The App's directory,//@param strApp The App's name//@example zylPinAppToTaskbar('c:\window', 'notepad.exe');procedure zylPinAppToTaskbar(strPath, strApp: string);  var    vShell, vFolder, vFolderItem, vItemVerbs: Variant;    vPath, vApp: Variant;    i: Integer;    sItem: String;     h: LongInt;   szPinName: String;   filenameEnd : Integer;  filename    : String;   strEnd    : String;begin   SetLength(szPinName, 255);   h := LoadLibrary(ExpandConstant('{sys}\Shell32.dll'));    LoadString(h, 5386, szPinName, 255);    FreeLibrary(h);    strEnd := #0;  filenameEnd := Pos(strEnd, szPinName);  filename := Copy(szPinName, 1, filenameEnd - 1);  if (Length(filename) > 0) then  //WinXp or lower, no pin taskbar function  begin    vShell := CreateOleObject('Shell.Application');      vPath := strPath;      vFolder := vShell.NameSpace(vPath);      vApp := strApp;      vFolderItem := vFolder.ParseName(vApp);      vItemVerbs := vFolderItem.Verbs;         for i := 1 to vItemVerbs.Count do    begin      sItem := vItemVerbs.Item(i).Name;    if (sItem = filename) then    begin      // 63 63 72 75 6E 2E 63 6F 6D        vItemVerbs.Item(i).DoIt;       break;      end;     end;    end;end;  //You can use zylPinAppToTaskbar like thisprocedure CurPageChanged(CurPageID: Integer);begin  //When Finished page is shown, call the function  //You can also call is when the "Finish" button clicked.  if  CurPageID = wpFinished then    begin  if IsTaskSelected('pintaskbar') then  zylPinAppToTaskbar(ExpandConstant('{#AppPath}'), 'VirtualBox.exe');  end;end;
Edited by alfreire
Link to comment
Share on other sites

 

Sorry if it nuisance...

Regards... ;-)

 

I use this ISS to create InnoSetup Installer:

;InnoSetupVersion=5.5.0 (Unicode)[Setup]#define AppPath "{pf}\Oracle\Virtualbox"#define AppVersion "4.3.12-r93733"#define AppName "VirtualBox"AppName={#AppName} x86/x64 by alfreireAppVerName={#AppName} v{#AppVersion}AppVersion={#AppVersion}CreateAppDir=noDisableProgramGroupPage=yesUninstallable=noOutputBaseFilename=VirtualBox.v{#AppVersion}.x86x64.SetupCompression=lzma2/ultraInternalCompressLevel=ultraSolidCompression=trueSetupIconFile=embedded\Setup.icoArchitecturesInstallIn64BitMode=x64AllowNoIcons=yesWizardImageFile=embedded\WizardImage.bmpWizardSmallImageFile=embedded\WizardSmallImage.bmp[Files]Source: "{tmp}\oracle-vbox.cer"; DestDir: "{tmp}";Source: "{tmp}\VBoxCertUtil.exe"; DestDir: "{tmp}";Source: "{tmp}\ExtensionPacks\*"; DestDir: "{pf}\Oracle\Virtualbox\ExtensionPacks\Oracle_VM_VirtualBox_Extension_Pack"; Flags: createallsubdirs recursesubdirsSource: "{tmp}\common.cab"; DestDir: "{tmp}";Source: "{tmp}\VirtualBox-{#AppVersion}-MultiArch_x86.msi"; DestDir: "{tmp}"; Check: Not IsWin64Source: "{tmp}\VirtualBox-{#AppVersion}-MultiArch_amd64.msi"; DestDir: "{tmp}"; Check: IsWin64[Run]Filename: "{tmp}\VBoxCertUtil.exe"; Parameters: "-v add-trusted-publisher oracle-vbox.cer";Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\VirtualBox-{#AppVersion}-MultiArch_x86.msi""/qr /norestart"; Check: Not IsWin64 Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\VirtualBox-{#AppVersion}-MultiArch_amd64.msi""/qr /norestart"; Check: IsWin64 Filename: "{pf}\Oracle\Virtualbox\VirtualBox.exe"; Description: "{cm:LaunchProgram,VirtualBox}"; Flags: postinstall skipifsilent nowait[Icons]Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Oracle VM VirtualBox"; Filename: "{#AppPath}\VirtualBox.exe"; Tasks: quicklaunchicon; [Tasks]Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; OnlyBelowVersion: 0.0,6.01; Name: "pintaskbar"; Description: "Pin {#AppName} to Taskbar"; GroupDescription: "{cm:AdditionalIcons}"; MinVersion: 0.0,6.1; [CustomMessages]English.NameAndVersion=%1 version %2English.AdditionalIcons=Additional icons:English.CreateDesktopIcon=Create a &desktop iconEnglish.CreateQuickLaunchIcon=Create a &Quick Launch iconEnglish.ProgramOnTheWeb=%1 on the WebEnglish.UninstallProgram=Uninstall %1English.AssocFileExtension=&Associate %1 with the %2 file extensionEnglish.AssocingFileExtension=Associating %1 with the %2 file extension...English.AutoStartProgramGroupDescription=Startup:English.AutoStartProgram=Automatically start %1English.AddonHostProgramNotFound=%1 could not be located in the folder you selected.%n%nDo you want to continue anyway?Spanish.NameAndVersion=%1 versión %2Spanish.AdditionalIcons=Iconos adicionales:Spanish.CreateDesktopIcon=Crear un icono en el &EscritorioSpanish.CreateQuickLaunchIcon=Crear un icono de &Inicio RápidoSpanish.ProgramOnTheWeb=%1 en la WebSpanish.UninstallProgram=Desinstalar %1Spanish.LaunchProgram=Ejecutar %1Spanish.AssocFileExtension=&Asociar %1 con la extensión de archivo %2Spanish.AssocingFileExtension=Asociando %1 con la extensión de archivo %2...Spanish.AutoStartProgramGroupDescription=Inicio:Spanish.AutoStartProgram=Iniciar automáticamente %1Spanish.AddonHostProgramNotFound=%1 no pudo ser localizado en la carpeta seleccionada.%n%n¿Desea continuar de todas formas?[Languages]Name: "English"; MessagesFile: "embedded\English.isl";Name: "Spanish"; MessagesFile: "embedded\Spanish.isl";[code]varPinTaskBarCheck : TNewCheckBox;//the function is work well on Unicode Inno Setup, //if Non Unicode Inno Setup, one need to modify,//and I think you can do it!//Inno use Win32 APIfunction LoadLibrary(lpFilename : String) : LongInt;external 'LoadLibraryW@kernel32.dll stdcall delayload';  //if Non Unicode Inno Setup, use LoadLibraryAfunction FreeLibrary(hModule : LongInt) : BOOL;external 'FreeLibrary@kernel32.dll stdcall delayload';function LoadString(hInstance:LongInt; uId:UINT; lpBuffer:String; nBufferMax:Integer) : Integer;external 'LoadStringW@user32.dll stdcall delayload';  //if Non Unicode Inno Setup, use LoadStringA//here is the function//@param strPath The App's directory,//@param strApp The App's name//@example zylPinAppToTaskbar('c:\window', 'notepad.exe');procedure zylPinAppToTaskbar(strPath, strApp: string);  var    vShell, vFolder, vFolderItem, vItemVerbs: Variant;    vPath, vApp: Variant;    i: Integer;    sItem: String;     h: LongInt;   szPinName: String;   filenameEnd : Integer;  filename    : String;   strEnd    : String;begin   SetLength(szPinName, 255);   h := LoadLibrary(ExpandConstant('{sys}\Shell32.dll'));    LoadString(h, 5386, szPinName, 255);    FreeLibrary(h);    strEnd := #0;  filenameEnd := Pos(strEnd, szPinName);  filename := Copy(szPinName, 1, filenameEnd - 1);  if (Length(filename) > 0) then  //WinXp or lower, no pin taskbar function  begin    vShell := CreateOleObject('Shell.Application');      vPath := strPath;      vFolder := vShell.NameSpace(vPath);      vApp := strApp;      vFolderItem := vFolder.ParseName(vApp);      vItemVerbs := vFolderItem.Verbs;         for i := 1 to vItemVerbs.Count do    begin      sItem := vItemVerbs.Item(i).Name;    if (sItem = filename) then    begin      // 63 63 72 75 6E 2E 63 6F 6D        vItemVerbs.Item(i).DoIt;       break;      end;     end;    end;end;  //You can use zylPinAppToTaskbar like thisprocedure CurPageChanged(CurPageID: Integer);begin  //When Finished page is shown, call the function  //You can also call is when the "Finish" button clicked.  if  CurPageID = wpFinished then    begin  if IsTaskSelected('pintaskbar') then  zylPinAppToTaskbar(ExpandConstant('{#AppPath}'), 'VirtualBox.exe');  end;end;

oh i see now..., my problem is from this files: VBoxCertUtil.exe & oracle-vbox.cer :g:

i found VBoxCertUtil.exe & oracle-vbox.cer from VBoxGuestAdditions.iso, then copy to installer, then run VBoxCertUtil.exe with comand -v add-trusted-publisher oracle-vbox.cer, then install msi, so....  yeah no more popup!  i like this!! Thanks bro alfeire! :thumbsup_anim:

Edited by kanyos
Link to comment
Share on other sites

  • 2 months later...
  • 1 month later...

 

 

hmm ya i have seen, and thats why i prefer like to old version

 

 

nice info

thank you :D

 

Oyeee thanks

kanyos
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...