You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ax...@apache.org on 2015/04/28 06:08:49 UTC

[1/7] cordova-windows git commit: CB-8923 Add support for Windows 10 platform

Repository: cordova-windows
Updated Branches:
  refs/heads/windows10 653b7d1ff -> 0d2387d95


http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/template/cordova/lib/prepare.js
----------------------------------------------------------------------
diff --git a/template/cordova/lib/prepare.js b/template/cordova/lib/prepare.js
index 7bec13d..4a02c12 100644
--- a/template/cordova/lib/prepare.js
+++ b/template/cordova/lib/prepare.js
@@ -17,43 +17,74 @@
        under the License.
 */
 
-var path  = require('path'),
-    fs  = require('fs'),
-    et = require('elementtree'),
-    shell = require('shelljs'),
-    ConfigParser = require('./ConfigParser');
+var path            = require('path'),
+    fs              = require('fs'),
+    et              = require('elementtree'),
+    subElement      = et.SubElement,
+    shell           = require('shelljs'),
+    MSBuildTools    = require('./MSBuildTools'),
+    Version         = require('./Version'),
+    ConfigParser    = require('./ConfigParser');
 
 var ROOT = path.join(__dirname, '..', '..'),
-    accessRules;
+    PROJECT_WINDOWS10   = 'CordovaApp.Windows10.jsproj',
+    MANIFEST_WINDOWS8   = 'package.windows80.appxmanifest',
+    MANIFEST_WINDOWS    = 'package.windows.appxmanifest',
+    MANIFEST_PHONE      = 'package.phone.appxmanifest',
+    MANIFEST_WINDOWS10  = 'package.windows10.appxmanifest',
+    JSPROJ_WINDOWS8     = 'CordovaApp.Windows80.jsproj',
+    JSPROJ_WINDOWS      = 'CordovaApp.Windows.jsproj',
+    JSPROJ_PHONE        = 'CordovaApp.Phone.jsproj',
+    JSPROJ_WINDOWS10    = 'CordovaApp.Windows10.jsproj',
+    BASE_UAP_VERSION    = new Version(10, 0, 10030, 0),
+    UAP_RESTRICTED_CAPS = ['enterpriseAuthentication', 'sharedUserCertificates', 
+                           'documentsLibrary', 'musicLibrary', 'picturesLibrary', 
+                           'videosLibrary', 'removableStorage', 'internetClientClientServer', 
+                           'privateNetworkClientServer'],
+    // UAP namespace capabilities come from the XSD type ST_Capability_Uap from AppxManifestTypes.xsd
+    CAPS_NEEDING_UAPNS  = ['documentsLibrary', 'picturesLibrary', 'videosLibrary', 
+                           'musicLibrary', 'enterpriseAuthentication', 'sharedUserCertificates', 
+                           'removableStorage', 'appointments', 'contacts', 'userAccountInformation',
+                           'phoneCall', 'blockedChatMessages', 'objects3D'];
 
 module.exports.applyPlatformConfig = function () {
     console.log('Applying Platform Config...');
 
     var config = new ConfigParser(path.join(ROOT, 'config.xml'));
 
-    accessRules = config.getAccessRules().filter(function(rule) {
-        if (rule.indexOf('https://') === 0 || rule == '*') {
-            return true;
-        } else {
-            console.log('Access rules must begin with "https://", the following rule will be ignored: ' + rule);
-        }
-        return false;
-    });
+    var isTargetingWin10 = false;
+    var winTargetVersion = config.getWindowsTargetVersion();
+    if (winTargetVersion === '10.0' || winTargetVersion === 'UAP') {
+        isTargetingWin10 = true;
+    }
 
     // Apply appxmanifest changes
-    [{ fileName: 'package.windows.appxmanifest',   namespacePrefix: 'm2:' }, 
-     { fileName: 'package.windows80.appxmanifest', namespacePrefix: '' },
-     { fileName: 'package.phone.appxmanifest',     namespacePrefix: 'm3:' }].forEach(
+    [{ fileName: MANIFEST_WINDOWS,   namespacePrefix: 'm2:' }, 
+     { fileName: MANIFEST_WINDOWS8,  namespacePrefix: '' },
+     { fileName: MANIFEST_PHONE,     namespacePrefix: 'm3:' }].forEach(
         function(manifestFile) {
-            updateManifestFile(config, path.join(ROOT, manifestFile.fileName), manifestFile.namespacePrefix);
+            updateManifestFile(config, path.join(ROOT, manifestFile.fileName), manifestFile.namespacePrefix, null);
     });
 
     // Apply jsproj changes
-    ['CordovaApp.Phone.jsproj', 'CordovaApp.Windows.jsproj', 'CordovaApp.Windows80.jsproj'].forEach(
+    [JSPROJ_PHONE, JSPROJ_WINDOWS, JSPROJ_WINDOWS8, JSPROJ_WINDOWS10].forEach(
         function(jsprojFile) {
             updatejsprojFile(config, path.join(ROOT, jsprojFile));
     });
 
+    // Break out Windows 10-specific functionality because we also need to 
+    // apply UAP versioning to Windows 10 appx-manifests.
+    var uapVersionInfo = getUAPVersions(config);
+
+    if (uapVersionInfo) {
+        updateManifestFile(config, path.join(ROOT, MANIFEST_WINDOWS10), 'uap:', uapVersionInfo);
+
+        applyUAPVersionToProject(path.join(ROOT, PROJECT_WINDOWS10), uapVersionInfo);
+    }
+    else if (isTargetingWin10) {
+        console.warn('Warning: Requested build targeting Windows 10, but Windows 10 tools were not detected on the system.');
+    }
+
     copyImages(config);
 };
 
@@ -71,8 +102,7 @@ function updatejsprojFile(config, jsProjFilePath) {
     fs.writeFileSync(jsProjFilePath, jsProjXML.write({indent: 2}), 'utf-8');
 }
 
-function updateManifestFile (config, manifestPath, namespacePrefix) {
-
+function updateManifestFile (config, manifestPath, namespacePrefix, uapVersionInfo) {
     var contents = fs.readFileSync(manifestPath, 'utf-8');
     if(contents) {
         //Windows is the BOM. Skip the Byte Order Mark.
@@ -81,29 +111,27 @@ function updateManifestFile (config, manifestPath, namespacePrefix) {
 
     var manifest =  new et.ElementTree(et.XML(contents));
 
-    applyCoreProperties(config, manifest, manifestPath, namespacePrefix);
+    applyCoreProperties(config, manifest, manifestPath, namespacePrefix, !!uapVersionInfo); 
     // sort Capability elements as per CB-5350 Windows8 build fails due to invalid 'Capabilities' definition
     sortCapabilities(manifest);
-    applyAccessRules(config, manifest);
+    applyAccessRules(config, manifest, !!uapVersionInfo); 
     applyBackgroundColor(config, manifest, namespacePrefix);
 
+    if (uapVersionInfo) {
+        applyTargetPlatformVersion(config, manifest, uapVersionInfo);
+        checkForRestrictedCapabilities(config, manifest);
+        ensureUapPrefixedCapabilities(manifest.find('.//Capabilities'));
+    }
 
     //Write out manifest
     fs.writeFileSync(manifestPath, manifest.write({indent: 4}), 'utf-8');
 }
 
-function applyCoreProperties(config, manifest, manifestPath, xmlnsPrefix) {
+function applyCoreProperties(config, manifest, manifestPath, xmlnsPrefix, targetWin10) {
     var version = fixConfigVersion(config.version());
     var name = config.name();
     var pkgName = config.packageName();
     var author = config.author();
-    var startPage = config.startPage();
-
-    if (!startPage) {
-        // If not specified, set default value
-        // http://cordova.apache.org/docs/en/edge/config_ref_index.md.html#The%20config.xml%20File
-        startPage = 'index.html';
-    }
 
     var identityNode = manifest.find('.//Identity');
     if(!identityNode) {
@@ -128,7 +156,8 @@ function applyCoreProperties(config, manifest, manifestPath, xmlnsPrefix) {
         var appId = pkgName.length <= 64 ? pkgName : pkgName.substr(0, 64);
         app.attrib.Id = appId;
     }
-    app.attrib.StartPage = 'www/' + startPage;
+
+    applyStartPage(app, config, targetWin10); 
 
     var visualElementsName = './/' + xmlnsPrefix + 'VisualElements'; 
     var visualElems = manifest.find(visualElementsName); 
@@ -200,6 +229,46 @@ function applyCoreProperties(config, manifest, manifestPath, xmlnsPrefix) {
     }
 }
 
+function applyStartPage(appNode, config, targetingWin10) {
+    var startPage = config.startPage();
+
+    if (!startPage) {
+        // If not specified, set default value
+        // http://cordova.apache.org/docs/en/edge/config_ref_index.md.html#The%20config.xml%20File
+        startPage = 'index.html';
+    }
+
+    var uriPrefix = '';
+    if (targetingWin10) {
+        // for Win10, we respect config options such as WindowsDefaultUriPrefix and default to 
+        // ms-appx-web:// as the homepage.  Set those here.
+
+        // Only add a URI prefix if the start page doesn't specify a URI scheme
+        if (!(/^[\w-]+?\:\/\//i).test(startPage)) {
+            uriPrefix = config.getPreference('WindowsDefaultUriPrefix');
+            if (!uriPrefix) {
+                uriPrefix = 'ms-appx-web://';
+            }
+            else if (/^ms\-appx\:\/\/$/i.test(uriPrefix)) { 
+                // Explicitly ignore the ms-appx:// scheme because it doesn't validate
+                // in the Windows 10 build schema (treat it as the root).
+                uriPrefix = '';
+            }
+        }
+    }
+
+    var startPagePrefix = 'www/';
+    if ((uriPrefix && uriPrefix.toLowerCase().substring(0, 4) === 'http') || 
+        startPage.toLowerCase().substring(0, 4) === 'http') {
+        startPagePrefix = '';
+    }
+    else if (uriPrefix.toLowerCase().substring(0, 7) === 'ms-appx') {
+        uriPrefix += '/'; // add a 3rd trailing forward slash for correct area resolution
+    }
+
+    appNode.attrib.StartPage = uriPrefix + startPagePrefix + startPage;
+}
+
 // Adjust version number as per CB-5337 Windows8 build fails due to invalid app version
 function fixConfigVersion (version) {
     if(version && version.match(/\.\d/g)) {
@@ -211,29 +280,105 @@ function fixConfigVersion (version) {
     return version;
 }
 
-function applyAccessRules (config, manifest) {
+function applyAccessRules (config, manifest, isTargetingWin10) {
     // Updates WhiteListing rules
     //<ApplicationContentUriRules>
     //    <Rule Match="https://www.example.com" Type="include"/>
     //</ApplicationContentUriRules>
+
+    var AppContentUriRulesElementName = 'ApplicationContentUriRules',
+        RuleElementName = 'Rule';
+
+    if (isTargetingWin10) {
+        return applyNavigationWhitelist(config, manifest);
+    }
+
+    
+    var accessRules = config.getAccessRules().filter(function(rule) {
+        // https:// rules are always good, * rules are always good
+        if (rule.indexOf('https://') === 0 || rule === '*') {
+            return true;
+        } else {
+            console.warn('Access rules must begin with "https://", the following rule will be ignored: ' + rule);
+        }
+        return false;
+    });
+
+    // If * is specified, emit no access rules.
+    if (accessRules.indexOf('*') > -1) {
+        accessRules = [];
+    }
+
+    createApplicationContentUriRules(manifest, AppContentUriRulesElementName, RuleElementName, accessRules, { Type: 'include' });
+}
+
+/** 
+ * Windows 10-based whitelist-plugin-compatible support for the enhanced navigation whitelist.
+ * Allows WinRT access to origins specified by <allow-navigation href="origin" /> elements.
+ */
+function applyNavigationWhitelist(config, manifest) {
+    var AppContentUriRulesElementName = 'uap:ApplicationContentUriRules';
+    var RuleElementName = 'uap:Rule';
+    var UriSchemeTest = /^(?:https?|ms-appx-web):\/\//i;
+
+    var whitelistRules = config.getNavigationWhitelistRules().filter(function(rule) {
+        if (UriSchemeTest.test(rule)) {
+            return true;
+        } else {
+            console.warn('The following navigation rule had an invalid URI scheme and is ignored: "' + rule + '".');
+        }
+        return false;
+    });
+
+    var defaultPrefix = config.getPreference('WindowsDefaultUriPrefix');
+    if ('ms-appx://' !== defaultPrefix) {
+        var hasMsAppxWeb = whitelistRules.some(function(rule) {
+            return /^ms-appx-web:\/\/\/$/i.test(rule);
+        });
+        if (!hasMsAppxWeb) {
+            whitelistRules.push('ms-appx-web:///');
+        }
+    }
+
+    createApplicationContentUriRules(manifest, AppContentUriRulesElementName, RuleElementName, whitelistRules, { 
+        Type: 'include', 
+        WindowsRuntimeAccess: 'all'
+    });
+}
+
+/**
+ * Private function used by applyNavigationWhitelist and applyAccessRules
+ * which creates the corresponding section in the app manifest.
+ * @param manifest {et.ElementTree} The manifest document.
+ * @param acurElementName {string} The name of the AccessContentUriRules element, including prefix if applicable.
+ * @param ruleElementName {string} The name of the Rule element, including prefix if applicable.
+ * @param rulesOrigins {string[]} The origins that will be permitted.
+ * @param commonAttributes {Object} Property bag of additional attributes that should be applied to every rule.
+ */
+function createApplicationContentUriRules(manifest, acurElementName, ruleElementName, rulesOrigins, commonAttributes) {
     var appUriRulesRoot = manifest.find('.//Application'),
-        appUriRules = appUriRulesRoot.find('.//ApplicationContentUriRules');
+        appUriRules = appUriRulesRoot.find(acurElementName);
 
     if (appUriRules !== null) {
         appUriRulesRoot.remove(null, appUriRules);
     }
-    // rules are not defined or allow any
-    if (accessRules.length === 0 || accessRules.indexOf('*') > -1) {
+
+    // No rules defined
+    if (rulesOrigins.length === 0) {
         return;
-    } 
+    }
 
-    appUriRules = et.Element('ApplicationContentUriRules');
+    appUriRules = et.Element(acurElementName);
     appUriRulesRoot.append(appUriRules);
 
-    accessRules.forEach(function(rule) {
-        var el = et.Element('Rule');
+    rulesOrigins.forEach(function(rule) {
+        var el = et.Element(ruleElementName);
         el.attrib.Match = rule;
-        el.attrib.Type = 'include';
+
+        var attributes = Object.keys(commonAttributes);
+        attributes.forEach(function(attributeName) {
+            el.attrib[attributeName] = commonAttributes[attributeName];
+        });
         appUriRules.append(el);
     });
 }
@@ -262,6 +407,20 @@ function sortCapabilities(manifest) {
     });
 }
 
+function checkForRestrictedCapabilities(config, manifest) {
+    var hasRemoteUris = checkForRemoteModeUris(config);
+    if (hasRemoteUris) {
+        var capabilitiesRoot = manifest.find('.//Capabilities');
+        var badCaps = checkForRestrictedRemoteCapabilityDeclarations(capabilitiesRoot);
+        if (badCaps) {
+            console.warn('The following Capabilities were declared and are restricted:');
+            console.warn('   ' + badCaps.join(','));
+            console.warn('You will be unable to on-board your app to the public Windows Store with');
+            console.warn(' these capabilities and access rules permitting access to remote URIs.');
+        }
+    }
+}
+
 function copyImages(config) {
     var platformRoot = ROOT;
     // TODO find the way to detect whether command was triggered by CLI or not
@@ -310,9 +469,11 @@ function copyImages(config) {
         {dest: 'SplashScreen.scale-100.png', width: 620, height: 300},
         // scaled images are specified here for backward compatibility only so we can find them by size
         {dest: 'StoreLogo.scale-240.png', width: 120, height: 120},
+        {dest: 'Square44x44Logo.scale-100.png', width: 44, height: 44},
         {dest: 'Square44x44Logo.scale-240.png', width: 106, height: 106},
-        {dest: 'Square71x71Logo.scale-240.png', width: 170, height: 170},
         {dest: 'Square70x70Logo.scale-100.png', width: 70, height: 70},
+        {dest: 'Square71x71Logo.scale-100.png', width: 71, height: 71},
+        {dest: 'Square71x71Logo.scale-240.png', width: 170, height: 170},
         {dest: 'Square150x150Logo.scale-240.png', width: 360, height: 360},
         {dest: 'Square310x310Logo.scale-100.png', width: 310, height: 310},
         {dest: 'Wide310x150Logo.scale-100.png', width: 310, height: 150},
@@ -386,3 +547,176 @@ function applyBackgroundColor (config, manifest, xmlnsPrefix) {
         visualElems.attrib.BackgroundColor = refineColor(bgColor);
     }
 }
+
+function applyUAPVersionToProject(projectFilePath, uapVersionInfo) {
+    var fileContents = fs.readFileSync(projectFilePath).toString().trim();
+    var xml = et.parse(fileContents);
+    var tpv = xml.find('./PropertyGroup/TargetPlatformVersion');
+    var tpmv = xml.find('./PropertyGroup/TargetPlatformMinVersion');
+
+    tpv.text = uapVersionInfo.targetUAPVersion.toString();
+    tpmv.text = uapVersionInfo.minUAPVersion.toString();
+
+    fs.writeFileSync(projectFilePath, xml.write({ indent: 4 }), {});
+}
+
+function applyTargetPlatformVersion(config, manifest, uapVersionInfo) {
+    var dependencies = manifest.find('./Dependencies');
+    while (dependencies.len() > 0) {
+        dependencies.delItem(0);
+    }
+
+    var uapVersionSet = getAllMinMaxUAPVersions(config);
+    var platformNames = Object.keys(uapVersionSet);
+    for (var i = 0; i < platformNames.length; i++) {
+        var curTargetPlatformName = platformNames[i];
+        var curTargetPlatformInfo = uapVersionSet[curTargetPlatformName];
+
+        var elem = subElement(dependencies, 'TargetDeviceFamily');
+        elem.set('Name', curTargetPlatformName);
+        elem.set('MinVersion', curTargetPlatformInfo.MinVersion.toString());
+        elem.set('MaxVersionTested', curTargetPlatformInfo.MaxVersionTested.toString());
+    }
+}
+
+// returns {minUAPVersion: Version, targetUAPVersion: Version} | false
+function getUAPVersions(config) {
+    // @param config: ConfigParser
+    var baselineVersions = MSBuildTools.getAvailableUAPVersions();
+    if (!baselineVersions || baselineVersions.length === 0) {
+        return false;
+    }
+
+    baselineVersions.sort(Version.comparer);
+
+    return {
+        minUAPVersion: baselineVersions[0],
+        targetUAPVersion: baselineVersions[baselineVersions.length - 1]
+    };
+}
+
+/** 
+ * Gets min/max UAP versions from the configuration.  If no version preferences are
+ * in the configuration file, this will provide Windows.Universal at BASE_UAP_VERSION for both min and max.
+ * This will always return a rational object or will fail; for example, if a platform expects
+ * a higher min-version than max-version, it will raise the max version to the min version.
+ * 
+ * @param config {ConfigParser} The configuration parser
+ * @return An object in the shape of: { 'Windows.Mobile': {'MinVersion': Version, 'MaxVersion': Version } } (where Version is a Version object)
+ * @exception {RangeError} Thrown if a Version string is badly formed.
+ */
+function getAllMinMaxUAPVersions(config) {
+    var uapVersionPreferenceTest = /(Microsoft.+?|Windows.+?)\-(MinVersion|MaxVersionTested)/i;
+    var platformBag = Object.create(null);
+    var preferenceList = config.getMatchingPreferences(uapVersionPreferenceTest);
+    preferenceList.forEach(function(verPref) {
+        var matches = uapVersionPreferenceTest.exec(verPref.name);
+        // 'matches' should look like: ['Windows.Universal-MinVersion', 'Windows.Universal', 'MinVersion']
+        var platformName = matches[1];
+        var versionPropertyName = matches[2];
+
+        var platformVersionSet = platformBag[platformName];
+        if (typeof platformVersionSet === 'undefined') {
+            platformVersionSet = { };
+            platformBag[platformName] = platformVersionSet;
+        }
+
+        var versionTest = Version.tryParse(verPref.value);
+        if (!versionTest) {
+            throw new RangeError('Could not comprehend a valid version from the string "' + verPref.value + '" of platform-boundary "' + verPref.name + '".');
+        }
+
+        platformVersionSet[versionPropertyName] = versionTest;
+    });
+
+    for (var platformName in platformBag) {
+        // Go through each and make sure there are min/max set
+        var versionPref = platformBag[platformName];
+        if (!versionPref.MaxVersionTested && !!versionPref.MinVersion) { // min is set, but max is not
+            versionPref.MaxVersionTested = versionPref.MinVersion;
+        }
+        else if (!versionPref.MinVersion && !!versionPref.MaxVersionTested) { // max is set, min is not
+            versionPref.MinVersion = versionPref.MaxVersionTested;
+        }
+        else if (!versionPref.MinVersion && !versionPref.MaxVersionTested) { // neither are set
+            versionPref.MinVersion = BASE_UAP_VERSION;
+            versionPref.MaxVersionTested = BASE_UAP_VERSION;
+        } 
+        else { // both are set
+            if (versionPref.MinVersion.gt(versionPref.MaxVersionTested)) {
+                versionPref.MaxVersionTested = versionPref.MinVersion;
+            }
+        }
+    }
+
+    if (Object.keys(platformBag).length === 0) {
+        platformBag['Windows.Universal'] = { MinVersion: BASE_UAP_VERSION, MaxVersionTested: BASE_UAP_VERSION };
+    }
+
+    return platformBag;
+}
+
+/**
+ * Checks to see whether access rules or 
+ * @param config {ConfigParser} The configuration parser
+ * @return {boolean} True if the config specifies remote URIs for access or start; false otherwise.
+ */
+function checkForRemoteModeUris(config) {
+    var accessRules = config.getNavigationWhitelistRules();
+    var startPage = config.startPage();
+    var test = /(https?|ms-appx-web):\/\//i;
+
+    var hasRemoteUri = test.test(startPage);
+    hasRemoteUri = hasRemoteUri || accessRules.some(function(rule) {
+        return test.test(rule);
+    });
+
+    return hasRemoteUri;
+}
+
+/** 
+ * Checks for capabilities which are Restricted in Windows 10 UAP.
+ * @param appxManifestCapabilitiesElement {ElementTree.Element} The appx manifest element for <capabilities>
+ * @return {string[]|false} An array of restricted capability names, or false.
+ */
+function checkForRestrictedRemoteCapabilityDeclarations(appxManifestCapabilitiesElement) {
+    if (!appxManifestCapabilitiesElement)
+        return false;
+
+    var hasRestrictedCapabilities = false;
+    var foundRestrictedCapabilities = [];
+
+    var children = appxManifestCapabilitiesElement.getchildren();
+    var declaredCapabilities = children.map(function(el) {
+        return el.attrib.Name;
+    });
+
+    UAP_RESTRICTED_CAPS.forEach(function(cap) {
+        if (declaredCapabilities.indexOf(cap) > -1) {
+            hasRestrictedCapabilities = true;
+            foundRestrictedCapabilities.push(cap);
+        }
+    });
+
+    return hasRestrictedCapabilities ? foundRestrictedCapabilities : hasRestrictedCapabilities;
+}
+
+/**
+ * Checks for capabilities which require the uap: prefix in Windows 10.
+ * @param appxManifestCapabilitiesElement {ElementTree.Element} The appx manifest element for <capabilities>
+ */
+function ensureUapPrefixedCapabilities(appxManifestCapabilitiesElement) {
+    var children = appxManifestCapabilitiesElement.getchildren();
+    var declaredCapabilities = children.map(function(el) {
+        return { name: el.attrib.Name, element: el, elementName: el.tag };
+    });
+
+    declaredCapabilities.forEach(function(cap) {
+        if (CAPS_NEEDING_UAPNS.indexOf(cap.name) > -1) {
+            if (cap.elementName.indexOf('uap:') === -1) {
+                cap.elementName = 'uap:' + cap.elementName;
+                cap.element.tag = cap.elementName;
+            }
+        }
+    });
+}

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/template/cordova/lib/run.js
----------------------------------------------------------------------
diff --git a/template/cordova/lib/run.js b/template/cordova/lib/run.js
index 3195793..d54823d 100644
--- a/template/cordova/lib/run.js
+++ b/template/cordova/lib/run.js
@@ -32,10 +32,10 @@ module.exports.run = function (argv) {
         return Q.reject('Could not find project at ' + ROOT);
     }
 
-    // parse args
+    // parse arg
     var args  = nopt({'debug': Boolean, 'release': Boolean, 'nobuild': Boolean,
         'device': Boolean, 'emulator': Boolean, 'target': String, 'archs': String,
-        'phone': Boolean, 'win': Boolean}, {'r' : '--release'}, argv);
+        'phone': Boolean, 'win': Boolean, 'appx': String}, {'r' : '--release'}, argv);
 
     // Validate args
     if (args.debug && args.release) {
@@ -52,11 +52,43 @@ module.exports.run = function (argv) {
     var buildType    = args.release ? 'release' : 'debug',
         buildArchs   = args.archs ? args.archs.split(' ') : ['anycpu'],
         projectType  = args.phone ? 'phone' : 'windows',
-        deployTarget = args.target ? args.target : args.device ? 'device' : 'emulator';
+        deployTarget = args.target ? args.target : (args.emulator ? 'emulator' : 'device'),
+        projOverride = args.appx;
 
     // for win switch we should correctly handle 8.0 and 8.1 version as per configuration
-    if (projectType == 'windows' && getWindowsTargetVersion() == '8.0') {
-        projectType = 'windows80';
+    // as well as 10
+    var targetWindowsVersion = getWindowsTargetVersion();
+    if (projectType == 'windows') {
+        if (targetWindowsVersion == '8.0') {
+            projectType = 'windows80';
+        }
+        else if (targetWindowsVersion === '10.0') {
+            projectType = 'windows10';
+        }
+    }
+    else if (projectType === 'phone') {
+        if (targetWindowsVersion === '10.0' || targetWindowsVersion === 'UAP') {
+            projectType = 'windows10';
+        }
+    }
+
+    if (projOverride) {
+        switch (projOverride) {
+            case '8.1-phone':
+                projectType = 'phone';
+                targetWindowsVersion = '8.1';
+                break;
+            case '8.1-win':
+                projectType = 'windows';
+                targetWindowsVersion = '8.1';
+                break;
+            case 'uap':
+                projectType = 'windows10';
+                break;
+            default:
+                console.warn('Unrecognized --appx parameter passed to run: "' + projOverride + '", ignoring.');
+                break;
+        }
     }
 
     // if --nobuild isn't specified then build app first
@@ -65,10 +97,35 @@ module.exports.run = function (argv) {
     return buildPackages.then(function () {
         return packages.getPackage(projectType, buildType, buildArchs[0]);
     }).then(function(pkg) {
-        console.log('\nDeploying ' + pkg.type + ' package to ' + deployTarget + ':\n' + pkg.file);
-        return pkg.type == 'phone' ?
-            packages.deployToPhone(pkg.file, deployTarget) :
-            packages.deployToDesktop(pkg.file, deployTarget);
+        console.log('\nDeploying ' + pkg.type + ' package to ' + deployTarget + ':\n' + pkg.appx);
+        switch (pkg.type) {
+            case 'phone':
+                return packages.deployToPhoneAndRun(pkg, deployTarget, false).catch(function(e) {
+                    if (args.target || args.emulator || args.device) {
+                        throw e; // Explicit target, carry on
+                    }
+                    
+                    // 'device' was inferred initially, because no target was specified
+                    return packages.deployToPhoneAndRun(pkg, 'emulator', false);
+                });
+                
+            case 'windows10':
+                if (args.phone) {
+                    // Win10 emulator launch is not currently supported, always force device
+                    if (args.emulator || args.target === 'emulator') {
+                        console.warn('Windows 10 Phone emulator is not currently supported, attempting deploy to device.');
+                    }
+                    return packages.deployToPhoneAndRun(pkg, 'device', true);
+                }
+                else {
+                    return packages.deployToDesktop(pkg, deployTarget, projectType);
+                }
+            
+                break;    
+            default: // 'windows'
+                return packages.deployToDesktop(pkg, deployTarget, projectType);
+                
+        }
     });
 };
 
@@ -84,6 +141,9 @@ module.exports.help = function () {
     console.log('    --archs       : Specific chip architectures (`anycpu`, `arm`, `x86`, `x64`).');
     console.log('    --phone, --win');
     console.log('                  : Specifies project type to deploy');
+    console.log('    --appx=<8.1-win|8.1-phone|uap>');
+    console.log('                  : Overrides WindowsTargetVersion to build Windows 8.1, ');
+    console.log('                              Windows Phone 8.1, or Windows 10.');
     console.log('');
     console.log('Examples:');
     console.log('    run');
@@ -92,21 +152,26 @@ module.exports.help = function () {
     console.log('    run --target=7988B8C3-3ADE-488d-BA3E-D052AC9DC710');
     console.log('    run --device --release');
     console.log('    run --emulator --debug');
+    console.log('    run --device --appx=phone-8.1');
     console.log('');
+
     process.exit(0);
 };
 
 
 function getWindowsTargetVersion() {
     var config = new ConfigParser(path.join(ROOT, 'config.xml'));
-    var windowsTargetVersion = config.getPreference('windows-target-version');
+    var windowsTargetVersion = config.getWindowsTargetVersion();
     switch(windowsTargetVersion) {
-    case '8':
-    case '8.0':
-        return '8.0';
-    case '8.1':
-        return '8.1';
-    default:
-        throw new Error('Unsupported windows-target-version value: ' + windowsTargetVersion);
+        case '8':
+        case '8.0':
+            return '8.0';
+        case '8.1':
+            return '8.1';
+        case '10.0':
+        case 'UAP':
+            return '10.0';
+        default:
+            throw new Error('Unsupported WindowsTargetVersion value: ' + windowsTargetVersion);
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/template/cordova/lib/utils.js
----------------------------------------------------------------------
diff --git a/template/cordova/lib/utils.js b/template/cordova/lib/utils.js
index 22faf13..7e7adf9 100644
--- a/template/cordova/lib/utils.js
+++ b/template/cordova/lib/utils.js
@@ -64,14 +64,27 @@ module.exports.getAppStoreUtils = function () {
     });
 };
 
+function getProgramFiles32Folder() {
+    /* jshint ignore:start */ /* Wants to use dot syntax for ProgramFiles, leaving as-is for consistency */
+    return process.env['ProgramFiles(x86)'] || process.env['ProgramFiles'];
+    /* jshint ignore:end */
+}
+
 // returns path to AppDeploy util from Windows Phone 8.1 SDK
-module.exports.getAppDeployUtils = function () {
-    var appDeployUtils = path.join((process.env['ProgramFiles(x86)'] || process.env['ProgramFiles']),
-        'Microsoft SDKs', 'Windows Phone', 'v8.1', 'Tools', 'AppDeploy', 'AppDeployCmd.exe');
-    // Check if AppDeployCmd exists
+module.exports.getAppDeployUtils = function (targetWin10) {
+    var appDeployUtils,
+        appDeployCmdName;
+    if (targetWin10) {
+        appDeployCmdName = 'WinAppDeployCmd.exe';
+        appDeployUtils = path.join(getProgramFiles32Folder(), 'Windows Kits', '10', 'bin', 'x86', appDeployCmdName);
+    } else {
+        appDeployCmdName = 'AppDeployCmd.exe';
+        appDeployUtils = path.join(getProgramFiles32Folder(), 'Microsoft SDKs', 'Windows Phone', 'v8.1', 'Tools', 'AppDeploy', appDeployCmdName);
+    }
+    // Check if AppDeployCmd is exists
     if (!fs.existsSync(appDeployUtils)) {
-        console.warn('WARNING: AppDeploy tool (AppDeployCmd.exe) wasn\'t found. Make sure that it\'s in %PATH%');
-        return Q.resolve('AppDeployCmd');
+        console.warn('WARNING: AppDeploy tool (' + appDeployCmdName + ') wasn\'t found. Make sure that it\'s in %PATH%');
+        return Q.resolve(appDeployCmdName);
     }
     return Q.resolve(appDeployUtils);
 };

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/template/images/Square44x44Logo.scale-100.png
----------------------------------------------------------------------
diff --git a/template/images/Square44x44Logo.scale-100.png b/template/images/Square44x44Logo.scale-100.png
new file mode 100644
index 0000000..ce84d15
Binary files /dev/null and b/template/images/Square44x44Logo.scale-100.png differ

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/template/images/Square71x71Logo.scale-100.png
----------------------------------------------------------------------
diff --git a/template/images/Square71x71Logo.scale-100.png b/template/images/Square71x71Logo.scale-100.png
new file mode 100644
index 0000000..9e712ab
Binary files /dev/null and b/template/images/Square71x71Logo.scale-100.png differ

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/template/package.windows10.appxmanifest
----------------------------------------------------------------------
diff --git a/template/package.windows10.appxmanifest b/template/package.windows10.appxmanifest
new file mode 100644
index 0000000..e59e019
--- /dev/null
+++ b/template/package.windows10.appxmanifest
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+-->
+<Package
+  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
+  xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
+  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
+  IgnorableNamespaces="uap mp">
+
+  <Identity
+    Name="$guid1$"
+    Version="1.0.0.0"
+    Publisher="CN=$username$" />
+
+  <mp:PhoneIdentity PhoneProductId="$guid1$" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>
+
+  <Properties>
+    <DisplayName>$projectname$</DisplayName>
+    <PublisherDisplayName>$username$</PublisherDisplayName>
+    <Logo>images\StoreLogo.png</Logo>
+  </Properties>
+
+  <Dependencies>
+    <TargetDeviceFamily Name="Windows.Universal" MinVersion="0.0.0.0" MaxVersionTested="10.0.0.0" />
+  </Dependencies>
+
+  <Resources>
+    <Resource Language="x-generate" />
+  </Resources>
+
+  <Applications>
+    <Application
+      Id="$safeprojectname$"
+      StartPage="www/index.html">
+
+      <uap:VisualElements
+        DisplayName="$projectname$"
+        Description="CordovaApp"
+        BackgroundColor="#464646"
+        Square150x150Logo="images\Square150x150Logo.png"
+        Square44x44Logo="images\Square44x44Logo.png">
+
+        <uap:SplashScreen Image="images\splashscreen.png" />
+        <uap:DefaultTile ShortName="$projectname$" 
+                         Square310x310Logo="images\Square310x310Logo.png"
+                         Square71x71Logo="images\Square71x71Logo.png" 
+                         Wide310x150Logo="images\Wide310x150Logo.png" />
+
+      </uap:VisualElements>
+    </Application>
+  </Applications>
+
+  <Capabilities>
+    <Capability Name="internetClient" />
+  </Capabilities>
+
+</Package>

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/template/www/cordova.js
----------------------------------------------------------------------
diff --git a/template/www/cordova.js b/template/www/cordova.js
index 79a6ba5..56dedcc 100644
--- a/template/www/cordova.js
+++ b/template/www/cordova.js
@@ -1289,7 +1289,10 @@ module.exports = {
         if (!window.WinJS) {
             var scriptElem = document.createElement("script");
 
-            if (navigator.appVersion.indexOf("Windows Phone 8.1;") !== -1) {
+            if (navigator.appVersion.indexOf('MSAppHost/3.0') !== -1) {
+                // Windows 10 UAP
+                scriptElem.src = '/WinJS/js/WinJS.js';
+            } else if (navigator.appVersion.indexOf("Windows Phone 8.1;") !== -1) {
                 // windows phone 8.1 + Mobile IE 11
                 scriptElem.src = "//Microsoft.Phone.WinJS.2.1/js/base.js";
             } else if (navigator.appVersion.indexOf("MSAppHost/2.0;") !== -1) {

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/template/www/js/index.js
----------------------------------------------------------------------
diff --git a/template/www/js/index.js b/template/www/js/index.js
index 31d9064..87b5660 100644
--- a/template/www/js/index.js
+++ b/template/www/js/index.js
@@ -31,7 +31,7 @@ var app = {
     // deviceready Event Handler
     //
     // The scope of 'this' is the event. In order to call the 'receivedEvent'
-    // function, we must explicity call 'app.receivedEvent(...);'
+    // function, we must explicitly call 'app.receivedEvent(...);'
     onDeviceReady: function() {
         app.receivedEvent('deviceready');
     },


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


[2/7] cordova-windows git commit: CB-8923 Add support for Windows 10 platform

Posted by ax...@apache.org.
http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/template/WinJS/js/en-US/ui.strings.js
----------------------------------------------------------------------
diff --git a/template/WinJS/js/en-US/ui.strings.js b/template/WinJS/js/en-US/ui.strings.js
new file mode 100644
index 0000000..d9f9b0f
--- /dev/null
+++ b/template/WinJS/js/en-US/ui.strings.js
@@ -0,0 +1,476 @@
+/*!
+  Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information.
+  Build: 4.0.0.winjs.2015.4.23
+  Version: WinJS.4.0
+*/
+
+(function () {
+    var globalObject =
+        typeof window !== 'undefined' ? window :
+        typeof self !== 'undefined' ? self :
+        typeof global !== 'undefined' ? global :
+        {};
+    globalObject.strings = globalObject.strings || {};
+
+    var appxVersion = "WinJS.4.0";
+    var developerPrefix = "Developer.";
+    if (appxVersion.indexOf(developerPrefix) === 0) {
+        appxVersion = appxVersion.substring(developerPrefix.length);
+    }
+
+    function addStrings(keyPrefix,  strings) {
+        Object.keys(strings).forEach(function (key) {
+            globalObject.strings[keyPrefix + key.replace("\\", "/")] = strings[key];
+        });
+    }
+    addStrings("ms-resource://"+appxVersion+"/ui/",
+{
+    "appBarAriaLabel": "App Bar",
+    "appBarCommandAriaLabel": "App Bar Item",
+	"appBarOverflowButtonAriaLabel": "View more",
+    "autoSuggestBoxAriaLabel": "Autosuggestbox",
+    "autoSuggestBoxAriaLabelInputNoPlaceHolder": "Autosuggestbox, enter to submit query, esc to clear text",
+    "autoSuggestBoxAriaLabelInputPlaceHolder": "Autosuggestbox, {0}, enter to submit query, esc to clear text",
+    "autoSuggestBoxAriaLabelQuery": "Suggestion: {0}",
+    "_autoSuggestBoxAriaLabelQuery.comment": "Suggestion: query text (example: Suggestion: contoso)",
+    "autoSuggestBoxAriaLabelSeparator": "Separator: {0}",
+    "_autoSuggestBoxAriaLabelSeparator.comment": "Separator: separator text (example: Separator: People or Separator: Apps)",
+    "autoSuggestBoxAriaLabelResult": "Result: {0}, {1}",
+    "_autoSuggestBoxAriaLabelResult.comment": "Result: text, detailed text (example: Result: contoso, www.contoso.com)",
+    "averageRating": "Average Rating",
+    "backbuttonarialabel": "Back",
+    "clearYourRating" : "Clear your rating",
+    "closeOverlay" : "Close",
+    "commandingSurfaceAriaLabel": "CommandingSurface",
+    "commandingSurfaceOverflowButtonAriaLabel": "View more",
+    "datePicker": "Date Picker",
+    "flipViewPanningContainerAriaLabel": "Scrolling Container",
+    "flyoutAriaLabel": "Flyout",
+    "hubViewportAriaLabel": "Scrolling Container",
+    "listViewViewportAriaLabel": "Scrolling Container",
+    "menuCommandAriaLabel": "Menu Item",
+    "menuAriaLabel": "Menu",
+    "navBarContainerViewportAriaLabel": "Scrolling Container",
+    "off" : "Off",
+    "on" : "On",
+    "pivotAriaLabel": "Pivot",
+    "pivotViewportAriaLabel": "Scrolling Container",
+    "searchBoxAriaLabel": "Searchbox",
+    "searchBoxAriaLabelInputNoPlaceHolder": "Searchbox, enter to submit query, esc to clear text",
+    "searchBoxAriaLabelInputPlaceHolder": "Searchbox, {0}, enter to submit query, esc to clear text",
+    "searchBoxAriaLabelButton": "Click to submit query",
+    "seeMore":  "See more",
+    "selectAMPM": "Select A.M P.M",
+    "selectDay": "Select Day",
+    "selectHour": "Select Hour",
+    "selectMinute": "Select Minute",
+    "selectMonth": "Select Month",
+    "selectYear": "Select Year",
+    "settingsFlyoutAriaLabel": "Settings Flyout",
+    "tentativeRating": "Tentative Rating",
+    "timePicker": "Time Picker",
+    "toolbarAriaLabel": "ToolBar",
+    "toolbarOverflowButtonAriaLabel": "View more",
+    "unrated": "Unrated",
+    "userRating": "User Rating",
+    // AppBar Icons follow, the format of the ui.js and ui.resjson differ for
+    // the AppBarIcon namespace.  The remainder of the file therefore differs.
+    // Code point comments are the icon glyphs in the 'Segoe UI Symbol' font.
+    "appBarIcons\\previous":                            "\uE100", //  group:Media
+    "_appBarIcons\\previous.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\next":                                "\uE101", //  group:Media
+    "_appBarIcons\\next.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\play":                                "\uE102", //  group:Media
+    "_appBarIcons\\play.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\pause":                               "\uE103", //  group:Media
+    "_appBarIcons\\pause.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\edit":                                "\uE104", //  group:File
+    "_appBarIcons\\edit.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\save":                                "\uE105", //  group:File
+    "_appBarIcons\\save.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\clear":                               "\uE106", //  group:File
+    "_appBarIcons\\clear.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\delete":                              "\uE107", //  group:File
+    "_appBarIcons\\delete.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\remove":                              "\uE108", //  group:File
+    "_appBarIcons\\remove.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\add":                                 "\uE109", //  group:File
+    "_appBarIcons\\add.comment":                        "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\cancel":                              "\uE10A", //  group:Editing
+    "_appBarIcons\\cancel.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\accept":                              "\uE10B", //  group:General
+    "_appBarIcons\\accept.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\more":                                "\uE10C", //  group:General
+    "_appBarIcons\\more.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\redo":                                "\uE10D", //  group:Editing
+    "_appBarIcons\\redo.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\undo":                                "\uE10E", //  group:Editing
+    "_appBarIcons\\undo.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\home":                                "\uE10F", //  group:General
+    "_appBarIcons\\home.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\up":                                  "\uE110", //  group:General
+    "_appBarIcons\\up.comment":                         "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\forward":                             "\uE111", //  group:General
+    "_appBarIcons\\forward.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\right":                               "\uE111", //  group:General
+    "_appBarIcons\\right.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\back":                                "\uE112", //  group:General
+    "_appBarIcons\\back.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\left":                                "\uE112", //  group:General
+    "_appBarIcons\\left.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\favorite":                            "\uE113", //  group:Media
+    "_appBarIcons\\favorite.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\camera":                              "\uE114", //  group:System
+    "_appBarIcons\\camera.comment":                     "{Locked:qps-ploc,qps-plocm}",    
+    "appBarIcons\\settings":                            "\uE115", //  group:System
+    "_appBarIcons\\settings.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\video":                               "\uE116", //  group:Media
+    "_appBarIcons\\video.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\sync":                                "\uE117", //  group:Media
+    "_appBarIcons\\sync.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\download":                            "\uE118", //  group:Media
+    "_appBarIcons\\download.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\mail":                                "\uE119", //  group:Mail and calendar
+    "_appBarIcons\\mail.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\find":                                "\uE11A", //  group:Data
+    "_appBarIcons\\find.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\help":                                "\uE11B", //  group:General
+    "_appBarIcons\\help.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\upload":                              "\uE11C", //  group:Media
+    "_appBarIcons\\upload.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\emoji":                               "\uE11D", //  group:Communications
+    "_appBarIcons\\emoji.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\twopage":                             "\uE11E", //  group:Layout
+    "_appBarIcons\\twopage.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\leavechat":                           "\uE11F", //  group:Communications
+    "_appBarIcons\\leavechat.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\mailforward":                         "\uE120", //  group:Mail and calendar
+    "_appBarIcons\\mailforward.comment":                "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\clock":                               "\uE121", //  group:General
+    "_appBarIcons\\clock.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\send":                                "\uE122", //  group:Mail and calendar
+    "_appBarIcons\\send.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\crop":                                "\uE123", //  group:Editing
+    "_appBarIcons\\crop.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\rotatecamera":                        "\uE124", //  group:System
+    "_appBarIcons\\rotatecamera.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\people":                              "\uE125", //  group:Communications
+    "_appBarIcons\\people.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\closepane":                           "\uE126", //  group:Layout
+    "_appBarIcons\\closepane.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\openpane":                            "\uE127", //  group:Layout
+    "_appBarIcons\\openpane.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\world":                               "\uE128", //  group:General
+    "_appBarIcons\\world.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\flag":                                "\uE129", //  group:Mail and calendar
+    "_appBarIcons\\flag.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\previewlink":                         "\uE12A", //  group:General
+    "_appBarIcons\\previewlink.comment":                "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\globe":                               "\uE12B", //  group:Communications
+    "_appBarIcons\\globe.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\trim":                                "\uE12C", //  group:Editing
+    "_appBarIcons\\trim.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\attachcamera":                        "\uE12D", //  group:System
+    "_appBarIcons\\attachcamera.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\zoomin":                              "\uE12E", //  group:Layout
+    "_appBarIcons\\zoomin.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\bookmarks":                           "\uE12F", //  group:Editing
+    "_appBarIcons\\bookmarks.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\document":                            "\uE130", //  group:File
+    "_appBarIcons\\document.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\protecteddocument":                   "\uE131", //  group:File
+    "_appBarIcons\\protecteddocument.comment":          "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\page":                                "\uE132", //  group:Layout
+    "_appBarIcons\\page.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\bullets":                             "\uE133", //  group:Editing
+    "_appBarIcons\\bullets.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\comment":                             "\uE134", //  group:Communications
+    "_appBarIcons\\comment.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\mail2":                               "\uE135", //  group:Mail and calendar
+    "_appBarIcons\\mail2.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\contactinfo":                         "\uE136", //  group:Communications
+    "_appBarIcons\\contactinfo.comment":                "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\hangup":                              "\uE137", //  group:Communications
+    "_appBarIcons\\hangup.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\viewall":                             "\uE138", //  group:Data
+    "_appBarIcons\\viewall.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\mappin":                              "\uE139", //  group:General
+    "_appBarIcons\\mappin.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\phone":                               "\uE13A", //  group:Communications
+    "_appBarIcons\\phone.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\videochat":                           "\uE13B", //  group:Communications
+    "_appBarIcons\\videochat.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\switch":                              "\uE13C", //  group:Communications
+    "_appBarIcons\\switch.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\contact":                             "\uE13D", //  group:Communications
+    "_appBarIcons\\contact.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\rename":                              "\uE13E", //  group:File
+    "_appBarIcons\\rename.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\pin":                                 "\uE141", //  group:System
+    "_appBarIcons\\pin.comment":                        "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\musicinfo":                           "\uE142", //  group:Media
+    "_appBarIcons\\musicinfo.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\go":                                  "\uE143", //  group:General
+    "_appBarIcons\\go.comment":                         "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\keyboard":                            "\uE144", //  group:System
+    "_appBarIcons\\keyboard.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\dockleft":                            "\uE145", //  group:Layout
+    "_appBarIcons\\dockleft.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\dockright":                           "\uE146", //  group:Layout
+    "_appBarIcons\\dockright.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\dockbottom":                          "\uE147", //  group:Layout
+    "_appBarIcons\\dockbottom.comment":                 "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\remote":                              "\uE148", //  group:System
+    "_appBarIcons\\remote.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\refresh":                             "\uE149", //  group:Data
+    "_appBarIcons\\refresh.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\rotate":                              "\uE14A", //  group:Layout
+    "_appBarIcons\\rotate.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\shuffle":                             "\uE14B", //  group:Media
+    "_appBarIcons\\shuffle.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\list":                                "\uE14C", //  group:Editing
+    "_appBarIcons\\list.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\shop":                                "\uE14D", //  group:General
+    "_appBarIcons\\shop.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\selectall":                           "\uE14E", //  group:Data
+    "_appBarIcons\\selectall.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\orientation":                         "\uE14F", //  group:Layout
+    "_appBarIcons\\orientation.comment":                "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\import":                              "\uE150", //  group:Data
+    "_appBarIcons\\import.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\importall":                           "\uE151", //  group:Data
+    "_appBarIcons\\importall.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\browsephotos":                        "\uE155", //  group:Media
+    "_appBarIcons\\browsephotos.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\webcam":                              "\uE156", //  group:System
+    "_appBarIcons\\webcam.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\pictures":                            "\uE158", //  group:Media
+    "_appBarIcons\\pictures.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\savelocal":                           "\uE159", //  group:File
+    "_appBarIcons\\savelocal.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\caption":                             "\uE15A", //  group:Media
+    "_appBarIcons\\caption.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\stop":                                "\uE15B", //  group:Media
+    "_appBarIcons\\stop.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\showresults":                         "\uE15C", //  group:Data
+    "_appBarIcons\\showresults.comment":                "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\volume":                              "\uE15D", //  group:Media
+    "_appBarIcons\\volume.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\repair":                              "\uE15E", //  group:System
+    "_appBarIcons\\repair.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\message":                             "\uE15F", //  group:Communications
+    "_appBarIcons\\message.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\page2":                               "\uE160", //  group:Layout
+    "_appBarIcons\\page2.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\calendarday":                         "\uE161", //  group:Mail and calendar
+    "_appBarIcons\\calendarday.comment":                "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\calendarweek":                        "\uE162", //  group:Mail and calendar
+    "_appBarIcons\\calendarweek.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\calendar":                            "\uE163", //  group:Mail and calendar
+    "_appBarIcons\\calendar.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\characters":                          "\uE164", //  group:Editing
+    "_appBarIcons\\characters.comment":                 "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\mailreplyall":                        "\uE165", //  group:Mail and calendar
+    "_appBarIcons\\mailreplyall.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\read":                                "\uE166", //  group:Mail and calendar
+    "_appBarIcons\\read.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\link":                                "\uE167", //  group:Communications
+    "_appBarIcons\\link.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\accounts":                            "\uE168", //  group:Communications
+    "_appBarIcons\\accounts.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\showbcc":                             "\uE169", //  group:Mail and calendar
+    "_appBarIcons\\showbcc.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\hidebcc":                             "\uE16A", //  group:Mail and calendar
+    "_appBarIcons\\hidebcc.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\cut":                                 "\uE16B", //  group:Editing
+    "_appBarIcons\\cut.comment":                        "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\attach":                              "\uE16C", //  group:Mail and calendar
+    "_appBarIcons\\attach.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\paste":                               "\uE16D", //  group:Editing
+    "_appBarIcons\\paste.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\filter":                              "\uE16E", //  group:Data
+    "_appBarIcons\\filter.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\copy":                                "\uE16F", //  group:Editing
+    "_appBarIcons\\copy.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\emoji2":                              "\uE170", //  group:Mail and calendar
+    "_appBarIcons\\emoji2.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\important":                           "\uE171", //  group:Mail and calendar
+    "_appBarIcons\\important.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\mailreply":                           "\uE172", //  group:Mail and calendar
+    "_appBarIcons\\mailreply.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\slideshow":                           "\uE173", //  group:Media
+    "_appBarIcons\\slideshow.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\sort":                                "\uE174", //  group:Data
+    "_appBarIcons\\sort.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\manage":                              "\uE178", //  group:System
+    "_appBarIcons\\manage.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\allapps":                             "\uE179", //  group:System
+    "_appBarIcons\\allapps.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\disconnectdrive":                     "\uE17A", //  group:System
+    "_appBarIcons\\disconnectdrive.comment":            "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\mapdrive":                            "\uE17B", //  group:System
+    "_appBarIcons\\mapdrive.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\newwindow":                           "\uE17C", //  group:System
+    "_appBarIcons\\newwindow.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\openwith":                            "\uE17D", //  group:System
+    "_appBarIcons\\openwith.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\contactpresence":                     "\uE181", //  group:Communications
+    "_appBarIcons\\contactpresence.comment":            "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\priority":                            "\uE182", //  group:Mail and calendar
+    "_appBarIcons\\priority.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\uploadskydrive":                      "\uE183", //  group:File
+    "_appBarIcons\\uploadskydrive.comment":             "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\gototoday":                           "\uE184", //  group:Mail and calendar
+    "_appBarIcons\\gototoday.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\font":                                "\uE185", //  group:Editing
+    "_appBarIcons\\font.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\fontcolor":                           "\uE186", //  group:Editing
+    "_appBarIcons\\fontcolor.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\contact2":                            "\uE187", //  group:Communications
+    "_appBarIcons\\contact2.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\folder":                              "\uE188", //  group:File
+    "_appBarIcons\\folder.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\audio":                               "\uE189", //  group:Media
+    "_appBarIcons\\audio.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\placeholder":                         "\uE18A", //  group:General
+    "_appBarIcons\\placeholder.comment":                "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\view":                                "\uE18B", //  group:Layout
+    "_appBarIcons\\view.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\setlockscreen":                       "\uE18C", //  group:System
+    "_appBarIcons\\setlockscreen.comment":              "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\settile":                             "\uE18D", //  group:System
+    "_appBarIcons\\settile.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\cc":                                  "\uE190", //  group:Media
+    "_appBarIcons\\cc.comment":                         "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\stopslideshow":                       "\uE191", //  group:Media
+    "_appBarIcons\\stopslideshow.comment":              "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\permissions":                         "\uE192", //  group:System
+    "_appBarIcons\\permissions.comment":                "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\highlight":                           "\uE193", //  group:Editing
+    "_appBarIcons\\highlight.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\disableupdates":                      "\uE194", //  group:System
+    "_appBarIcons\\disableupdates.comment":             "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\unfavorite":                          "\uE195", //  group:Media
+    "_appBarIcons\\unfavorite.comment":                 "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\unpin":                               "\uE196", //  group:System
+    "_appBarIcons\\unpin.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\openlocal":                           "\uE197", //  group:File
+    "_appBarIcons\\openlocal.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\mute":                                "\uE198", //  group:Media
+    "_appBarIcons\\mute.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\italic":                              "\uE199", //  group:Editing
+    "_appBarIcons\\italic.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\underline":                           "\uE19A", //  group:Editing
+    "_appBarIcons\\underline.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\bold":                                "\uE19B", //  group:Editing
+    "_appBarIcons\\bold.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\movetofolder":                        "\uE19C", //  group:File
+    "_appBarIcons\\movetofolder.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\likedislike":                         "\uE19D", //  group:Data
+    "_appBarIcons\\likedislike.comment":                "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\dislike":                             "\uE19E", //  group:Data
+    "_appBarIcons\\dislike.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\like":                                "\uE19F", //  group:Data
+    "_appBarIcons\\like.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\alignright":                          "\uE1A0", //  group:Editing
+    "_appBarIcons\\alignright.comment":                 "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\aligncenter":                         "\uE1A1", //  group:Editing
+    "_appBarIcons\\aligncenter.comment":                "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\alignleft":                           "\uE1A2", //  group:Editing
+    "_appBarIcons\\alignleft.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\zoom":                                "\uE1A3", //  group:Layout
+    "_appBarIcons\\zoom.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\zoomout":                             "\uE1A4", //  group:Layout
+    "_appBarIcons\\zoomout.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\openfile":                            "\uE1A5", //  group:File
+    "_appBarIcons\\openfile.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\otheruser":                           "\uE1A6", //  group:System
+    "_appBarIcons\\otheruser.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\admin":                               "\uE1A7", //  group:System
+    "_appBarIcons\\admin.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\street":                              "\uE1C3", //  group:General
+    "_appBarIcons\\street.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\map":                                 "\uE1C4", //  group:General
+    "_appBarIcons\\map.comment":                        "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\clearselection":                      "\uE1C5", //  group:Data
+    "_appBarIcons\\clearselection.comment":             "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\fontdecrease":                        "\uE1C6", //  group:Editing
+    "_appBarIcons\\fontdecrease.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\fontincrease":                        "\uE1C7", //  group:Editing
+    "_appBarIcons\\fontincrease.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\fontsize":                            "\uE1C8", //  group:Editing
+    "_appBarIcons\\fontsize.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\cellphone":                           "\uE1C9", //  group:Communications
+    "_appBarIcons\\cellphone.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\reshare":                             "\uE1CA", //  group:Communications
+    "_appBarIcons\\reshare.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\tag":                                 "\uE1CB", //  group:Data
+    "_appBarIcons\\tag.comment":                        "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\repeatone":                           "\uE1CC", //  group:Media
+    "_appBarIcons\\repeatone.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\repeatall":                           "\uE1CD", //  group:Media
+    "_appBarIcons\\repeatall.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\outlinestar":                         "\uE1CE", //  group:Data
+    "_appBarIcons\\outlinestar.comment":                "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\solidstar":                           "\uE1CF", //  group:Data
+    "_appBarIcons\\solidstar.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\calculator":                          "\uE1D0", //  group:General
+    "_appBarIcons\\calculator.comment":                 "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\directions":                          "\uE1D1", //  group:General
+    "_appBarIcons\\directions.comment":                 "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\target":                              "\uE1D2", //  group:General
+    "_appBarIcons\\target.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\library":                             "\uE1D3", //  group:Media
+    "_appBarIcons\\library.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\phonebook":                           "\uE1D4", //  group:Communications
+    "_appBarIcons\\phonebook.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\memo":                                "\uE1D5", //  group:Communications
+    "_appBarIcons\\memo.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\microphone":                          "\uE1D6", //  group:System
+    "_appBarIcons\\microphone.comment":                 "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\postupdate":                          "\uE1D7", //  group:Communications
+    "_appBarIcons\\postupdate.comment":                 "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\backtowindow":                        "\uE1D8", //  group:Layout
+    "_appBarIcons\\backtowindow.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\fullscreen":                          "\uE1D9", //  group:Layout
+    "_appBarIcons\\fullscreen.comment":                 "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\newfolder":                           "\uE1DA", //  group:File
+    "_appBarIcons\\newfolder.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\calendarreply":                       "\uE1DB", //  group:Mail and calendar
+    "_appBarIcons\\calendarreply.comment":              "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\unsyncfolder":                        "\uE1DD", //  group:File
+    "_appBarIcons\\unsyncfolder.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\reporthacked":                        "\uE1DE", //  group:Communications
+    "_appBarIcons\\reporthacked.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\syncfolder":                          "\uE1DF", //  group:File
+    "_appBarIcons\\syncfolder.comment":                 "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\blockcontact":                        "\uE1E0", //  group:Communications
+    "_appBarIcons\\blockcontact.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\switchapps":                          "\uE1E1", //  group:System
+    "_appBarIcons\\switchapps.comment":                 "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\addfriend":                           "\uE1E2", //  group:Communications
+    "_appBarIcons\\addfriend.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\touchpointer":                        "\uE1E3", //  group:System
+    "_appBarIcons\\touchpointer.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\gotostart":                           "\uE1E4", //  group:System
+    "_appBarIcons\\gotostart.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\zerobars":                            "\uE1E5", //  group:System
+    "_appBarIcons\\zerobars.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\onebar":                              "\uE1E6", //  group:System
+    "_appBarIcons\\onebar.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\twobars":                             "\uE1E7", //  group:System
+    "_appBarIcons\\twobars.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\threebars":                           "\uE1E8", //  group:System
+    "_appBarIcons\\threebars.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\fourbars":                            "\uE1E9", //  group:System
+    "_appBarIcons\\fourbars.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\scan":                                "\uE294", //  group:General
+    "_appBarIcons\\scan.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\preview":                             "\uE295", //  group:General
+    "_appBarIcons\\preview.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\hamburger":                           "\uE700", //  group:General
+    "_appBarIcons\\hamburger.comment":                  "{Locked:qps-ploc,qps-plocm}"
+}
+
+);
+}());
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/template/config.xml
----------------------------------------------------------------------
diff --git a/template/config.xml b/template/config.xml
index 558496c..1850536 100644
--- a/template/config.xml
+++ b/template/config.xml
@@ -20,6 +20,5 @@
 #
 -->
 <widget xmlns="http://www.w3.org/ns/widgets">
-    <preference name="windows-target-version" value="8.0" />
-    <preference name="windows-phone-target-version" value="8.1" />
+    
 </widget>

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/template/cordova/lib/ConfigParser.js
----------------------------------------------------------------------
diff --git a/template/cordova/lib/ConfigParser.js b/template/cordova/lib/ConfigParser.js
index ef81e7c..583da4d 100644
--- a/template/cordova/lib/ConfigParser.js
+++ b/template/cordova/lib/ConfigParser.js
@@ -113,6 +113,17 @@ ConfigParser.prototype = {
         });
         return ret;
     },
+    getMatchingPreferences: function(regexp) {
+        var preferences = this.doc.findall('preference');
+        var result = [];
+        preferences.forEach(function(preference) {
+            if (regexp.test(preference.attrib.name)) {
+                result.push({ name: preference.attrib.name, value: preference.attrib.value });
+            }
+        });
+
+        return result;
+    },
     /**
      * Returns all resources.
      * @param {string}  resourceName Type of static resources to return.
@@ -163,7 +174,50 @@ ConfigParser.prototype = {
         }); 
         return ret; 
     },
+    
+    /**
+     * Returns all <allow-navigation> rules.
+     * @return {string[]} Array of allow-navigation rules.
+     */
+    getNavigationWhitelistRules: function() {
+        var rules = this.doc.getroot().findall('allow-navigation');
+        var result = [];
+        rules.forEach(function(rule) {
+            if (rule.attrib.href) {
+                result.push(rule.attrib.href);
+            }
+        });
 
+        return result;
+    },
+
+    getWindowsTargetVersion: function() {
+        // PascalCased version is the new official preference name, but retain the old for back-compat
+        var preference = this.getPreference('WindowsTargetVersion') || this.getPreference('windows-target-version');
+
+        if (!preference) 
+            preference = '8.1'; // default is 8.1.
+
+        return preference;
+    },
+
+    getWindowsPhoneTargetVersion: function() {
+        // This is a little more complicated than the previous one.
+        // 1. Check for an explicit preference.  If the preference is set explicitly, return that, irrespective of whether it is valid
+        // 2. Get the Windows baseline version.  If it's equivalent to 8.0, bump it to 8.1.
+        // 3. Return the Windows baseline version.
+        var explicitPreference = this.getPreference('WindowsPhoneTargetVersion') || this.getPreference('windows-phone-target-version');
+        if (explicitPreference)
+            return explicitPreference;
+
+        var windowsTargetVersion = this.getWindowsTargetVersion();
+        if (windowsTargetVersion === '8' || windowsTargetVersion === '8.0')
+            windowsTargetVersion = '8.1';
+
+        return windowsTargetVersion;
+
+    },
+    
     // Returns the widget defaultLocale
     defaultLocale: function() {
         return this.doc.getroot().attrib['defaultlocale'];

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/template/cordova/lib/MSBuildTools.js
----------------------------------------------------------------------
diff --git a/template/cordova/lib/MSBuildTools.js b/template/cordova/lib/MSBuildTools.js
index 4b67e61..402225d 100644
--- a/template/cordova/lib/MSBuildTools.js
+++ b/template/cordova/lib/MSBuildTools.js
@@ -20,7 +20,9 @@
 var Q     = require('Q'),
     path  = require('path'),
     exec  = require('./exec'),
-    spawn  = require('./spawn');
+    shell = require('shelljs'),
+    spawn  = require('./spawn'),
+    Version = require('./Version');
 
 function MSBuildTools (version, path) {
     this.version = version;
@@ -68,4 +70,33 @@ function checkMSBuildVersion(version) {
         deferred.resolve(null);
     });
     return deferred.promise;
-}
\ No newline at end of file
+}
+
+function getProgramFiles32Folder() {
+    /* jshint ignore:start */ /* Wants to use dot syntax for ProgramFiles, leaving as-is for consistency */
+    return process.env['ProgramFiles(x86)'] || process.env['ProgramFiles'];
+    /* jshint ignore:end */
+}
+
+/// returns an array of available UAP Versions
+function getAvailableUAPVersions() {
+    var uapFolderPath = path.join(getProgramFiles32Folder(), 'Windows Kits', '10', 'Platforms', 'UAP');
+    if (!shell.test('-e', uapFolderPath)) {
+        console.log('No UAP SDK exists on this machine.');
+        return []; // No UAP SDK exists on this machine
+    }
+
+    var result = [];
+    shell.ls(uapFolderPath).filter(function(uapDir) {
+        return shell.test('-d', path.join(uapFolderPath, uapDir));
+    }).map(function(folder) {
+        return Version.tryParse(folder);
+    }).forEach(function(version, index) {
+        if (version) {
+            result.push(version);
+        }
+    });
+
+    return result;
+}
+module.exports.getAvailableUAPVersions = getAvailableUAPVersions;

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/template/cordova/lib/Version.js
----------------------------------------------------------------------
diff --git a/template/cordova/lib/Version.js b/template/cordova/lib/Version.js
new file mode 100644
index 0000000..3885a8a
--- /dev/null
+++ b/template/cordova/lib/Version.js
@@ -0,0 +1,114 @@
+/*
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+*/
+
+function Version(major, minor, build, qfe) {
+    this.major = major;
+    this.minor = zeroIfUndefined(minor);
+    this.build = zeroIfUndefined(build);
+    this.qfe   = zeroIfUndefined(qfe);
+}
+
+function zeroIfUndefined(val) {
+    if (typeof val === 'undefined')
+        return 0;
+
+    return val;
+}
+
+Version.Expression = /^\d{1,8}\.\d{1,8}\.\d{1,8}\.\d{1,8}$/;
+Version.fromString = function(str) {
+    var result = Version.tryParse(str);
+    if (!result)
+        throw new RangeError('Could not parse a version from the provided value "' + str + '".');
+
+    return result;
+};
+
+Version.tryParse = function(str) {
+    if (Version.Expression.test(str)) {
+        var parts = str.split('.').map(function(part) {
+            return parseInt(part, 10);
+        });
+
+        var result = new Version(parts[0], parts[1], parts[2], parts[3]);
+        return result;
+    }
+
+    return false;
+};
+
+Version.comparer = function(a, b) {
+    if (a.constructor !== Version || b.constructor !== Version) 
+        throw new TypeError('Must compare only Versions');
+
+    if (a.gt(b))
+        return 1;
+    else if (a.eq(b))
+        return 0;
+
+    return -1;
+};
+
+Version.prototype.gt = function(other) {
+    if (other.constructor !== Version)
+        throw new TypeError('other is not a Version.');
+
+    if (this.major > other.major) return true;
+    if (this.major < other.major) return false;
+    if (this.minor > other.minor) return true;
+    if (this.minor < other.minor) return false;
+    if (this.build > other.build) return true;
+    if (this.build < other.build) return false;
+    if (this.qfe > other.qfe) return true;
+    if (this.qfe < other.qfe) return false;
+
+    return false;
+};
+
+Version.prototype.gte = function(other) {
+    if (other.constructor !== Version)
+        throw new TypeError('other is not a Version.');
+
+    if (this.major > other.major) return true;
+    if (this.major < other.major) return false;
+    if (this.minor > other.minor) return true;
+    if (this.minor < other.minor) return false;
+    if (this.build > other.build) return true;
+    if (this.build < other.build) return false;
+    if (this.qfe > other.qfe) return true;
+    if (this.qfe < other.qfe) return false;
+
+    return true;
+};
+
+Version.prototype.eq = function(other) {
+    if (other.constructor !== Version)
+        throw new TypeError('other is not a Version.');
+
+    if (this.major === other.major && this.minor === other.minor && this.build === other.build && this.qfe === other.qfe)
+        return true;
+
+    return false;
+};
+
+Version.prototype.toString = function() {
+    return this.major + '.' + this.minor + '.' + this.build + '.' + this.qfe;
+};
+
+module.exports = Version;

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/template/cordova/lib/WindowsStoreAppUtils.ps1
----------------------------------------------------------------------
diff --git a/template/cordova/lib/WindowsStoreAppUtils.ps1 b/template/cordova/lib/WindowsStoreAppUtils.ps1
index 86bc579..60caecb 100644
--- a/template/cordova/lib/WindowsStoreAppUtils.ps1
+++ b/template/cordova/lib/WindowsStoreAppUtils.ps1
@@ -129,6 +129,24 @@ function Install-App {
     }
 }
 
+function Install-AppFromDirectory {
+    param(
+        [Parameter(Mandatory=$true, Position=0, ValueFromPipelineByPropertyName=$true)]
+        [string] $Path <# Full path to actual AppxManifest.xml #>
+    )
+    
+    Add-AppxPackage -Path $Path -Register -ForceApplicationShutdown
+}
+
+function Install-AppFromAppx {
+    param(
+        [Parameter(Mandatory=$true, Position=0, ValueFromPipelineByPropertyName=$true)]
+        [string] $Path <# Full path to actual .appx #>
+    )
+
+    Add-AppxPackage -Path $Path -ForceApplicationShutdown
+}
+
 function Start-Locally {
     param(
         [Parameter(Mandatory=$true, Position=0, ValueFromPipelineByPropertyName=$true)]

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/template/cordova/lib/build.js
----------------------------------------------------------------------
diff --git a/template/cordova/lib/build.js b/template/cordova/lib/build.js
index d5c45cf..ebc85b9 100644
--- a/template/cordova/lib/build.js
+++ b/template/cordova/lib/build.js
@@ -20,6 +20,7 @@
 var Q     = require('Q'),
     path  = require('path'),
     nopt  = require('nopt'),
+    shell = require('shelljs'),
     utils = require('./utils'),
     prepare = require('./prepare'),
     MSBuildTools = require('./MSBuildTools'),
@@ -30,7 +31,8 @@ var ROOT = path.join(__dirname, '..', '..');
 var projFiles = {
     phone: 'CordovaApp.Phone.jsproj',
     win: 'CordovaApp.Windows.jsproj',
-    win80: 'CordovaApp.Windows80.jsproj'
+    win80: 'CordovaApp.Windows80.jsproj',
+    win10: 'CordovaApp.Windows10.jsproj'
 };
 // parsed nopt arguments
 var args;
@@ -40,6 +42,8 @@ var buildType;
 var buildArchs;
 // MSBuild Tools available on this development machine
 var msbuild;
+// Override WindowsTargetVersion for all devices
+var projVerOverride;
 
 // builds cordova-windows application with parameters provided.
 // See 'help' function for args list
@@ -57,9 +61,9 @@ module.exports.run = function run (argv) {
 
     // update platform as per configuration settings
     prepare.applyPlatformConfig();
-
     return MSBuildTools.findAvailableVersion().then(
         function(msbuildTools) {
+            cleanIntermediates();
             msbuild = msbuildTools;
             console.log('MSBuildToolsPath: ' + msbuild.path);
             return buildTargets();
@@ -69,26 +73,30 @@ module.exports.run = function run (argv) {
 // help/usage function
 module.exports.help = function help() {
     console.log('');
-    console.log('Usage: build [ --debug | --release ] [--archs=\"<list of architectures...>\"] [--phone | --win]');
+    console.log('Usage: build [ --debug | --release ] [--archs="<list of architectures...>""] [--phone | --win]');
     console.log('    --help    : Displays this dialog.');
     console.log('    --debug   : Builds project in debug mode. (Default)');
     console.log('    --release : Builds project in release mode.');
     console.log('    -r        : Shortcut :: builds project in release mode.');
-    console.log('    --archs   : Builds project binaries for specific chip architectures (`anycpu`, `arm`, `x86`, `x64`).');
+    console.log('    --archs   : Builds project binaries for specific chip architectures ("anycpu", "arm", "x86", "x64").');
     console.log('    --phone, --win');
     console.log('              : Specifies, what type of project to build');
+    console.log('    --appx=<8.1-win|8.1-phone|uap>');
+    console.log('              : Overrides WindowsTargetVersion to build Windows 8.1, Windows Phone 8.1, or Windows 10 Universal.');
     console.log('examples:');
     console.log('    build ');
     console.log('    build --debug');
     console.log('    build --release');
     console.log('    build --release --archs="arm x86"');
+    console.log('    build --appx=8.1-phone -r');
     console.log('');
+
     process.exit(0);
 };
 
 function parseAndValidateArgs(argv) {
     // parse and validate args
-    args = nopt({'debug': Boolean, 'release': Boolean, 'archs': [String],
+    args = nopt({'debug': Boolean, 'release': Boolean, 'archs': [String], 'appx': String,
         'phone': Boolean, 'win': Boolean}, {'-r': '--release'}, argv);
     // Validate args
     if (args.debug && args.release) {
@@ -97,6 +105,10 @@ function parseAndValidateArgs(argv) {
     if (args.phone && args.win) {
         throw 'Only one of "phone"/"win" options should be specified';
     }
+
+    if (args.appx) {
+        projVerOverride = args.appx;
+    }
     
     // get build options/defaults
     buildType = args.release ? 'release' : 'debug';
@@ -107,7 +119,6 @@ function buildTargets() {
 
     // filter targets to make sure they are supported on this development machine
     var myBuildTargets = filterSupportedTargets(getBuildTargets(), msbuild);
-
     var buildConfigs = [];
 
     // collect all build configurations (pairs of project to build and target architecture)
@@ -139,7 +150,7 @@ function getBuildTargets() {
     var noSwitches = !(args.phone || args.win);
     // Windows
     if (args.win || noSwitches) { // if --win or no arg
-        var windowsTargetVersion = config.getPreference('windows-target-version');
+        var windowsTargetVersion = config.getWindowsTargetVersion();
         switch(windowsTargetVersion) {
         case '8':
         case '8.0':
@@ -148,43 +159,102 @@ function getBuildTargets() {
         case '8.1':
             targets.push(projFiles.win);
             break;
+        case '10.0':
+        case 'UAP':
+            targets.push(projFiles.win10);
+            break;
         default:
-            throw new Error('Unsupported windows-target-version value: ' + windowsTargetVersion);
+            throw new Error('Unsupported WindowsTargetVersion value: ' + windowsTargetVersion);
         }
     }
     // Windows Phone
     if (args.phone || noSwitches) { // if --phone or no arg
-        var windowsPhoneTargetVersion = config.getPreference('windows-phone-target-version');
+        var windowsPhoneTargetVersion = config.getWindowsPhoneTargetVersion();
         switch(windowsPhoneTargetVersion) {
         case '8.1':
             targets.push(projFiles.phone);
             break;
+        case '10.0':
+        case 'UAP':
+            if (!args.win && !noSwitches) { 
+                // Already built due to --win or no switches
+                // and since the same thing can be run on Phone as Windows, 
+                // we can skip this one.
+                targets.push(projFiles.win10);
+            }
+            break;
         default:
-            throw new Error('Unsupported windows-phone-target-version value: ' + windowsPhoneTargetVersion);
+            throw new Error('Unsupported WindowsPhoneTargetVersion value: ' + windowsPhoneTargetVersion);
+        }
+    }
+
+    // apply build target override if one was specified
+    if (projVerOverride) {
+        switch (projVerOverride) {
+            case '8.1-phone':
+                targets = [projFiles.phone];
+                break;
+            case '8.1-win':
+                targets = [projFiles.win];
+                break;
+            case 'uap':
+                targets = [projFiles.win10];
+                break;
+            default:
+                console.warn('Unrecognized --appx parameter passed to build: "' + projVerOverride + '", ignoring.');
+                break;
         }
     }
+
     return targets;
 }
 
+// TODO: Fix this so that it outlines supported versions based on version criteria:
+// - v14: Windows 8.1, Windows 10
+// - v12: Windows 8.1, Windows 8.0
+// - v4:  Windows 8.0
+function msBuild4TargetsFilter(target) {
+    return target === projFiles.win80;
+}
+
+function msBuild12TargetsFilter(target) {
+    return target === projFiles.win80 || target === projFiles.win || target === projFiles.phone;
+}
+
+function msBuild14TargetsFilter(target) {
+    return target === projFiles.win || target === projFiles.phone || target === projFiles.win10;
+}
+
 function filterSupportedTargets (targets) {
     if (!targets || targets.length === 0) {
         console.warn('\r\nNo build targets are specified.');
         return [];
     }
 
-    if (msbuild.version != '4.0') {
-        return targets;
-    }
+    var targetFilters = {
+        '4.0': msBuild4TargetsFilter,
+        '12.0': msBuild12TargetsFilter,
+        '14.0': msBuild14TargetsFilter
+    };
 
-    // MSBuild 4.0 does not support Windows 8.1 and Windows Phone 8.1
-    var supportedTargets = targets.filter(function(target) {
-        return target != projFiles.win && target != projFiles.phone;
-    });
+    var filter = targetFilters[msbuild.version];
+    if (!filter) {
+        console.warn('Unsupported msbuild version "' + msbuild.version + '", aborting.');
+        return [];
+    }
 
+    var supportedTargets = targets.filter(filter);
     // unsupported targets have been detected
-    if (supportedTargets.length != targets.length) {
-        console.warn('\r\nWarning. Windows 8.1 and Windows Phone 8.1 target platforms are not supported on this development machine and will be skipped.');
-        console.warn('Please install OS Windows 8.1 and Visual Studio 2013 Update2 in order to build for Windows 8.1 and Windows Phone 8.1.\r\n');
+    if (supportedTargets.length !== targets.length) {
+        console.warn('Warning: Not all desired build targets are compatible with the current build environment.');
+        console.warn('Please install Visual Studio 2015 for Windows 8.1 and Windows 10, or Visual Studio 2013 Update 2 for Windows 8 and 8.1.');
     }
     return supportedTargets;
 }
+
+function cleanIntermediates() {
+    var buildPath = path.join(ROOT, 'build');
+    if (shell.test('-e', buildPath)) {
+        shell.rm('-rf', buildPath);
+    }
+}

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/template/cordova/lib/package.js
----------------------------------------------------------------------
diff --git a/template/cordova/lib/package.js b/template/cordova/lib/package.js
index 92ed76c..74541aa 100644
--- a/template/cordova/lib/package.js
+++ b/template/cordova/lib/package.js
@@ -18,9 +18,9 @@
 */
 
 var Q     = require('q'),
+    exec  = require('./exec'),
     fs    = require('fs'),
     path  = require('path'),
-    exec  = require('./exec'),
     spawn = require('./spawn'),
     utils = require('./utils');
 
@@ -62,19 +62,25 @@ module.exports.getPackage = function (projectType, buildtype, buildArch) {
     return Q.reject('Package with specified parameters not found in AppPackages folder');
 };
 
+function getPackagePhoneProductId(packageFile) {
+    var windowsPlatformPath = path.join(packageFile, '..', '..', '..');
+    return module.exports.getAppId(windowsPlatformPath);
+}
+
 // returns package info object or null if it is not valid package
 module.exports.getPackageFileInfo = function (packageFile) {
     var pkgName = path.basename(packageFile);
     // CordovaApp.Windows_0.0.1.0_anycpu_debug.appx
     // CordovaApp.Phone_0.0.1.0_x86_debug.appxbundle
-    var props = /.*\.(Phone|Windows|Windows80)_((?:\d*\.)*\d*)_(AnyCPU|x64|x86|ARM)(?:_(Debug))?.(appx|appxbundle)$/i.exec(pkgName);
+    var props = /.*\.(Phone|Windows|Windows80|Windows10)_((?:\d*\.)*\d*)_(AnyCPU|x64|x86|ARM)(?:_(Debug))?.(appx|appxbundle)$/i.exec(pkgName);
     if (props) {
-        return {type      : props[1].toLowerCase(),
+        return {
+            type      : props[1].toLowerCase(),
             arch      : props[3].toLowerCase(),
             buildtype : props[4] ? props[4].toLowerCase() : 'release',
-            file      : props[1].toLowerCase() != 'phone' ?
-                path.join(packageFile, '..', 'Add-AppDevPackage.ps1') :
-                packageFile
+            appx      : packageFile,
+            script    : path.join(packageFile, '..', 'Add-AppDevPackage.ps1'),
+            phoneId   : getPackagePhoneProductId(packageFile)
         };
     }
     return null;
@@ -85,22 +91,25 @@ module.exports.getPackageFileInfo = function (packageFile) {
 module.exports.getAppId = function (platformPath) {
     var manifest = path.join(platformPath, 'package.phone.appxmanifest');
     try {
-        return Q.resolve(/PhoneProductId="(.*?)"/gi.exec(fs.readFileSync(manifest, 'utf8'))[1]);
+        return /PhoneProductId="(.*?)"/gi.exec(fs.readFileSync(manifest, 'utf8'))[1];
     } catch (e) {
-        return Q.reject('Can\'t read appId from phone manifest' + e);
+        throw new Error('Can\'t read appId from phone manifest', e);
     }
 };
 
 // return package name fetched from appxmanifest
 // return rejected promise if appxmanifest not valid
-module.exports.getPackageName = function (platformPath) {
+function getPackageName(platformPath) {
+    // Can reliably read from package.windows.appxmanifest even if targeting Windows 10
+    // because the function is only used for desktop deployment, which always has the same
+    // package name when uninstalling / reinstalling
     var manifest = path.join(platformPath, 'package.windows.appxmanifest');
     try {
         return Q.resolve(/Application Id="(.*?)"/gi.exec(fs.readFileSync(manifest, 'utf8'))[1]);
     } catch (e) {
         return Q.reject('Can\'t read package name from manifest ' + e);
     }
-};
+}
 
 // returns one of available devices which name match with provided string
 // return rejected promise if device with name specified not found
@@ -135,16 +144,16 @@ module.exports.listDevices = function () {
 };
 
 // deploys specified phone package to device/emulator
-module.exports.deployToPhone = function (appxPath, deployTarget) {
+module.exports.deployToPhone = function (package, deployTarget, targetWindows10) {
     var getTarget = deployTarget == 'device' ? Q('de') :
         deployTarget == 'emulator' ? Q('xd') : module.exports.findDevice(deployTarget);
 
     // /installlaunch option sometimes fails with 'Error: The parameter is incorrect.'
     // so we use separate steps to /install and then /launch
     return getTarget.then(function(target) {
-        return utils.getAppDeployUtils().then(function(appDeployUtils) {
+        return utils.getAppDeployUtils(targetWindows10).then(function(appDeployUtils) {
             console.log('Installing application');
-            return spawn(appDeployUtils, ['/install', appxPath, '/targetdevice:' + target]).then(function() {
+            return spawn(appDeployUtils, ['/install', package.appx, '/targetdevice:' + target]).then(function() {
                 // TODO: resolve AppId without specifying project root;
                 return module.exports.getAppId(path.join(__dirname, '..', '..'));
             }).then(function(appId) {
@@ -155,20 +164,60 @@ module.exports.deployToPhone = function (appxPath, deployTarget) {
     });
 };
 
+function installAppToPhone(appDeployUtils, package, target, update) {
+    var cmd = update ? '/updatelaunch' : '/installlaunch';
+    console.log('Installing application...');
+    return spawn(appDeployUtils, [cmd, package.appx, '/targetdevice:' + target]);
+}
+
+function uninstallAppFromPhone(appDeployUtils, package, target) {
+    console.log('Attempting to remove previously installed application...');
+    return spawn(appDeployUtils, ['/uninstall', package.phoneId, '/targetdevice:' + target]);
+}
+
+module.exports.deployToPhoneAndRun = function (package, deployTarget, targetWindows10) {
+    var getTarget = deployTarget == 'device' ? Q('de') :
+        deployTarget == 'emulator' ? Q('xd') : module.exports.findDevice(deployTarget);
+
+    return getTarget.then(function(target) {
+        return utils.getAppDeployUtils(targetWindows10).then(function(appDeployUtils) {
+
+            return uninstallAppFromPhone(appDeployUtils, package, target).then(
+                function() {}, function() {}).then(function() {
+                    return installAppToPhone(appDeployUtils, package, target, false);
+                }).then(function() {}, function(error) {
+                    
+                    if (error.indexOf('Error code 2148734208 for command') === 0) {
+                        return installAppToPhone(appDeployUtils, package, target, true);
+                    }
+                    else {
+                        console.warn('Unexpected error from installation:');
+                        console.warn(error);
+                        console.warn('You may have previously installed the app with an earlier version of cordova-windows.');
+                        console.warn('Ensure the app is uninstalled from the phone and then try to run again.');
+                        throw error;
+                    }
+                }).then(function() {
+                    return module.exports.getAppId(path.join(__dirname, '..', '..'));    
+                });
+        });
+    });
+};
+
 // deploys specified package to desktop
-module.exports.deployToDesktop = function (appxScript, deployTarget) {
+module.exports.deployToDesktop = function (package, deployTarget) {
     if (deployTarget != 'device' && deployTarget != 'emulator') {
         return Q.reject('Deploying desktop apps to specific target not supported');
     }
 
     return utils.getAppStoreUtils().then(function(appStoreUtils) {
-        return module.exports.getPackageName(path.join(__dirname, '..', '..')).then(function(pkgname) {
+        return getPackageName(path.join(__dirname, '..', '..')).then(function(pkgname) {
             // uninstalls previous application instance (if exists)
             console.log('Attempt to uninstall previous application version...');
             return spawn('powershell', ['-ExecutionPolicy', 'RemoteSigned', 'Import-Module "' + appStoreUtils + '"; Uninstall-App ' + pkgname])
             .then(function() {
                 console.log('Attempt to install application...');
-                return spawn('powershell', ['-ExecutionPolicy', 'RemoteSigned', 'Import-Module "' + appStoreUtils + '"; Install-App', utils.quote(appxScript)]);
+                return spawn('powershell', ['-ExecutionPolicy', 'RemoteSigned', 'Import-Module "' + appStoreUtils + '"; Install-App', utils.quote(package.script)]);
             }).then(function() {
                 console.log('Starting application...');
                 return spawn('powershell', ['-ExecutionPolicy', 'RemoteSigned', 'Import-Module "' + appStoreUtils + '"; Start-Locally', pkgname]);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


[3/7] cordova-windows git commit: CB-8923 Add support for Windows 10 platform

Posted by ax...@apache.org.
http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/template/WinJS/js/WinJS.js
----------------------------------------------------------------------
diff --git a/template/WinJS/js/WinJS.js b/template/WinJS/js/WinJS.js
new file mode 100644
index 0000000..df95c81
--- /dev/null
+++ b/template/WinJS/js/WinJS.js
@@ -0,0 +1,80988 @@
+
+/*! Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. */
+(function (globalObject) {
+
+    var globalObject = 
+        typeof window !== 'undefined' ? window :
+        typeof self !== 'undefined' ? self :
+        typeof global !== 'undefined' ? global :
+        {};
+    (function (factory) {
+        if (typeof define === 'function' && define.amd) {
+            define([], factory);
+        } else {
+            globalObject.msWriteProfilerMark && msWriteProfilerMark('WinJS.4.0 4.0.0.winjs.2015.4.23 WinJS.js,StartTM');
+            factory(globalObject.WinJS);
+            globalObject.msWriteProfilerMark && msWriteProfilerMark('WinJS.4.0 4.0.0.winjs.2015.4.23 WinJS.js,StopTM');
+        }
+    }(function (WinJS) {
+
+// Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information.
+/*jshint ignore:start */
+var require;
+var define;
+/*jshint ignore:end */
+
+(function () {
+    "use strict";
+
+    var defined = {};
+    define = function (id, dependencies, factory) {
+        if (!Array.isArray(dependencies)) {
+            factory = dependencies;
+            dependencies = [];
+        }
+
+        var mod = {
+            dependencies: normalize(id, dependencies),
+            factory: factory
+        };
+
+        if (dependencies.indexOf('exports') !== -1) {
+            mod.exports = {};
+        }
+
+        defined[id] = mod;
+    };
+
+    // WinJS/Core depends on ./Core/_Base
+    // should return WinJS/Core/_Base
+    function normalize(id, dependencies) {
+        id = id || "";
+        var parent = id.split('/');
+        parent.pop();
+        return dependencies.map(function (dep) {
+            if (dep[0] === '.') {
+                var parts = dep.split('/');
+                var current = parent.slice(0);
+                parts.forEach(function (part) {
+                    if (part === '..') {
+                        current.pop();
+                    } else if (part !== '.') {
+                        current.push(part);
+                    }
+                });
+                return current.join('/');
+            } else {
+                return dep;
+            }
+        });
+    }
+
+    function resolve(dependencies, parent, exports) {
+        return dependencies.map(function (depName) {
+            if (depName === 'exports') {
+                return exports;
+            }
+
+            if (depName === 'require') {
+                return function (dependencies, factory) {
+                    require(normalize(parent, dependencies), factory);
+                };
+            }
+
+            var dep = defined[depName];
+            if (!dep) {
+                throw new Error("Undefined dependency: " + depName);
+            }
+
+            if (!dep.resolved) {
+                dep.resolved = load(dep.dependencies, dep.factory, depName, dep.exports);
+                if (typeof dep.resolved === "undefined") {
+                    dep.resolved = dep.exports;
+                }
+            }
+
+            return dep.resolved;
+        });
+    }
+
+    function load(dependencies, factory, parent, exports) {
+        var deps = resolve(dependencies, parent, exports);
+        if (factory && factory.apply) {
+            return factory.apply(null, deps);
+        } else {
+            return factory;
+        }
+    }
+    require = function (dependencies, factory) { //jshint ignore:line
+        if (!Array.isArray(dependencies)) {
+            dependencies = [dependencies];
+        }
+        load(dependencies, factory);
+    };
+
+
+})();
+define("amd", function(){});
+
+// Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information.
+define('WinJS/Core/_WinJS',{});
+
+// Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information.
+define('WinJS/Core/_Global',[], function () {
+    "use strict";
+    
+    // Appease jshint
+    /* global window, self, global */
+    
+    var globalObject =
+        typeof window !== 'undefined' ? window :
+        typeof self !== 'undefined' ? self :
+        typeof global !== 'undefined' ? global :
+        {};
+    return globalObject;
+});
+
+// Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information.
+define('WinJS/Core/_BaseCoreUtils',[
+    './_Global'
+    ], function baseCoreUtilsInit(_Global) {
+    "use strict";
+
+    var hasWinRT = !!_Global.Windows;
+
+    function markSupportedForProcessing(func) {
+        /// <signature helpKeyword="WinJS.Utilities.markSupportedForProcessing">
+        /// <summary locid="WinJS.Utilities.markSupportedForProcessing">
+        /// Marks a function as being compatible with declarative processing, such as WinJS.UI.processAll
+        /// or WinJS.Binding.processAll.
+        /// </summary>
+        /// <param name="func" type="Function" locid="WinJS.Utilities.markSupportedForProcessing_p:func">
+        /// The function to be marked as compatible with declarative processing.
+        /// </param>
+        /// <returns type="Function" locid="WinJS.Utilities.markSupportedForProcessing_returnValue">
+        /// The input function.
+        /// </returns>
+        /// </signature>
+        func.supportedForProcessing = true;
+        return func;
+    }
+
+    return {
+        hasWinRT: hasWinRT,
+        markSupportedForProcessing: markSupportedForProcessing,
+        _setImmediate: _Global.setImmediate ? _Global.setImmediate.bind(_Global) : function (handler) {
+            _Global.setTimeout(handler, 0);
+        }
+    };
+});
+// Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information.
+define('WinJS/Core/_WriteProfilerMark',[
+    './_Global'
+], function profilerInit(_Global) {
+    "use strict";
+
+    return _Global.msWriteProfilerMark || function () { };
+});
+// Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information.
+define('WinJS/Core/_Base',[
+    './_WinJS',
+    './_Global',
+    './_BaseCoreUtils',
+    './_WriteProfilerMark'
+    ], function baseInit(_WinJS, _Global, _BaseCoreUtils, _WriteProfilerMark) {
+    "use strict";
+
+    function initializeProperties(target, members, prefix) {
+        var keys = Object.keys(members);
+        var isArray = Array.isArray(target);
+        var properties;
+        var i, len;
+        for (i = 0, len = keys.length; i < len; i++) {
+            var key = keys[i];
+            var enumerable = key.charCodeAt(0) !== /*_*/95;
+            var member = members[key];
+            if (member && typeof member === 'object') {
+                if (member.value !== undefined || typeof member.get === 'function' || typeof member.set === 'function') {
+                    if (member.enumerable === undefined) {
+                        member.enumerable = enumerable;
+                    }
+                    if (prefix && member.setName && typeof member.setName === 'function') {
+                        member.setName(prefix + "." + key);
+                    }
+                    properties = properties || {};
+                    properties[key] = member;
+                    continue;
+                }
+            }
+            if (!enumerable) {
+                properties = properties || {};
+                properties[key] = { value: member, enumerable: enumerable, configurable: true, writable: true };
+                continue;
+            }
+            if (isArray) {
+                target.forEach(function (target) {
+                    target[key] = member;
+                });
+            } else {
+                target[key] = member;
+            }
+        }
+        if (properties) {
+            if (isArray) {
+                target.forEach(function (target) {
+                    Object.defineProperties(target, properties);
+                });
+            } else {
+                Object.defineProperties(target, properties);
+            }
+        }
+    }
+
+    (function () {
+
+        var _rootNamespace = _WinJS;
+        if (!_rootNamespace.Namespace) {
+            _rootNamespace.Namespace = Object.create(Object.prototype);
+        }
+
+        function createNamespace(parentNamespace, name) {
+            var currentNamespace = parentNamespace || {};
+            if (name) {
+                var namespaceFragments = name.split(".");
+                if (currentNamespace === _Global && namespaceFragments[0] === "WinJS") {
+                    currentNamespace = _WinJS;
+                    namespaceFragments.splice(0, 1);
+                }
+                for (var i = 0, len = namespaceFragments.length; i < len; i++) {
+                    var namespaceName = namespaceFragments[i];
+                    if (!currentNamespace[namespaceName]) {
+                        Object.defineProperty(currentNamespace, namespaceName,
+                            { value: {}, writable: false, enumerable: true, configurable: true }
+                        );
+                    }
+                    currentNamespace = currentNamespace[namespaceName];
+                }
+            }
+            return currentNamespace;
+        }
+
+        function defineWithParent(parentNamespace, name, members) {
+            /// <signature helpKeyword="WinJS.Namespace.defineWithParent">
+            /// <summary locid="WinJS.Namespace.defineWithParent">
+            /// Defines a new namespace with the specified name under the specified parent namespace.
+            /// </summary>
+            /// <param name="parentNamespace" type="Object" locid="WinJS.Namespace.defineWithParent_p:parentNamespace">
+            /// The parent namespace.
+            /// </param>
+            /// <param name="name" type="String" locid="WinJS.Namespace.defineWithParent_p:name">
+            /// The name of the new namespace.
+            /// </param>
+            /// <param name="members" type="Object" locid="WinJS.Namespace.defineWithParent_p:members">
+            /// The members of the new namespace.
+            /// </param>
+            /// <returns type="Object" locid="WinJS.Namespace.defineWithParent_returnValue">
+            /// The newly-defined namespace.
+            /// </returns>
+            /// </signature>
+            var currentNamespace = createNamespace(parentNamespace, name);
+
+            if (members) {
+                initializeProperties(currentNamespace, members, name || "<ANONYMOUS>");
+            }
+
+            return currentNamespace;
+        }
+
+        function define(name, members) {
+            /// <signature helpKeyword="WinJS.Namespace.define">
+            /// <summary locid="WinJS.Namespace.define">
+            /// Defines a new namespace with the specified name.
+            /// </summary>
+            /// <param name="name" type="String" locid="WinJS.Namespace.define_p:name">
+            /// The name of the namespace. This could be a dot-separated name for nested namespaces.
+            /// </param>
+            /// <param name="members" type="Object" locid="WinJS.Namespace.define_p:members">
+            /// The members of the new namespace.
+            /// </param>
+            /// <returns type="Object" locid="WinJS.Namespace.define_returnValue">
+            /// The newly-defined namespace.
+            /// </returns>
+            /// </signature>
+            return defineWithParent(_Global, name, members);
+        }
+
+        var LazyStates = {
+            uninitialized: 1,
+            working: 2,
+            initialized: 3,
+        };
+
+        function lazy(f) {
+            var name;
+            var state = LazyStates.uninitialized;
+            var result;
+            return {
+                setName: function (value) {
+                    name = value;
+                },
+                get: function () {
+                    switch (state) {
+                        case LazyStates.initialized:
+                            return result;
+
+                        case LazyStates.uninitialized:
+                            state = LazyStates.working;
+                            try {
+                                _WriteProfilerMark("WinJS.Namespace._lazy:" + name + ",StartTM");
+                                result = f();
+                            } finally {
+                                _WriteProfilerMark("WinJS.Namespace._lazy:" + name + ",StopTM");
+                                state = LazyStates.uninitialized;
+                            }
+                            f = null;
+                            state = LazyStates.initialized;
+                            return result;
+
+                        case LazyStates.working:
+                            throw "Illegal: reentrancy on initialization";
+
+                        default:
+                            throw "Illegal";
+                    }
+                },
+                set: function (value) {
+                    switch (state) {
+                        case LazyStates.working:
+                            throw "Illegal: reentrancy on initialization";
+
+                        default:
+                            state = LazyStates.initialized;
+                            result = value;
+                            break;
+                    }
+                },
+                enumerable: true,
+                configurable: true,
+            };
+        }
+
+        // helper for defining AMD module members
+        function moduleDefine(exports, name, members) {
+            var target = [exports];
+            var publicNS = null;
+            if (name) {
+                publicNS = createNamespace(_Global, name);
+                target.push(publicNS);
+            }
+            initializeProperties(target, members, name || "<ANONYMOUS>");
+            return publicNS;
+        }
+
+        // Establish members of the "WinJS.Namespace" namespace
+        Object.defineProperties(_rootNamespace.Namespace, {
+
+            defineWithParent: { value: defineWithParent, writable: true, enumerable: true, configurable: true },
+
+            define: { value: define, writable: true, enumerable: true, configurable: true },
+
+            _lazy: { value: lazy, writable: true, enumerable: true, configurable: true },
+
+            _moduleDefine: { value: moduleDefine, writable: true, enumerable: true, configurable: true }
+
+        });
+
+    })();
+
+    (function () {
+
+        function define(constructor, instanceMembers, staticMembers) {
+            /// <signature helpKeyword="WinJS.Class.define">
+            /// <summary locid="WinJS.Class.define">
+            /// Defines a class using the given constructor and the specified instance members.
+            /// </summary>
+            /// <param name="constructor" type="Function" locid="WinJS.Class.define_p:constructor">
+            /// A constructor function that is used to instantiate this class.
+            /// </param>
+            /// <param name="instanceMembers" type="Object" locid="WinJS.Class.define_p:instanceMembers">
+            /// The set of instance fields, properties, and methods made available on the class.
+            /// </param>
+            /// <param name="staticMembers" type="Object" locid="WinJS.Class.define_p:staticMembers">
+            /// The set of static fields, properties, and methods made available on the class.
+            /// </param>
+            /// <returns type="Function" locid="WinJS.Class.define_returnValue">
+            /// The newly-defined class.
+            /// </returns>
+            /// </signature>
+            constructor = constructor || function () { };
+            _BaseCoreUtils.markSupportedForProcessing(constructor);
+            if (instanceMembers) {
+                initializeProperties(constructor.prototype, instanceMembers);
+            }
+            if (staticMembers) {
+                initializeProperties(constructor, staticMembers);
+            }
+            return constructor;
+        }
+
+        function derive(baseClass, constructor, instanceMembers, staticMembers) {
+            /// <signature helpKeyword="WinJS.Class.derive">
+            /// <summary locid="WinJS.Class.derive">
+            /// Creates a sub-class based on the supplied baseClass parameter, using prototypal inheritance.
+            /// </summary>
+            /// <param name="baseClass" type="Function" locid="WinJS.Class.derive_p:baseClass">
+            /// The class to inherit from.
+            /// </param>
+            /// <param name="constructor" type="Function" locid="WinJS.Class.derive_p:constructor">
+            /// A constructor function that is used to instantiate this class.
+            /// </param>
+            /// <param name="instanceMembers" type="Object" locid="WinJS.Class.derive_p:instanceMembers">
+            /// The set of instance fields, properties, and methods to be made available on the class.
+            /// </param>
+            /// <param name="staticMembers" type="Object" locid="WinJS.Class.derive_p:staticMembers">
+            /// The set of static fields, properties, and methods to be made available on the class.
+            /// </param>
+            /// <returns type="Function" locid="WinJS.Class.derive_returnValue">
+            /// The newly-defined class.
+            /// </returns>
+            /// </signature>
+            if (baseClass) {
+                constructor = constructor || function () { };
+                var basePrototype = baseClass.prototype;
+                constructor.prototype = Object.create(basePrototype);
+                _BaseCoreUtils.markSupportedForProcessing(constructor);
+                Object.defineProperty(constructor.prototype, "constructor", { value: constructor, writable: true, configurable: true, enumerable: true });
+                if (instanceMembers) {
+                    initializeProperties(constructor.prototype, instanceMembers);
+                }
+                if (staticMembers) {
+                    initializeProperties(constructor, staticMembers);
+                }
+                return constructor;
+            } else {
+                return define(constructor, instanceMembers, staticMembers);
+            }
+        }
+
+        function mix(constructor) {
+            /// <signature helpKeyword="WinJS.Class.mix">
+            /// <summary locid="WinJS.Class.mix">
+            /// Defines a class using the given constructor and the union of the set of instance members
+            /// specified by all the mixin objects. The mixin parameter list is of variable length.
+            /// </summary>
+            /// <param name="constructor" locid="WinJS.Class.mix_p:constructor">
+            /// A constructor function that is used to instantiate this class.
+            /// </param>
+            /// <returns type="Function" locid="WinJS.Class.mix_returnValue">
+            /// The newly-defined class.
+            /// </returns>
+            /// </signature>
+            constructor = constructor || function () { };
+            var i, len;
+            for (i = 1, len = arguments.length; i < len; i++) {
+                initializeProperties(constructor.prototype, arguments[i]);
+            }
+            return constructor;
+        }
+
+        // Establish members of "WinJS.Class" namespace
+        _WinJS.Namespace.define("WinJS.Class", {
+            define: define,
+            derive: derive,
+            mix: mix
+        });
+
+    })();
+
+    return {
+        Namespace: _WinJS.Namespace,
+        Class: _WinJS.Class
+    };
+
+});
+// Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information.
+define('WinJS/Core/_ErrorFromName',[
+    './_Base'
+    ], function errorsInit(_Base) {
+    "use strict";
+
+    var ErrorFromName = _Base.Class.derive(Error, function (name, message) {
+        /// <signature helpKeyword="WinJS.ErrorFromName">
+        /// <summary locid="WinJS.ErrorFromName">
+        /// Creates an Error object with the specified name and message properties.
+        /// </summary>
+        /// <param name="name" type="String" locid="WinJS.ErrorFromName_p:name">The name of this error. The name is meant to be consumed programmatically and should not be localized.</param>
+        /// <param name="message" type="String" optional="true" locid="WinJS.ErrorFromName_p:message">The message for this error. The message is meant to be consumed by humans and should be localized.</param>
+        /// <returns type="Error" locid="WinJS.ErrorFromName_returnValue">Error instance with .name and .message properties populated</returns>
+        /// </signature>
+        this.name = name;
+        this.message = message || name;
+    }, {
+        /* empty */
+    }, {
+        supportedForProcessing: false,
+    });
+
+    _Base.Namespace.define("WinJS", {
+        // ErrorFromName establishes a simple pattern for returning error codes.
+        //
+        ErrorFromName: ErrorFromName
+    });
+
+    return ErrorFromName;
+
+});
+
+
+// Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information.
+define('WinJS/Core/_WinRT',[
+    'exports',
+    './_Global',
+    './_Base',
+], function winrtInit(exports, _Global, _Base) {
+    "use strict";
+
+    exports.msGetWeakWinRTProperty = _Global.msGetWeakWinRTProperty;
+    exports.msSetWeakWinRTProperty = _Global.msSetWeakWinRTProperty;
+
+    var APIs = [
+        "Windows.ApplicationModel.DesignMode.designModeEnabled",
+        "Windows.ApplicationModel.Resources.Core.ResourceContext",
+        "Windows.ApplicationModel.Resources.Core.ResourceManager",
+        "Windows.ApplicationModel.Search.SearchQueryLinguisticDetails",
+        "Windows.Data.Text.SemanticTextQuery",
+        "Windows.Foundation.Collections.CollectionChange",
+        "Windows.Foundation.Diagnostics",
+        "Windows.Foundation.Uri",
+        "Windows.Globalization.ApplicationLanguages",
+        "Windows.Globalization.Calendar",
+        "Windows.Globalization.DateTimeFormatting",
+        "Windows.Globalization.Language",
+        "Windows.Phone.UI.Input.HardwareButtons",
+        "Windows.Storage.ApplicationData",
+        "Windows.Storage.CreationCollisionOption",
+        "Windows.Storage.BulkAccess.FileInformationFactory",
+        "Windows.Storage.FileIO",
+        "Windows.Storage.FileProperties.ThumbnailType",
+        "Windows.Storage.FileProperties.ThumbnailMode",
+        "Windows.Storage.FileProperties.ThumbnailOptions",
+        "Windows.Storage.KnownFolders",
+        "Windows.Storage.Search.FolderDepth",
+        "Windows.Storage.Search.IndexerOption",
+        "Windows.Storage.Streams.RandomAccessStreamReference",
+        "Windows.UI.ApplicationSettings.SettingsEdgeLocation",
+        "Windows.UI.ApplicationSettings.SettingsCommand",
+        "Windows.UI.ApplicationSettings.SettingsPane",
+        "Windows.UI.Core.AnimationMetrics",
+        "Windows.UI.Input.EdgeGesture",
+        "Windows.UI.Input.EdgeGestureKind",
+        "Windows.UI.Input.PointerPoint",
+        "Windows.UI.ViewManagement.HandPreference",
+        "Windows.UI.ViewManagement.InputPane",
+        "Windows.UI.ViewManagement.UISettings",
+        "Windows.UI.WebUI.Core.WebUICommandBar",
+        "Windows.UI.WebUI.Core.WebUICommandBarBitmapIcon",
+        "Windows.UI.WebUI.Core.WebUICommandBarClosedDisplayMode",
+        "Windows.UI.WebUI.Core.WebUICommandBarIconButton",
+        "Windows.UI.WebUI.Core.WebUICommandBarSymbolIcon",
+        "Windows.UI.WebUI.WebUIApplication",
+    ];
+
+    APIs.forEach(function (api) {
+        var parts = api.split(".");
+        var leaf = {};
+        leaf[parts[parts.length - 1]] = {
+            get: function () {
+                return parts.reduce(function (current, part) { return current ? current[part] : null; }, _Global);
+            }
+        };
+        _Base.Namespace.defineWithParent(exports, parts.slice(0, -1).join("."), leaf);
+    });
+
+});
+
+// Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information.
+define('WinJS/Core/_Events',[
+    'exports',
+    './_Base'
+    ], function eventsInit(exports, _Base) {
+    "use strict";
+
+
+    function createEventProperty(name) {
+        var eventPropStateName = "_on" + name + "state";
+
+        return {
+            get: function () {
+                var state = this[eventPropStateName];
+                return state && state.userHandler;
+            },
+            set: function (handler) {
+                var state = this[eventPropStateName];
+                if (handler) {
+                    if (!state) {
+                        state = { wrapper: function (evt) { return state.userHandler(evt); }, userHandler: handler };
+                        Object.defineProperty(this, eventPropStateName, { value: state, enumerable: false, writable:true, configurable: true });
+                        this.addEventListener(name, state.wrapper, false);
+                    }
+                    state.userHandler = handler;
+                } else if (state) {
+                    this.removeEventListener(name, state.wrapper, false);
+                    this[eventPropStateName] = null;
+                }
+            },
+            enumerable: true
+        };
+    }
+
+    function createEventProperties() {
+        /// <signature helpKeyword="WinJS.Utilities.createEventProperties">
+        /// <summary locid="WinJS.Utilities.createEventProperties">
+        /// Creates an object that has one property for each name passed to the function.
+        /// </summary>
+        /// <param name="events" locid="WinJS.Utilities.createEventProperties_p:events">
+        /// A variable list of property names.
+        /// </param>
+        /// <returns type="Object" locid="WinJS.Utilities.createEventProperties_returnValue">
+        /// The object with the specified properties. The names of the properties are prefixed with 'on'.
+        /// </returns>
+        /// </signature>
+        var props = {};
+        for (var i = 0, len = arguments.length; i < len; i++) {
+            var name = arguments[i];
+            props["on" + name] = createEventProperty(name);
+        }
+        return props;
+    }
+
+    var EventMixinEvent = _Base.Class.define(
+        function EventMixinEvent_ctor(type, detail, target) {
+            this.detail = detail;
+            this.target = target;
+            this.timeStamp = Date.now();
+            this.type = type;
+        },
+        {
+            bubbles: { value: false, writable: false },
+            cancelable: { value: false, writable: false },
+            currentTarget: {
+                get: function () { return this.target; }
+            },
+            defaultPrevented: {
+                get: function () { return this._preventDefaultCalled; }
+            },
+            trusted: { value: false, writable: false },
+            eventPhase: { value: 0, writable: false },
+            target: null,
+            timeStamp: null,
+            type: null,
+
+            preventDefault: function () {
+                this._preventDefaultCalled = true;
+            },
+            stopImmediatePropagation: function () {
+                this._stopImmediatePropagationCalled = true;
+            },
+            stopPropagation: function () {
+            }
+        }, {
+            supportedForProcessing: false,
+        }
+    );
+
+    var eventMixin = {
+        _listeners: null,
+
+        addEventListener: function (type, listener, useCapture) {
+            /// <signature helpKeyword="WinJS.Utilities.eventMixin.addEventListener">
+            /// <summary locid="WinJS.Utilities.eventMixin.addEventListener">
+            /// Adds an event listener to the control.
+            /// </summary>
+            /// <param name="type" locid="WinJS.Utilities.eventMixin.addEventListener_p:type">
+            /// The type (name) of the event.
+            /// </param>
+            /// <param name="listener" locid="WinJS.Utilities.eventMixin.addEventListener_p:listener">
+            /// The listener to invoke when the event is raised.
+            /// </param>
+            /// <param name="useCapture" locid="WinJS.Utilities.eventMixin.addEventListener_p:useCapture">
+            /// if true initiates capture, otherwise false.
+            /// </param>
+            /// </signature>
+            useCapture = useCapture || false;
+            this._listeners = this._listeners || {};
+            var eventListeners = (this._listeners[type] = this._listeners[type] || []);
+            for (var i = 0, len = eventListeners.length; i < len; i++) {
+                var l = eventListeners[i];
+                if (l.useCapture === useCapture && l.listener === listener) {
+                    return;
+                }
+            }
+            eventListeners.push({ listener: listener, useCapture: useCapture });
+        },
+        dispatchEvent: function (type, details) {
+            /// <signature helpKeyword="WinJS.Utilities.eventMixin.dispatchEvent">
+            /// <summary locid="WinJS.Utilities.eventMixin.dispatchEvent">
+            /// Raises an event of the specified type and with the specified additional properties.
+            /// </summary>
+            /// <param name="type" locid="WinJS.Utilities.eventMixin.dispatchEvent_p:type">
+            /// The type (name) of the event.
+            /// </param>
+            /// <param name="details" locid="WinJS.Utilities.eventMixin.dispatchEvent_p:details">
+            /// The set of additional properties to be attached to the event object when the event is raised.
+            /// </param>
+            /// <returns type="Boolean" locid="WinJS.Utilities.eventMixin.dispatchEvent_returnValue">
+            /// true if preventDefault was called on the event.
+            /// </returns>
+            /// </signature>
+            var listeners = this._listeners && this._listeners[type];
+            if (listeners) {
+                var eventValue = new EventMixinEvent(type, details, this);
+                // Need to copy the array to protect against people unregistering while we are dispatching
+                listeners = listeners.slice(0, listeners.length);
+                for (var i = 0, len = listeners.length; i < len && !eventValue._stopImmediatePropagationCalled; i++) {
+                    listeners[i].listener(eventValue);
+                }
+                return eventValue.defaultPrevented || false;
+            }
+            return false;
+        },
+        removeEventListener: function (type, listener, useCapture) {
+            /// <signature helpKeyword="WinJS.Utilities.eventMixin.removeEventListener">
+            /// <summary locid="WinJS.Utilities.eventMixin.removeEventListener">
+            /// Removes an event listener from the control.
+            /// </summary>
+            /// <param name="type" locid="WinJS.Utilities.eventMixin.removeEventListener_p:type">
+            /// The type (name) of the event.
+            /// </param>
+            /// <param name="listener" locid="WinJS.Utilities.eventMixin.removeEventListener_p:listener">
+            /// The listener to remove.
+            /// </param>
+            /// <param name="useCapture" locid="WinJS.Utilities.eventMixin.removeEventListener_p:useCapture">
+            /// Specifies whether to initiate capture.
+            /// </param>
+            /// </signature>
+            useCapture = useCapture || false;
+            var listeners = this._listeners && this._listeners[type];
+            if (listeners) {
+                for (var i = 0, len = listeners.length; i < len; i++) {
+                    var l = listeners[i];
+                    if (l.listener === listener && l.useCapture === useCapture) {
+                        listeners.splice(i, 1);
+                        if (listeners.length === 0) {
+                            delete this._listeners[type];
+                        }
+                        // Only want to remove one element for each call to removeEventListener
+                        break;
+                    }
+                }
+            }
+        }
+    };
+
+    _Base.Namespace._moduleDefine(exports, "WinJS.Utilities", {
+        _createEventProperty: createEventProperty,
+        createEventProperties: createEventProperties,
+        eventMixin: eventMixin
+    });
+
+});
+
+
+define('require-json',{load: function(id){throw new Error("Dynamic load not allowed: " + id);}});
+
+define('require-json!en-US/ui.resjson',{
+    "appBarAriaLabel": "App Bar",
+    "appBarCommandAriaLabel": "App Bar Item",
+	"appBarOverflowButtonAriaLabel": "View more",
+    "autoSuggestBoxAriaLabel": "Autosuggestbox",
+    "autoSuggestBoxAriaLabelInputNoPlaceHolder": "Autosuggestbox, enter to submit query, esc to clear text",
+    "autoSuggestBoxAriaLabelInputPlaceHolder": "Autosuggestbox, {0}, enter to submit query, esc to clear text",
+    "autoSuggestBoxAriaLabelQuery": "Suggestion: {0}",
+    "_autoSuggestBoxAriaLabelQuery.comment": "Suggestion: query text (example: Suggestion: contoso)",
+    "autoSuggestBoxAriaLabelSeparator": "Separator: {0}",
+    "_autoSuggestBoxAriaLabelSeparator.comment": "Separator: separator text (example: Separator: People or Separator: Apps)",
+    "autoSuggestBoxAriaLabelResult": "Result: {0}, {1}",
+    "_autoSuggestBoxAriaLabelResult.comment": "Result: text, detailed text (example: Result: contoso, www.contoso.com)",
+    "averageRating": "Average Rating",
+    "backbuttonarialabel": "Back",
+    "clearYourRating" : "Clear your rating",
+    "closeOverlay" : "Close",
+    "commandingSurfaceAriaLabel": "CommandingSurface",
+    "commandingSurfaceOverflowButtonAriaLabel": "View more",
+    "datePicker": "Date Picker",
+    "flipViewPanningContainerAriaLabel": "Scrolling Container",
+    "flyoutAriaLabel": "Flyout",
+    "hubViewportAriaLabel": "Scrolling Container",
+    "listViewViewportAriaLabel": "Scrolling Container",
+    "menuCommandAriaLabel": "Menu Item",
+    "menuAriaLabel": "Menu",
+    "navBarContainerViewportAriaLabel": "Scrolling Container",
+    "off" : "Off",
+    "on" : "On",
+    "pivotAriaLabel": "Pivot",
+    "pivotViewportAriaLabel": "Scrolling Container",
+    "searchBoxAriaLabel": "Searchbox",
+    "searchBoxAriaLabelInputNoPlaceHolder": "Searchbox, enter to submit query, esc to clear text",
+    "searchBoxAriaLabelInputPlaceHolder": "Searchbox, {0}, enter to submit query, esc to clear text",
+    "searchBoxAriaLabelButton": "Click to submit query",
+    "seeMore":  "See more",
+    "selectAMPM": "Select A.M P.M",
+    "selectDay": "Select Day",
+    "selectHour": "Select Hour",
+    "selectMinute": "Select Minute",
+    "selectMonth": "Select Month",
+    "selectYear": "Select Year",
+    "settingsFlyoutAriaLabel": "Settings Flyout",
+    "tentativeRating": "Tentative Rating",
+    "timePicker": "Time Picker",
+    "toolbarAriaLabel": "ToolBar",
+    "toolbarOverflowButtonAriaLabel": "View more",
+    "unrated": "Unrated",
+    "userRating": "User Rating",
+    // AppBar Icons follow, the format of the ui.js and ui.resjson differ for
+    // the AppBarIcon namespace.  The remainder of the file therefore differs.
+    // Code point comments are the icon glyphs in the 'Segoe UI Symbol' font.
+    "appBarIcons\\previous":                            "\uE100", //  group:Media
+    "_appBarIcons\\previous.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\next":                                "\uE101", //  group:Media
+    "_appBarIcons\\next.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\play":                                "\uE102", //  group:Media
+    "_appBarIcons\\play.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\pause":                               "\uE103", //  group:Media
+    "_appBarIcons\\pause.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\edit":                                "\uE104", //  group:File
+    "_appBarIcons\\edit.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\save":                                "\uE105", //  group:File
+    "_appBarIcons\\save.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\clear":                               "\uE106", //  group:File
+    "_appBarIcons\\clear.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\delete":                              "\uE107", //  group:File
+    "_appBarIcons\\delete.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\remove":                              "\uE108", //  group:File
+    "_appBarIcons\\remove.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\add":                                 "\uE109", //  group:File
+    "_appBarIcons\\add.comment":                        "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\cancel":                              "\uE10A", //  group:Editing
+    "_appBarIcons\\cancel.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\accept":                              "\uE10B", //  group:General
+    "_appBarIcons\\accept.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\more":                                "\uE10C", //  group:General
+    "_appBarIcons\\more.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\redo":                                "\uE10D", //  group:Editing
+    "_appBarIcons\\redo.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\undo":                                "\uE10E", //  group:Editing
+    "_appBarIcons\\undo.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\home":                                "\uE10F", //  group:General
+    "_appBarIcons\\home.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\up":                                  "\uE110", //  group:General
+    "_appBarIcons\\up.comment":                         "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\forward":                             "\uE111", //  group:General
+    "_appBarIcons\\forward.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\right":                               "\uE111", //  group:General
+    "_appBarIcons\\right.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\back":                                "\uE112", //  group:General
+    "_appBarIcons\\back.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\left":                                "\uE112", //  group:General
+    "_appBarIcons\\left.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\favorite":                            "\uE113", //  group:Media
+    "_appBarIcons\\favorite.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\camera":                              "\uE114", //  group:System
+    "_appBarIcons\\camera.comment":                     "{Locked:qps-ploc,qps-plocm}",    
+    "appBarIcons\\settings":                            "\uE115", //  group:System
+    "_appBarIcons\\settings.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\video":                               "\uE116", //  group:Media
+    "_appBarIcons\\video.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\sync":                                "\uE117", //  group:Media
+    "_appBarIcons\\sync.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\download":                            "\uE118", //  group:Media
+    "_appBarIcons\\download.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\mail":                                "\uE119", //  group:Mail and calendar
+    "_appBarIcons\\mail.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\find":                                "\uE11A", //  group:Data
+    "_appBarIcons\\find.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\help":                                "\uE11B", //  group:General
+    "_appBarIcons\\help.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\upload":                              "\uE11C", //  group:Media
+    "_appBarIcons\\upload.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\emoji":                               "\uE11D", //  group:Communications
+    "_appBarIcons\\emoji.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\twopage":                             "\uE11E", //  group:Layout
+    "_appBarIcons\\twopage.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\leavechat":                           "\uE11F", //  group:Communications
+    "_appBarIcons\\leavechat.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\mailforward":                         "\uE120", //  group:Mail and calendar
+    "_appBarIcons\\mailforward.comment":                "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\clock":                               "\uE121", //  group:General
+    "_appBarIcons\\clock.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\send":                                "\uE122", //  group:Mail and calendar
+    "_appBarIcons\\send.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\crop":                                "\uE123", //  group:Editing
+    "_appBarIcons\\crop.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\rotatecamera":                        "\uE124", //  group:System
+    "_appBarIcons\\rotatecamera.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\people":                              "\uE125", //  group:Communications
+    "_appBarIcons\\people.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\closepane":                           "\uE126", //  group:Layout
+    "_appBarIcons\\closepane.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\openpane":                            "\uE127", //  group:Layout
+    "_appBarIcons\\openpane.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\world":                               "\uE128", //  group:General
+    "_appBarIcons\\world.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\flag":                                "\uE129", //  group:Mail and calendar
+    "_appBarIcons\\flag.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\previewlink":                         "\uE12A", //  group:General
+    "_appBarIcons\\previewlink.comment":                "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\globe":                               "\uE12B", //  group:Communications
+    "_appBarIcons\\globe.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\trim":                                "\uE12C", //  group:Editing
+    "_appBarIcons\\trim.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\attachcamera":                        "\uE12D", //  group:System
+    "_appBarIcons\\attachcamera.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\zoomin":                              "\uE12E", //  group:Layout
+    "_appBarIcons\\zoomin.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\bookmarks":                           "\uE12F", //  group:Editing
+    "_appBarIcons\\bookmarks.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\document":                            "\uE130", //  group:File
+    "_appBarIcons\\document.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\protecteddocument":                   "\uE131", //  group:File
+    "_appBarIcons\\protecteddocument.comment":          "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\page":                                "\uE132", //  group:Layout
+    "_appBarIcons\\page.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\bullets":                             "\uE133", //  group:Editing
+    "_appBarIcons\\bullets.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\comment":                             "\uE134", //  group:Communications
+    "_appBarIcons\\comment.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\mail2":                               "\uE135", //  group:Mail and calendar
+    "_appBarIcons\\mail2.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\contactinfo":                         "\uE136", //  group:Communications
+    "_appBarIcons\\contactinfo.comment":                "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\hangup":                              "\uE137", //  group:Communications
+    "_appBarIcons\\hangup.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\viewall":                             "\uE138", //  group:Data
+    "_appBarIcons\\viewall.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\mappin":                              "\uE139", //  group:General
+    "_appBarIcons\\mappin.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\phone":                               "\uE13A", //  group:Communications
+    "_appBarIcons\\phone.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\videochat":                           "\uE13B", //  group:Communications
+    "_appBarIcons\\videochat.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\switch":                              "\uE13C", //  group:Communications
+    "_appBarIcons\\switch.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\contact":                             "\uE13D", //  group:Communications
+    "_appBarIcons\\contact.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\rename":                              "\uE13E", //  group:File
+    "_appBarIcons\\rename.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\pin":                                 "\uE141", //  group:System
+    "_appBarIcons\\pin.comment":                        "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\musicinfo":                           "\uE142", //  group:Media
+    "_appBarIcons\\musicinfo.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\go":                                  "\uE143", //  group:General
+    "_appBarIcons\\go.comment":                         "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\keyboard":                            "\uE144", //  group:System
+    "_appBarIcons\\keyboard.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\dockleft":                            "\uE145", //  group:Layout
+    "_appBarIcons\\dockleft.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\dockright":                           "\uE146", //  group:Layout
+    "_appBarIcons\\dockright.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\dockbottom":                          "\uE147", //  group:Layout
+    "_appBarIcons\\dockbottom.comment":                 "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\remote":                              "\uE148", //  group:System
+    "_appBarIcons\\remote.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\refresh":                             "\uE149", //  group:Data
+    "_appBarIcons\\refresh.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\rotate":                              "\uE14A", //  group:Layout
+    "_appBarIcons\\rotate.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\shuffle":                             "\uE14B", //  group:Media
+    "_appBarIcons\\shuffle.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\list":                                "\uE14C", //  group:Editing
+    "_appBarIcons\\list.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\shop":                                "\uE14D", //  group:General
+    "_appBarIcons\\shop.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\selectall":                           "\uE14E", //  group:Data
+    "_appBarIcons\\selectall.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\orientation":                         "\uE14F", //  group:Layout
+    "_appBarIcons\\orientation.comment":                "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\import":                              "\uE150", //  group:Data
+    "_appBarIcons\\import.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\importall":                           "\uE151", //  group:Data
+    "_appBarIcons\\importall.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\browsephotos":                        "\uE155", //  group:Media
+    "_appBarIcons\\browsephotos.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\webcam":                              "\uE156", //  group:System
+    "_appBarIcons\\webcam.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\pictures":                            "\uE158", //  group:Media
+    "_appBarIcons\\pictures.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\savelocal":                           "\uE159", //  group:File
+    "_appBarIcons\\savelocal.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\caption":                             "\uE15A", //  group:Media
+    "_appBarIcons\\caption.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\stop":                                "\uE15B", //  group:Media
+    "_appBarIcons\\stop.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\showresults":                         "\uE15C", //  group:Data
+    "_appBarIcons\\showresults.comment":                "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\volume":                              "\uE15D", //  group:Media
+    "_appBarIcons\\volume.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\repair":                              "\uE15E", //  group:System
+    "_appBarIcons\\repair.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\message":                             "\uE15F", //  group:Communications
+    "_appBarIcons\\message.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\page2":                               "\uE160", //  group:Layout
+    "_appBarIcons\\page2.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\calendarday":                         "\uE161", //  group:Mail and calendar
+    "_appBarIcons\\calendarday.comment":                "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\calendarweek":                        "\uE162", //  group:Mail and calendar
+    "_appBarIcons\\calendarweek.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\calendar":                            "\uE163", //  group:Mail and calendar
+    "_appBarIcons\\calendar.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\characters":                          "\uE164", //  group:Editing
+    "_appBarIcons\\characters.comment":                 "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\mailreplyall":                        "\uE165", //  group:Mail and calendar
+    "_appBarIcons\\mailreplyall.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\read":                                "\uE166", //  group:Mail and calendar
+    "_appBarIcons\\read.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\link":                                "\uE167", //  group:Communications
+    "_appBarIcons\\link.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\accounts":                            "\uE168", //  group:Communications
+    "_appBarIcons\\accounts.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\showbcc":                             "\uE169", //  group:Mail and calendar
+    "_appBarIcons\\showbcc.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\hidebcc":                             "\uE16A", //  group:Mail and calendar
+    "_appBarIcons\\hidebcc.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\cut":                                 "\uE16B", //  group:Editing
+    "_appBarIcons\\cut.comment":                        "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\attach":                              "\uE16C", //  group:Mail and calendar
+    "_appBarIcons\\attach.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\paste":                               "\uE16D", //  group:Editing
+    "_appBarIcons\\paste.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\filter":                              "\uE16E", //  group:Data
+    "_appBarIcons\\filter.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\copy":                                "\uE16F", //  group:Editing
+    "_appBarIcons\\copy.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\emoji2":                              "\uE170", //  group:Mail and calendar
+    "_appBarIcons\\emoji2.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\important":                           "\uE171", //  group:Mail and calendar
+    "_appBarIcons\\important.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\mailreply":                           "\uE172", //  group:Mail and calendar
+    "_appBarIcons\\mailreply.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\slideshow":                           "\uE173", //  group:Media
+    "_appBarIcons\\slideshow.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\sort":                                "\uE174", //  group:Data
+    "_appBarIcons\\sort.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\manage":                              "\uE178", //  group:System
+    "_appBarIcons\\manage.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\allapps":                             "\uE179", //  group:System
+    "_appBarIcons\\allapps.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\disconnectdrive":                     "\uE17A", //  group:System
+    "_appBarIcons\\disconnectdrive.comment":            "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\mapdrive":                            "\uE17B", //  group:System
+    "_appBarIcons\\mapdrive.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\newwindow":                           "\uE17C", //  group:System
+    "_appBarIcons\\newwindow.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\openwith":                            "\uE17D", //  group:System
+    "_appBarIcons\\openwith.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\contactpresence":                     "\uE181", //  group:Communications
+    "_appBarIcons\\contactpresence.comment":            "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\priority":                            "\uE182", //  group:Mail and calendar
+    "_appBarIcons\\priority.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\uploadskydrive":                      "\uE183", //  group:File
+    "_appBarIcons\\uploadskydrive.comment":             "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\gototoday":                           "\uE184", //  group:Mail and calendar
+    "_appBarIcons\\gototoday.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\font":                                "\uE185", //  group:Editing
+    "_appBarIcons\\font.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\fontcolor":                           "\uE186", //  group:Editing
+    "_appBarIcons\\fontcolor.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\contact2":                            "\uE187", //  group:Communications
+    "_appBarIcons\\contact2.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\folder":                              "\uE188", //  group:File
+    "_appBarIcons\\folder.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\audio":                               "\uE189", //  group:Media
+    "_appBarIcons\\audio.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\placeholder":                         "\uE18A", //  group:General
+    "_appBarIcons\\placeholder.comment":                "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\view":                                "\uE18B", //  group:Layout
+    "_appBarIcons\\view.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\setlockscreen":                       "\uE18C", //  group:System
+    "_appBarIcons\\setlockscreen.comment":              "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\settile":                             "\uE18D", //  group:System
+    "_appBarIcons\\settile.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\cc":                                  "\uE190", //  group:Media
+    "_appBarIcons\\cc.comment":                         "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\stopslideshow":                       "\uE191", //  group:Media
+    "_appBarIcons\\stopslideshow.comment":              "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\permissions":                         "\uE192", //  group:System
+    "_appBarIcons\\permissions.comment":                "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\highlight":                           "\uE193", //  group:Editing
+    "_appBarIcons\\highlight.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\disableupdates":                      "\uE194", //  group:System
+    "_appBarIcons\\disableupdates.comment":             "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\unfavorite":                          "\uE195", //  group:Media
+    "_appBarIcons\\unfavorite.comment":                 "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\unpin":                               "\uE196", //  group:System
+    "_appBarIcons\\unpin.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\openlocal":                           "\uE197", //  group:File
+    "_appBarIcons\\openlocal.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\mute":                                "\uE198", //  group:Media
+    "_appBarIcons\\mute.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\italic":                              "\uE199", //  group:Editing
+    "_appBarIcons\\italic.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\underline":                           "\uE19A", //  group:Editing
+    "_appBarIcons\\underline.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\bold":                                "\uE19B", //  group:Editing
+    "_appBarIcons\\bold.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\movetofolder":                        "\uE19C", //  group:File
+    "_appBarIcons\\movetofolder.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\likedislike":                         "\uE19D", //  group:Data
+    "_appBarIcons\\likedislike.comment":                "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\dislike":                             "\uE19E", //  group:Data
+    "_appBarIcons\\dislike.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\like":                                "\uE19F", //  group:Data
+    "_appBarIcons\\like.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\alignright":                          "\uE1A0", //  group:Editing
+    "_appBarIcons\\alignright.comment":                 "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\aligncenter":                         "\uE1A1", //  group:Editing
+    "_appBarIcons\\aligncenter.comment":                "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\alignleft":                           "\uE1A2", //  group:Editing
+    "_appBarIcons\\alignleft.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\zoom":                                "\uE1A3", //  group:Layout
+    "_appBarIcons\\zoom.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\zoomout":                             "\uE1A4", //  group:Layout
+    "_appBarIcons\\zoomout.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\openfile":                            "\uE1A5", //  group:File
+    "_appBarIcons\\openfile.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\otheruser":                           "\uE1A6", //  group:System
+    "_appBarIcons\\otheruser.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\admin":                               "\uE1A7", //  group:System
+    "_appBarIcons\\admin.comment":                      "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\street":                              "\uE1C3", //  group:General
+    "_appBarIcons\\street.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\map":                                 "\uE1C4", //  group:General
+    "_appBarIcons\\map.comment":                        "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\clearselection":                      "\uE1C5", //  group:Data
+    "_appBarIcons\\clearselection.comment":             "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\fontdecrease":                        "\uE1C6", //  group:Editing
+    "_appBarIcons\\fontdecrease.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\fontincrease":                        "\uE1C7", //  group:Editing
+    "_appBarIcons\\fontincrease.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\fontsize":                            "\uE1C8", //  group:Editing
+    "_appBarIcons\\fontsize.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\cellphone":                           "\uE1C9", //  group:Communications
+    "_appBarIcons\\cellphone.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\reshare":                             "\uE1CA", //  group:Communications
+    "_appBarIcons\\reshare.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\tag":                                 "\uE1CB", //  group:Data
+    "_appBarIcons\\tag.comment":                        "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\repeatone":                           "\uE1CC", //  group:Media
+    "_appBarIcons\\repeatone.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\repeatall":                           "\uE1CD", //  group:Media
+    "_appBarIcons\\repeatall.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\outlinestar":                         "\uE1CE", //  group:Data
+    "_appBarIcons\\outlinestar.comment":                "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\solidstar":                           "\uE1CF", //  group:Data
+    "_appBarIcons\\solidstar.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\calculator":                          "\uE1D0", //  group:General
+    "_appBarIcons\\calculator.comment":                 "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\directions":                          "\uE1D1", //  group:General
+    "_appBarIcons\\directions.comment":                 "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\target":                              "\uE1D2", //  group:General
+    "_appBarIcons\\target.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\library":                             "\uE1D3", //  group:Media
+    "_appBarIcons\\library.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\phonebook":                           "\uE1D4", //  group:Communications
+    "_appBarIcons\\phonebook.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\memo":                                "\uE1D5", //  group:Communications
+    "_appBarIcons\\memo.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\microphone":                          "\uE1D6", //  group:System
+    "_appBarIcons\\microphone.comment":                 "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\postupdate":                          "\uE1D7", //  group:Communications
+    "_appBarIcons\\postupdate.comment":                 "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\backtowindow":                        "\uE1D8", //  group:Layout
+    "_appBarIcons\\backtowindow.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\fullscreen":                          "\uE1D9", //  group:Layout
+    "_appBarIcons\\fullscreen.comment":                 "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\newfolder":                           "\uE1DA", //  group:File
+    "_appBarIcons\\newfolder.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\calendarreply":                       "\uE1DB", //  group:Mail and calendar
+    "_appBarIcons\\calendarreply.comment":              "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\unsyncfolder":                        "\uE1DD", //  group:File
+    "_appBarIcons\\unsyncfolder.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\reporthacked":                        "\uE1DE", //  group:Communications
+    "_appBarIcons\\reporthacked.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\syncfolder":                          "\uE1DF", //  group:File
+    "_appBarIcons\\syncfolder.comment":                 "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\blockcontact":                        "\uE1E0", //  group:Communications
+    "_appBarIcons\\blockcontact.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\switchapps":                          "\uE1E1", //  group:System
+    "_appBarIcons\\switchapps.comment":                 "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\addfriend":                           "\uE1E2", //  group:Communications
+    "_appBarIcons\\addfriend.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\touchpointer":                        "\uE1E3", //  group:System
+    "_appBarIcons\\touchpointer.comment":               "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\gotostart":                           "\uE1E4", //  group:System
+    "_appBarIcons\\gotostart.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\zerobars":                            "\uE1E5", //  group:System
+    "_appBarIcons\\zerobars.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\onebar":                              "\uE1E6", //  group:System
+    "_appBarIcons\\onebar.comment":                     "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\twobars":                             "\uE1E7", //  group:System
+    "_appBarIcons\\twobars.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\threebars":                           "\uE1E8", //  group:System
+    "_appBarIcons\\threebars.comment":                  "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\fourbars":                            "\uE1E9", //  group:System
+    "_appBarIcons\\fourbars.comment":                   "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\scan":                                "\uE294", //  group:General
+    "_appBarIcons\\scan.comment":                       "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\preview":                             "\uE295", //  group:General
+    "_appBarIcons\\preview.comment":                    "{Locked:qps-ploc,qps-plocm}",
+    "appBarIcons\\hamburger":                           "\uE700", //  group:General
+    "_appBarIcons\\hamburger.comment":                  "{Locked:qps-ploc,qps-plocm}"
+}
+);
+// Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information.
+define('WinJS/Core/_Resources',[
+    'exports',
+    './_Global',
+    './_WinRT',
+    './_Base',
+    './_Events',
+    'require-json!en-US/ui.resjson',
+    ], function resourcesInit(exports, _Global, _WinRT, _Base, _Events, defaultStrings) {
+    "use strict";
+
+    var appxVersion = "WinJS.4.0";
+    var developerPrefix = "Developer.";
+    if (appxVersion.indexOf(developerPrefix) === 0) {
+        appxVersion = appxVersion.substring(developerPrefix.length);
+    }
+
+    function _getWinJSString(id) {
+        var result = getString("ms-resource://" + appxVersion + "/" + id);
+
+        if (result.empty) {
+            result = _getStringBuiltIn(id);
+        }
+
+        return result;
+    }
+
+    function _getStringBuiltIn(resourceId) {
+
+        var parts = resourceId.split("/");
+        parts.shift(); // ignore the leading ui/
+
+        var str = defaultStrings[parts.join("\\")];
+
+        if (typeof str === "string") {
+            str = { value: str };
+        }
+
+        return str || { value: resourceId, empty: true };
+    }
+
+    var resourceMap;
+    var mrtEventHook = false;
+    var contextChangedET = "contextchanged";
+    var resourceContext;
+
+    var ListenerType = _Base.Class.mix(_Base.Class.define(null, { /* empty */ }, { supportedForProcessing: false }), _Events.eventMixin);
+    var listeners = new ListenerType();
+    var createEvent = _Events._createEventProperty;
+
+    var strings = {
+        get malformedFormatStringInput() { return "Malformed, did you mean to escape your '{0}'?"; },
+    };
+
+    _Base.Namespace.define("WinJS.Resources", {
+        _getWinJSString: _getWinJSString
+    });
+
+    function formatString(string) {
+        var args = arguments;
+        if (args.length > 1) {
+            string = string.replace(/({{)|(}})|{(\d+)}|({)|(})/g, function (unused, left, right, index, illegalLeft, illegalRight) {
+                if (illegalLeft || illegalRight) { throw formatString(strings.malformedFormatStringInput, illegalLeft || illegalRight); }
+                return (left && "{") || (right && "}") || args[(index | 0) + 1];
+            });
+        }
+        return string;
+    }
+
+    _Base.Namespace._moduleDefine(exports, "WinJS.Resources", {
+        addEventListener: function (type, listener, useCapture) {
+            /// <signature helpKeyword="WinJS.Resources.addEventListener">
+            /// <summary locid="WinJS.Resources.addEventListener">
+            /// Registers an event handler for the specified event.
+            /// </summary>
+            /// <param name='type' type="String" locid='WinJS.Resources.addEventListener_p:type'>
+            /// The name of the event to handle.
+            /// </param>
+            /// <param name='listener' type="Function" locid='WinJS.Resources.addEventListener_p:listener'>
+            /// The listener to invoke when the event gets raised.
+            /// </param>
+            /// <param name='useCapture' type="Boolean" locid='WinJS.Resources.addEventListener_p:useCapture'>
+            /// Set to true to register the event handler for the capturing phase; set to false to register for the bubbling phase.
+            /// </param>
+            /// </signature>
+            if (_WinRT.Windows.ApplicationModel.Resources.Core.ResourceManager && !mrtEventHook) {
+                if (type === contextChangedET) {
+                    try {
+                        var resContext = exports._getResourceContext();
+                        if (resContext) {
+                            resContext.qualifierValues.addEventListener("mapchanged", function (e) {
+                                exports.dispatchEvent(contextChangedET, { qualifier: e.key, changed: e.target[e.key] });
+                            }, false);
+
+                        } else {
+                            // The API can be called in the Background thread (web worker).
+                            _WinRT.Windows.ApplicationModel.Resources.Core.ResourceManager.current.defaultContext.qualifierValues.addEventListener("mapchanged", function (e) {
+                                exports.dispatchEvent(contextChangedET, { qualifier: e.key, changed: e.target[e.key] });
+                            }, false);
+                        }
+                        mrtEventHook = true;
+                    } catch (e) {
+                    }
+                }
+            }
+            listeners.addEventListener(type, listener, useCapture);
+        },
+        removeEventListener: listeners.removeEventListener.bind(listeners),
+        dispatchEvent: listeners.dispatchEvent.bind(listeners),
+
+        _formatString: formatString,
+
+        _getStringWinRT: function (resourceId) {
+            if (!resourceMap) {
+                var mainResourceMap = _WinRT.Windows.ApplicationModel.Resources.Core.ResourceManager.current.mainResourceMap;
+                try {
+                    resourceMap = mainResourceMap.getSubtree('Resources');
+                }
+                catch (e) {
+                }
+                if (!resourceMap) {
+                    resourceMap = mainResourceMap;
+                }
+            }
+
+            var stringValue;
+            var langValue;
+            var resCandidate;
+            try {
+                var resContext = exports._getResourceContext();
+                if (resContext) {
+                    resCandidate = resourceMap.getValue(resourceId, resContext);
+                } else {
+                    resCandidate = resourceMap.getValue(resourceId);
+                }
+
+                if (resCandidate) {
+                    stringValue = resCandidate.valueAsString;
+                    if (stringValue === undefined) {
+                        stringValue = resCandidate.toString();
+                    }
+                }
+            }
+            catch (e) { }
+
+            if (!stringValue) {
+                return exports._getStringJS(resourceId);
+            }
+
+            try {
+                langValue = resCandidate.getQualifierValue("Language");
+            }
+            catch (e) {
+                return { value: stringValue };
+            }
+
+            return { value: stringValue, lang: langValue };
+        },
+
+        _getStringJS: function (resourceId) {
+            var str = _Global.strings && _Global.strings[resourceId];
+            if (typeof str === "string") {
+                str = { value: str };
+            }
+            return str || { value: resourceId, empty: true };
+        },
+
+        _getResourceContext: function () {
+            if (_Global.document) {
+                if (typeof (resourceContext) === 'undefined') {
+                    var context = _WinRT.Windows.ApplicationModel.Resources.Core.ResourceContext;
+                    if (context.getForCurrentView) {
+                        resourceContext = context.getForCurrentView();
+                    } else {
+                        resourceContext = null;
+                    }
+
+                }
+            }
+            return resourceContext;
+        },
+
+        oncontextchanged: createEvent(contextChangedET)
+
+    });
+
+    var getStringImpl = _WinRT.Windows.ApplicationModel.Resources.Core.ResourceManager ? exports._getStringWinRT : exports._getStringJS;
+
+    var getString = function (resourceId) {
+        /// <signature helpKeyword="WinJS.Resources.getString">
+        /// <summary locid='WinJS.Resources.getString'>
+        /// Retrieves the resource string that has the specified resource id.
+        /// </summary>
+        /// <param name='resourceId' type="Number" locid='WinJS.Resources.getString._p:resourceId'>
+        /// The resource id of the string to retrieve.
+        /// </param>
+        /// <returns type='Object' locid='WinJS.Resources.getString_returnValue'>
+        /// An object that can contain these properties:
+        ///
+        /// value:
+        /// The value of the requested string. This property is always present.
+        ///
+        /// empty:
+        /// A value that specifies whether the requested string wasn't found.
+        /// If its true, the string wasn't found. If its false or undefined,
+        /// the requested string was found.
+        ///
+        /// lang:
+        /// The language of the string, if specified. This property is only present
+        /// for multi-language resources.
+        ///
+        /// </returns>
+        /// </signature>
+
+        return getStringImpl(resourceId);
+    };
+
+    _Base.Namespace._moduleDefine(exports, null, {
+        _formatString: formatString,
+        _getWinJSString: _getWinJSString
+    });
+
+    _Base.Namespace._moduleDefine(exports, "WinJS.Resources", {
+        getString: {
+            get: function () {
+                return getString;
+            },
+            set: function (value) {
+                getString = value;
+            }
+        }
+    });
+
+});
+
+// Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information.
+define('WinJS/Core/_Trace',[
+    './_Global'
+    ], function traceInit(_Global) {
+    "use strict";
+
+    function nop(v) {
+        return v;
+    }
+
+    return {
+        _traceAsyncOperationStarting: (_Global.Debug && _Global.Debug.msTraceAsyncOperationStarting && _Global.Debug.msTraceAsyncOperationStarting.bind(_Global.Debug)) || nop,
+        _traceAsyncOperationCompleted: (_Global.Debug && _Global.Debug.msTraceAsyncOperationCompleted && _Global.Debug.msTraceAsyncOperationCompleted.bind(_Global.Debug)) || nop,
+        _traceAsyncCallbackStarting: (_Global.Debug && _Global.Debug.msTraceAsyncCallbackStarting && _Global.Debug.msTraceAsyncCallbackStarting.bind(_Global.Debug)) || nop,
+        _traceAsyncCallbackCompleted: (_Global.Debug && _Global.Debug.msTraceAsyncCallbackCompleted && _Global.Debug.msTraceAsyncCallbackCompleted.bind(_Global.Debug)) || nop
+    };
+});
+// Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information.
+define('WinJS/Promise/_StateMachine',[
+    '../Core/_Global',
+    '../Core/_BaseCoreUtils',
+    '../Core/_Base',
+    '../Core/_ErrorFromName',
+    '../Core/_Events',
+    '../Core/_Trace'
+    ], function promiseStateMachineInit(_Global, _BaseCoreUtils, _Base, _ErrorFromName, _Events, _Trace) {
+    "use strict";
+
+    _Global.Debug && (_Global.Debug.setNonUserCodeExceptions = true);
+
+    var ListenerType = _Base.Class.mix(_Base.Class.define(null, { /*empty*/ }, { supportedForProcessing: false }), _Events.eventMixin);
+    var promiseEventListeners = new ListenerType();
+    // make sure there is a listeners collection so that we can do a more trivial check below
+    promiseEventListeners._listeners = {};
+    var errorET = "error";
+    var canceledName = "Canceled";
+    var tagWithStack = false;
+    var tag = {
+        promise: 0x01,
+        thenPromise: 0x02,
+        errorPromise: 0x04,
+        exceptionPromise: 0x08,
+        completePromise: 0x10,
+    };
+    tag.all = tag.promise | tag.thenPromise | tag.errorPromise | tag.exceptionPromise | tag.completePromise;
+
+    //
+    // Global error counter, for each error which enters the system we increment this once and then
+    // the error number travels with the error as it traverses the tree of potential handlers.
+    //
+    // When someone has registered to be told about errors (WinJS.Promise.callonerror) promises
+    // which are in error will get tagged with a ._errorId field. This tagged field is the
+    // contract by which nested promises with errors will be identified as chaining for the
+    // purposes of the callonerror semantics. If a nested promise in error is encountered without
+    // a ._errorId it will be assumed to be foreign and treated as an interop boundary and
+    // a new error id will be minted.
+    //
+    var error_number = 1;
+
+    //
+    // The state machine has a interesting hiccup in it with regards to notification, in order
+    // to flatten out notification and avoid recursion for synchronous completion we have an
+    // explicit set of *_notify states which are responsible for notifying their entire tree
+    // of children. They can do this because they know that immediate children are always
+    // ThenPromise instances and we can therefore reach into their state to access the
+    // _listeners collection.
+    //
+    // So, what happens is that a Promise will be fulfilled through the _completed or _error
+    // messages at which point it will enter a *_notify state and be responsible for to move
+    // its children into an (as appropriate) success or error state and also notify that child's
+    // listeners of the state transition, until leaf notes are reached.
+    //
+
+    var state_created,              // -> working
+        state_working,              // -> error | error_notify | success | success_notify | canceled | waiting
+        state_waiting,              // -> error | error_notify | success | success_notify | waiting_canceled
+        state_waiting_canceled,     // -> error | error_notify | success | success_notify | canceling
+        state_canceled,             // -> error | error_notify | success | success_notify | canceling
+        state_canceling,            // -> error_notify
+        state_success_notify,       // -> success
+        state_success,              // -> .
+        state_error_notify,         // -> error
+        state_error;                // -> .
+
+    // Noop function, used in the various states to indicate that they don't support a given
+    // message. Named with the somewhat cute name '_' because it reads really well in the states.
+
+    function _() { }
+
+    // Initial state
+    //
+    state_created = {
+        name: "created",
+        enter: function (promise) {
+            promise._setState(state_working);
+        },
+        cancel: _,
+        done: _,
+        then: _,
+        _completed: _,
+        _error: _,
+        _notify: _,
+        _progress: _,
+        _setCompleteValue: _,
+        _setErrorValue: _
+    };
+
+    // Ready state, waiting for a message (completed/error/progress), able to be canceled
+    //
+    state_working = {
+        name: "working",
+        enter: _,
+        cancel: function (promise) {
+            promise._setState(state_canceled);
+        },
+        done: done,
+        then: then,
+        _completed: completed,
+        _error: error,
+        _notify: _,
+        _progress: progress,
+        _setCompleteValue: setCompleteValue,
+        _setErrorValue: setErrorValue
+    };
+
+    // Waiting state, if a promise is completed with a value which is itself a promise
+    // (has a then() method) it signs up to be informed when that child promise is
+    // fulfilled at which point it will be fulfilled with that value.
+    //
+    state_waiting = {
+        name: "waiting",
+        enter: function (promise) {
+            var waitedUpon = promise._value;
+            // We can special case our own intermediate promises which are not in a
+            //  terminal state by just pushing this promise as a listener without
+            //  having to create new indirection functions
+            if (waitedUpon instanceof ThenPromise &&
+                waitedUpon._state !== state_error &&
+                waitedUpon._state !== state_success) {
+                pushListener(waitedUpon, { promise: promise });
+            } else {
+                var error = function (value) {
+                    if (waitedUpon._errorId) {
+                        promise._chainedError(value, waitedUpon);
+                    } else {
+                        // Because this is an interop boundary we want to indicate that this
+                        //  error has been handled by the promise infrastructure before we
+                        //  begin a new handling chain.
+                        //
+                        callonerror(promise, value, detailsForHandledError, waitedUpon, error);
+                        promise._error(value);
+                    }
+                };
+                error.handlesOnError = true;
+                waitedUpon.then(
+                    promise._completed.bind(promise),
+                    error,
+                    promise._progress.bind(promise)
+                );
+            }
+        },
+        cancel: function (promise) {
+            promise._setState(state_waiting_canceled);
+        },
+        done: done,
+        then: then,
+        _completed: completed,
+        _error: error,
+        _notify: _,
+        _progress: progress,
+        _setCompleteValue: setCompleteValue,
+        _setErrorValue: setErrorValue
+    };
+
+    // Waiting canceled state, when a promise has been in a waiting state and receives a
+    // request to cancel its pending work it will forward that request to the child promise
+    // and then waits to be informed of the result. This promise moves itself into the
+    // canceling state but understands that the child promise may instead push it to a
+    // different state.
+    //
+    state_waiting_canceled = {
+        name: "waiting_canceled",
+        enter: function (promise) {
+            // Initiate a transition to canceling. Triggering a cancel on the promise
+            // that we are waiting upon may result in a different state transition
+            // before the state machine pump runs again.
+            promise._setState(state_canceling);
+            var waitedUpon = promise._value;
+            if (waitedUpon.cancel) {
+                waitedUpon.cancel();
+            }
+        },
+        cancel: _,
+        done: done,
+        then: then,
+        _completed: completed,
+        _error: error,
+        _notify: _,
+        _progress: progress,
+        _setCompleteValue: setCompleteValue,
+        _setErrorValue: setErrorValue
+    };
+
+    // Canceled state, moves to the canceling state and then tells the promise to do
+    // whatever it might need to do on cancelation.
+    //
+    state_canceled = {
+        name: "canceled",
+        enter: function (promise) {
+            // Initiate a transition to canceling. The _cancelAction may change the state
+            // be

<TRUNCATED>

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


[4/7] cordova-windows git commit: CB-8923 Add support for Windows 10 platform

Posted by ax...@apache.org.
http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/template/WinJS/js/WinJS.intellisense-setup.js
----------------------------------------------------------------------
diff --git a/template/WinJS/js/WinJS.intellisense-setup.js b/template/WinJS/js/WinJS.intellisense-setup.js
new file mode 100644
index 0000000..e506887
--- /dev/null
+++ b/template/WinJS/js/WinJS.intellisense-setup.js
@@ -0,0 +1,30 @@
+// Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information.
+/* global intellisense, window */
+(function () {
+    "use strict";
+
+    var redirect = intellisense.redirectDefinition;
+
+    var originalKeys = Object.keys;
+    function baseKeys(o) {
+        var values = Object.getOwnPropertyNames(o);
+        for (var i = 0, len = values.length; i < len; ++i) {
+            if (values[i].substr(0, 7) === "_$field") { return values; }
+        }
+        return originalKeys(o);
+    }
+    Object.keys = baseKeys;
+
+    redirect(baseKeys, originalKeys);
+
+    window._$originalAddEventListener = window.addEventListener;
+    function addEventListener(type, handler, useCapture) {
+        if (typeof (type) === "string" && (type === "pointerdown" || type === "keydown")) {
+            handler = function () { };
+        }
+        return window._$originalAddEventListener(type, handler, useCapture);
+    }
+    window.addEventListener = addEventListener;
+
+    redirect(addEventListener, window._$originalAddEventListener);
+})();
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/template/WinJS/js/WinJS.intellisense.js
----------------------------------------------------------------------
diff --git a/template/WinJS/js/WinJS.intellisense.js b/template/WinJS/js/WinJS.intellisense.js
new file mode 100644
index 0000000..587dbad
--- /dev/null
+++ b/template/WinJS/js/WinJS.intellisense.js
@@ -0,0 +1,195 @@
+// Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information.
+/* global intellisense, window, document, setTimeout, WinJS */
+(function () {
+    "use strict";
+    var redirect = intellisense.redirectDefinition;
+
+    function makeAllEnumerable(v) {
+        /// <param name="v" type="Object" />
+        if (v && typeof v === "object") {
+            Object.getOwnPropertyNames(v).forEach(function (name) {
+                var pd = Object.getOwnPropertyDescriptor(v, name);
+                if (!pd.enumerable && pd.configurable) {
+                    pd.enumerable = true;
+                    Object.defineProperty(v, name, pd);
+                }
+            });
+        }
+        return v;
+    }
+
+    function wrap(old) {
+        /// <param name="old" type="Function" />
+        var wrapper = function () {
+            var args = [];
+            for (var i = 0, len = arguments.length; i < len; i++) {
+                args.push(makeAllEnumerable(arguments[i]));
+            }
+            return old.apply(this, args);
+        };
+        redirect(wrapper, old);
+        return wrapper;
+    }
+
+    function wrapAllMethods(v) {
+        /// <param name="v" type="Object" />
+        if (v) {
+            Object.getOwnPropertyNames(v).forEach(function (name) {
+                var value = v[name];
+                if (typeof value === "function") {
+                    v[name] = wrap(value);
+                }
+            });
+        }
+        return v;
+    }
+
+    if (this.WinJS) {
+        wrapAllMethods(WinJS.Namespace);
+        wrapAllMethods(WinJS.Class);
+    }
+
+    (function () {
+        var originalApplicationStart = WinJS.Application.start;
+        WinJS.Application.start = function () {
+            // Call app.stop() when execution completes to ensure that the subsequent calls to app.start() do not see the app as running.
+            var app = this;
+            setTimeout(function () {
+                app.stop();
+            }, 0);
+            return originalApplicationStart.apply(this, arguments);
+        };
+        redirect(WinJS.Application.start, originalApplicationStart);
+
+        var originalPagesDefine = WinJS.UI.Pages.define;
+        WinJS.UI.Pages.define = function (uri, members) {
+            var result = originalPagesDefine.apply(this, arguments);
+
+            intellisense.callerDefines(result, members);
+            if (typeof uri === 'string') {
+                intellisense.declareNavigationContainer(result, "Page (" + uri + ")");
+            }
+
+            // Set the call contexts for IPageControlMembers
+            if (members) {
+                var pageInstance = new result();
+
+                if (typeof members.error === 'function') {
+                    intellisense.setCallContext(members.error, { thisArg: pageInstance, args: [new Error()] });
+                }
+                if (typeof members.init === 'function') {
+                    intellisense.setCallContext(members.init, { thisArg: pageInstance, args: [document.createElement('element'), {}] });
+                }
+                if (typeof members.load === 'function') {
+                    intellisense.setCallContext(members.load, { thisArg: pageInstance, args: [""] });
+                }
+                if (typeof members.processed === 'function') {
+                    intellisense.setCallContext(members.processed, { thisArg: pageInstance, args: [document.createElement('element'), {}] });
+                }
+                if (typeof members.ready === 'function') {
+                    intellisense.setCallContext(members.ready, { thisArg: pageInstance, args: [document.createElement('element'), {}] });
+                }
+                if (typeof members.render === 'function') {
+                    intellisense.setCallContext(members.render, { thisArg: pageInstance, args: [document.createElement('element'), {}, WinJS.Promise.wrap()] });
+                }
+            }
+
+            return result;
+        };
+        redirect(WinJS.UI.Pages.define, originalPagesDefine);
+
+        // Simulate a call to a class' instance/static methods for WinJS.Class.define
+        var originalClassDefine = WinJS.Class.define;
+        WinJS.Class.define = function (constructor, instanceMembers, staticMembers) {
+            var result = originalClassDefine.call(this, constructor, instanceMembers, staticMembers);
+            // Go through the instance members to find methods
+            if (instanceMembers) {
+                var classInstance;
+                Object.getOwnPropertyNames(instanceMembers).forEach(function (name) {
+                    var member = instanceMembers[name];
+                    if (typeof member === 'function') {
+                        intellisense.setCallContext(member, {
+                            get thisArg() {
+                                if (!classInstance) {
+                                    classInstance = new result();
+                                }
+                                return classInstance;
+                            }
+                        });
+                    }
+                });
+            }
+            // Go through the static members to find methods
+            if (staticMembers) {
+                Object.getOwnPropertyNames(staticMembers).forEach(function (name) {
+                    var member = staticMembers[name];
+                    if (typeof member === 'function') {
+                        intellisense.setCallContext(member, { thisArg: result });
+                    }
+                });
+            }
+
+            return result;
+        };
+        redirect(WinJS.Class.define, originalClassDefine);
+
+        // Define the caller location property for WinJS.Namespace.define
+        var originalNamespaceDefine = WinJS.Namespace.define;
+        WinJS.Namespace.define = function (name, members) {
+            var result = originalNamespaceDefine.call(this, name, members);
+            if (typeof name === 'string' && result) {
+                // Get the global object
+                var globalObj = (function () {
+                    return this;
+                })();
+
+                // Define the caller location of parent namespaces that haven't yet been defined
+                var path;
+                var namespaceParts = name.split(".");
+                for (var i = 0; i < namespaceParts.length - 1; i++) {
+                    path = ((i === 0) ? namespaceParts[i] : path += "." + namespaceParts[i]);
+                    var item = globalObj[path];
+                    if (item) {
+                        intellisense.callerDefines(item);
+                    }
+                }
+
+                // Define the caller location of the original namespace
+                intellisense.callerDefines(result, members);
+            }
+            return result;
+        };
+        redirect(WinJS.Namespace.define, originalNamespaceDefine);
+
+        intellisense.setCallContext(WinJS.Promise, { thisArg: {}, args: [function () { }] });
+    })();
+
+    (function () {
+        // In the language serivce all promises are completed promises. The completed promise class is private
+        // to WinJS, however, we can get access to the prototype through one of the promise instances by
+        // getting the instance's constructor's prototype.
+        var promisePrototype = WinJS.Promise.as(1).constructor.prototype;
+
+        // Setting the argument calling context of the done and then methods to be an instance of Error().
+        // The completion callback is handled in WinJS itself through a <returns> metadata comment.
+        var originalDone = promisePrototype.done;
+        promisePrototype.done = function (c, e, p) {
+            intellisense.setCallContext(e, { thisArg: this, args: [new Error()] });
+            return originalDone.apply(this, arguments);
+        };
+        redirect(promisePrototype.done, originalDone);
+
+        var originalThen = promisePrototype.then;
+        promisePrototype.then = function (c, e, p) {
+            intellisense.setCallContext(e, { thisArg: this, args: [new Error()] });
+            return originalThen.apply(this, arguments);
+        };
+        redirect(promisePrototype.then, originalThen);
+    })();
+
+    if (window._$originalAddEventListener) {
+        window.addEventListener = window._$originalAddEventListener;
+        window._$originalAddEventListener = null;
+        delete window._$originalAddEventListener;
+    }
+})();
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


[5/7] cordova-windows git commit: CB-8923 Add support for Windows 10 platform

Posted by ax...@apache.org.
http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/template/WinJS/css/ui-light.css
----------------------------------------------------------------------
diff --git a/template/WinJS/css/ui-light.css b/template/WinJS/css/ui-light.css
new file mode 100644
index 0000000..995a0f9
--- /dev/null
+++ b/template/WinJS/css/ui-light.css
@@ -0,0 +1,7663 @@
+/* Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. */
+@keyframes WinJS-node-inserted {
+  from {
+    outline-color: #000;
+  }
+  to {
+    outline-color: #001;
+  }
+}
+@keyframes WinJS-opacity-in {
+  from {
+    opacity: 0;
+  }
+  to {
+    opacity: 1;
+  }
+}
+@keyframes WinJS-opacity-out {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+  }
+}
+@keyframes WinJS-scale-up {
+  from {
+    transform: scale(0.85);
+  }
+  to {
+    transform: scale(1);
+  }
+}
+@keyframes WinJS-scale-down {
+  from {
+    transform: scale(1);
+  }
+  to {
+    transform: scale(0.85);
+  }
+}
+@keyframes WinJS-default-remove {
+  from {
+    transform: translateX(11px);
+  }
+  to {
+    transform: none;
+  }
+}
+@keyframes WinJS-default-remove-rtl {
+  from {
+    transform: translateX(-11px);
+  }
+  to {
+    transform: none;
+  }
+}
+@keyframes WinJS-default-apply {
+  from {
+    transform: none;
+  }
+  to {
+    transform: translateX(11px);
+  }
+}
+@keyframes WinJS-default-apply-rtl {
+  from {
+    transform: none;
+  }
+  to {
+    transform: translateX(-11px);
+  }
+}
+@keyframes WinJS-showEdgeUI {
+  from {
+    transform: translateY(-70px);
+  }
+  to {
+    transform: none;
+  }
+}
+@keyframes WinJS-showPanel {
+  from {
+    transform: translateX(364px);
+  }
+  to {
+    transform: none;
+  }
+}
+@keyframes WinJS-showPanel-rtl {
+  from {
+    transform: translateX(-364px);
+  }
+  to {
+    transform: none;
+  }
+}
+@keyframes WinJS-hideEdgeUI {
+  from {
+    transform: none;
+  }
+  to {
+    transform: translateY(-70px);
+  }
+}
+@keyframes WinJS-hidePanel {
+  from {
+    transform: none;
+  }
+  to {
+    transform: translateX(364px);
+  }
+}
+@keyframes WinJS-hidePanel-rtl {
+  from {
+    transform: none;
+  }
+  to {
+    transform: translateX(-364px);
+  }
+}
+@keyframes WinJS-showPopup {
+  from {
+    transform: translateY(50px);
+  }
+  to {
+    transform: none;
+  }
+}
+@keyframes WinJS-dragSourceEnd {
+  from {
+    transform: translateX(11px) scale(1.05);
+  }
+  to {
+    transform: none;
+  }
+}
+@keyframes WinJS-dragSourceEnd-rtl {
+  from {
+    transform: translateX(-11px) scale(1.05);
+  }
+  to {
+    transform: none;
+  }
+}
+@keyframes WinJS-enterContent {
+  from {
+    transform: translateY(28px);
+  }
+  to {
+    transform: none;
+  }
+}
+@keyframes WinJS-exit {
+  from {
+    transform: none;
+  }
+  to {
+    transform: none;
+  }
+}
+@keyframes WinJS-enterPage {
+  from {
+    transform: translateY(28px);
+  }
+  to {
+    transform: none;
+  }
+}
+@keyframes WinJS-updateBadge {
+  from {
+    transform: translateY(24px);
+  }
+  to {
+    transform: none;
+  }
+}
+@-webkit-keyframes WinJS-node-inserted {
+  from {
+    outline-color: #000;
+  }
+  to {
+    outline-color: #001;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-opacity-in {
+  from {
+    opacity: 0;
+  }
+  to {
+    opacity: 1;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-opacity-out {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-scale-up {
+  from {
+    -webkit-transform: scale(0.85);
+  }
+  to {
+    -webkit-transform: scale(1);
+  }
+}
+@-webkit-keyframes -webkit-WinJS-scale-down {
+  from {
+    -webkit-transform: scale(1);
+  }
+  to {
+    -webkit-transform: scale(0.85);
+  }
+}
+@-webkit-keyframes -webkit-WinJS-default-remove {
+  from {
+    -webkit-transform: translateX(11px);
+  }
+  to {
+    -webkit-transform: none;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-default-remove-rtl {
+  from {
+    -webkit-transform: translateX(-11px);
+  }
+  to {
+    -webkit-transform: none;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-default-apply {
+  from {
+    -webkit-transform: none;
+  }
+  to {
+    -webkit-transform: translateX(11px);
+  }
+}
+@-webkit-keyframes -webkit-WinJS-default-apply-rtl {
+  from {
+    -webkit-transform: none;
+  }
+  to {
+    -webkit-transform: translateX(-11px);
+  }
+}
+@-webkit-keyframes -webkit-WinJS-showEdgeUI {
+  from {
+    -webkit-transform: translateY(-70px);
+  }
+  to {
+    -webkit-transform: none;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-showPanel {
+  from {
+    -webkit-transform: translateX(364px);
+  }
+  to {
+    -webkit-transform: none;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-showPanel-rtl {
+  from {
+    -webkit-transform: translateX(-364px);
+  }
+  to {
+    -webkit-transform: none;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-hideEdgeUI {
+  from {
+    -webkit-transform: none;
+  }
+  to {
+    -webkit-transform: translateY(-70px);
+  }
+}
+@-webkit-keyframes -webkit-WinJS-hidePanel {
+  from {
+    -webkit-transform: none;
+  }
+  to {
+    -webkit-transform: translateX(364px);
+  }
+}
+@-webkit-keyframes -webkit-WinJS-hidePanel-rtl {
+  from {
+    -webkit-transform: none;
+  }
+  to {
+    -webkit-transform: translateX(-364px);
+  }
+}
+@-webkit-keyframes -webkit-WinJS-showPopup {
+  from {
+    -webkit-transform: translateY(50px);
+  }
+  to {
+    -webkit-transform: none;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-dragSourceEnd {
+  from {
+    -webkit-transform: translateX(11px) scale(1.05);
+  }
+  to {
+    -webkit-transform: none;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-dragSourceEnd-rtl {
+  from {
+    -webkit-transform: translateX(-11px) scale(1.05);
+  }
+  to {
+    -webkit-transform: none;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-enterContent {
+  from {
+    -webkit-transform: translateY(28px);
+  }
+  to {
+    -webkit-transform: none;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-exit {
+  from {
+    -webkit-transform: none;
+  }
+  to {
+    -webkit-transform: none;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-enterPage {
+  from {
+    -webkit-transform: translateY(28px);
+  }
+  to {
+    -webkit-transform: none;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-updateBadge {
+  from {
+    -webkit-transform: translateY(24px);
+  }
+  to {
+    -webkit-transform: none;
+  }
+}
+@font-face {
+  font-family: "Segoe UI Command";
+  src: local("Segoe MDL2 Assets");
+  font-weight: normal;
+  font-style: normal;
+}
+@font-face {
+  font-family: "Symbols";
+  src: url(../fonts/Symbols.ttf);
+}
+.win-type-xx-large {
+  font-size: 46px;
+  font-weight: 200;
+  line-height: 1.216;
+  letter-spacing: 0px;
+}
+.win-type-x-large {
+  font-size: 34px;
+  font-weight: 200;
+  line-height: 1.176;
+}
+.win-type-large {
+  font-size: 24px;
+  font-weight: 300;
+  line-height: 1.167;
+}
+.win-type-medium {
+  font-size: 20px;
+  font-weight: 400;
+  line-height: 1.2;
+}
+.win-type-small {
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 1.333;
+}
+.win-type-x-small {
+  font-size: 15px;
+  font-weight: 500;
+  line-height: 1.333;
+}
+.win-type-xx-small {
+  font-size: 12px;
+  font-weight: 400;
+  line-height: 1.167;
+}
+@font-face {
+  font-family: "Segoe UI";
+  font-weight: 200;
+  src: local("Segoe UI Light");
+}
+@font-face {
+  font-family: "Segoe UI";
+  font-weight: 300;
+  src: local("Segoe UI Semilight");
+}
+@font-face {
+  font-family: "Segoe UI";
+  font-weight: 400;
+  src: local("Segoe UI");
+}
+@font-face {
+  font-family: "Segoe UI";
+  font-weight: 500;
+  src: local("Segoe UI Semibold");
+}
+@font-face {
+  font-family: "Segoe UI";
+  font-weight: 600;
+  src: local("Segoe UI Bold");
+}
+@font-face {
+  font-family: "Segoe UI";
+  font-style: italic;
+  font-weight: 400;
+  src: local("Segoe UI Italic");
+}
+@font-face {
+  font-family: "Segoe UI";
+  font-style: italic;
+  font-weight: 700;
+  src: local("Segoe UI Bold Italic");
+}
+@font-face {
+  font-family: "Segoe WP";
+  font-weight: 300;
+  src: local("Segoe WP Light");
+}
+@font-face {
+  font-family: "Segoe WP";
+  font-weight: 600;
+  src: local("Segoe WP Semilight");
+}
+@font-face {
+  font-family: "Segoe WP";
+  font-weight: 500;
+  src: local("Segoe WP");
+}
+@font-face {
+  font-family: "Segoe WP";
+  font-weight: 400;
+  src: local("Segoe WP");
+}
+@font-face {
+  font-family: "Segoe WP";
+  font-weight: 700;
+  src: local("Segoe WP Bold");
+}
+@font-face {
+  font-family: "Segoe WP";
+  font-style: italic;
+  font-weight: 500;
+  src: local("Segoe WP Italic");
+}
+@font-face {
+  font-family: "Segoe WP";
+  font-style: italic;
+  font-weight: 700;
+  src: local("Segoe WP Bold Italic");
+}
+@font-face {
+  font-family: "Microsoft Yahei UI";
+  font-weight: 200;
+  src: local("Microsoft Yahei UI Light");
+}
+@font-face {
+  font-family: "Microsoft Yahei UI";
+  font-weight: 300;
+  src: local("Microsoft Yahei UI");
+}
+@font-face {
+  font-family: "Microsoft Yahei UI";
+  font-weight: 500;
+  src: local("Microsoft Yahei UI");
+}
+@font-face {
+  font-family: "Microsoft Yahei UI";
+  font-weight: 600;
+  src: local("Microsoft Yahei UI Bold");
+}
+@font-face {
+  font-family: "Microsoft JhengHei UI";
+  font-weight: 200;
+  src: local("Microsoft JhengHei UI Light");
+}
+@font-face {
+  font-family: "Microsoft JhengHei UI";
+  font-weight: 300;
+  src: local("Microsoft JhengHei UI");
+}
+@font-face {
+  font-family: "Microsoft JhengHei UI";
+  font-weight: 500;
+  src: local("Microsoft JhengHei UI");
+}
+@font-face {
+  font-family: "Microsoft JhengHei UI";
+  font-weight: 600;
+  src: local("Microsoft JhengHei UI Bold");
+}
+body:-ms-lang(am, ti),
+.win-type-xx-large:-ms-lang(am, ti),
+.win-type-x-large:-ms-lang(am, ti),
+.win-type-large:-ms-lang(am, ti),
+.win-type-medium:-ms-lang(am, ti),
+.win-type-small:-ms-lang(am, ti),
+.win-type-x-small:-ms-lang(am, ti),
+.win-type-xx-small:-ms-lang(am, ti),
+input:-ms-lang(am, ti),
+textarea:-ms-lang(am, ti),
+.win-textarea:-ms-lang(am, ti),
+button:-ms-lang(am, ti),
+select:-ms-lang(am, ti),
+option:-ms-lang(am, ti) {
+  font-family: "Ebrima", "Ebrima", "Nirmala UI", "Gadugi", "Segoe UI Emoji", "Segoe MDL2 Assets", "Symbols", "Yu Gothic UI", "Yu Gothic", "Meiryo UI", "Leelawadee UI", "Microsoft YaHei UI", "Microsoft JhengHei UI", "Malgun Gothic", "Segoe UI Historic", "Estrangelo Edessa", "Microsoft Himalaya", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Tai Le", "Microsoft Yi Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text", "Javanese Text", "Cambria Math";
+}
+body:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+.win-type-xx-large:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+.win-type-x-large:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+.win-type-large:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+.win-type-medium:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+.win-type-small:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+.win-type-x-small:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+.win-type-xx-small:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+input:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+textarea:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+.win-textarea:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+button:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+select:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+option:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te) {
+  font-family: "Nirmala UI", "Ebrima", "Nirmala UI", "Gadugi", "Segoe UI Emoji", "Segoe MDL2 Assets", "Symbols", "Yu Gothic UI", "Yu Gothic", "Meiryo UI", "Leelawadee UI", "Microsoft YaHei UI", "Microsoft JhengHei UI", "Malgun Gothic", "Segoe UI Historic", "Estrangelo Edessa", "Microsoft Himalaya", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Tai Le", "Microsoft Yi Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text", "Javanese Text", "Cambria Math";
+}
+body:-ms-lang(chr-CHER-US),
+.win-type-xx-large:-ms-lang(chr-CHER-US),
+.win-type-x-large:-ms-lang(chr-CHER-US),
+.win-type-large:-ms-lang(chr-CHER-US),
+.win-type-medium:-ms-lang(chr-CHER-US),
+.win-type-small:-ms-lang(chr-CHER-US),
+.win-type-x-small:-ms-lang(chr-CHER-US),
+.win-type-xx-small:-ms-lang(chr-CHER-US),
+input:-ms-lang(chr-CHER-US),
+textarea:-ms-lang(chr-CHER-US),
+.win-textarea:-ms-lang(chr-CHER-US),
+button:-ms-lang(chr-CHER-US),
+select:-ms-lang(chr-CHER-US),
+option:-ms-lang(chr-CHER-US) {
+  font-family: "Gadugi", "Ebrima", "Nirmala UI", "Gadugi", "Segoe UI Emoji", "Segoe MDL2 Assets", "Symbols", "Yu Gothic UI", "Yu Gothic", "Meiryo UI", "Leelawadee UI", "Microsoft YaHei UI", "Microsoft JhengHei UI", "Malgun Gothic", "Segoe UI Historic", "Estrangelo Edessa", "Microsoft Himalaya", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Tai Le", "Microsoft Yi Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text", "Javanese Text", "Cambria Math";
+}
+body:-ms-lang(ja),
+.win-type-xx-large:-ms-lang(ja),
+.win-type-x-large:-ms-lang(ja),
+.win-type-large:-ms-lang(ja),
+.win-type-medium:-ms-lang(ja),
+.win-type-small:-ms-lang(ja),
+.win-type-x-small:-ms-lang(ja),
+.win-type-xx-small:-ms-lang(ja),
+input:-ms-lang(ja),
+textarea:-ms-lang(ja),
+.win-textarea:-ms-lang(ja),
+button:-ms-lang(ja),
+select:-ms-lang(ja),
+option:-ms-lang(ja) {
+  font-family: "Yu Gothic UI", "Ebrima", "Nirmala UI", "Gadugi", "Segoe UI Emoji", "Segoe MDL2 Assets", "Symbols", "Yu Gothic UI", "Yu Gothic", "Meiryo UI", "Leelawadee UI", "Microsoft YaHei UI", "Microsoft JhengHei UI", "Malgun Gothic", "Segoe UI Historic", "Estrangelo Edessa", "Microsoft Himalaya", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Tai Le", "Microsoft Yi Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text", "Javanese Text", "Cambria Math";
+}
+body:-ms-lang(km, lo, th, bug-Bugi),
+.win-type-xx-large:-ms-lang(km, lo, th, bug-Bugi),
+.win-type-x-large:-ms-lang(km, lo, th, bug-Bugi),
+.win-type-large:-ms-lang(km, lo, th, bug-Bugi),
+.win-type-medium:-ms-lang(km, lo, th, bug-Bugi),
+.win-type-small:-ms-lang(km, lo, th, bug-Bugi),
+.win-type-x-small:-ms-lang(km, lo, th, bug-Bugi),
+.win-type-xx-small:-ms-lang(km, lo, th, bug-Bugi),
+input:-ms-lang(km, lo, th, bug-Bugi),
+textarea:-ms-lang(km, lo, th, bug-Bugi),
+.win-textarea:-ms-lang(km, lo, th, bug-Bugi),
+button:-ms-lang(km, lo, th, bug-Bugi),
+select:-ms-lang(km, lo, th, bug-Bugi),
+option:-ms-lang(km, lo, th, bug-Bugi) {
+  font-family: "Leelawadee UI", "Ebrima", "Nirmala UI", "Gadugi", "Segoe UI Emoji", "Segoe MDL2 Assets", "Symbols", "Yu Gothic UI", "Yu Gothic", "Meiryo UI", "Leelawadee UI", "Microsoft YaHei UI", "Microsoft JhengHei UI", "Malgun Gothic", "Segoe UI Historic", "Estrangelo Edessa", "Microsoft Himalaya", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Tai Le", "Microsoft Yi Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text", "Javanese Text", "Cambria Math";
+}
+body:-ms-lang(ko),
+.win-type-xx-large:-ms-lang(ko),
+.win-type-x-large:-ms-lang(ko),
+.win-type-large:-ms-lang(ko),
+.win-type-medium:-ms-lang(ko),
+.win-type-small:-ms-lang(ko),
+.win-type-x-small:-ms-lang(ko),
+.win-type-xx-small:-ms-lang(ko),
+input:-ms-lang(ko),
+textarea:-ms-lang(ko),
+.win-textarea:-ms-lang(ko),
+button:-ms-lang(ko),
+select:-ms-lang(ko),
+option:-ms-lang(ko) {
+  font-family: "Malgun Gothic", "Ebrima", "Nirmala UI", "Gadugi", "Segoe UI Emoji", "Segoe MDL2 Assets", "Symbols", "Yu Gothic UI", "Yu Gothic", "Meiryo UI", "Leelawadee UI", "Microsoft YaHei UI", "Microsoft JhengHei UI", "Malgun Gothic", "Segoe UI Historic", "Estrangelo Edessa", "Microsoft Himalaya", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Tai Le", "Microsoft Yi Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text", "Javanese Text", "Cambria Math";
+}
+body:-ms-lang(jv-Java),
+.win-type-xx-large:-ms-lang(jv-Java),
+.win-type-x-large:-ms-lang(jv-Java),
+.win-type-large:-ms-lang(jv-Java),
+.win-type-medium:-ms-lang(jv-Java),
+.win-type-small:-ms-lang(jv-Java),
+.win-type-x-small:-ms-lang(jv-Java),
+.win-type-xx-small:-ms-lang(jv-Java),
+input:-ms-lang(jv-Java),
+textarea:-ms-lang(jv-Java),
+.win-textarea:-ms-lang(jv-Java),
+button:-ms-lang(jv-Java),
+select:-ms-lang(jv-Java),
+option:-ms-lang(jv-Java) {
+  font-family: "Javanese Text", "Ebrima", "Nirmala UI", "Gadugi", "Segoe UI Emoji", "Segoe MDL2 Assets", "Symbols", "Yu Gothic UI", "Yu Gothic", "Meiryo UI", "Leelawadee UI", "Microsoft YaHei UI", "Microsoft JhengHei UI", "Malgun Gothic", "Segoe UI Historic", "Estrangelo Edessa", "Microsoft Himalaya", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Tai Le", "Microsoft Yi Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text", "Javanese Text", "Cambria Math";
+}
+body:-ms-lang(cop-Copt),
+.win-type-xx-large:-ms-lang(cop-Copt),
+.win-type-x-large:-ms-lang(cop-Copt),
+.win-type-large:-ms-lang(cop-Copt),
+.win-type-medium:-ms-lang(cop-Copt),
+.win-type-small:-ms-lang(cop-Copt),
+.win-type-x-small:-ms-lang(cop-Copt),
+.win-type-xx-small:-ms-lang(cop-Copt),
+input:-ms-lang(cop-Copt),
+textarea:-ms-lang(cop-Copt),
+.win-textarea:-ms-lang(cop-Copt),
+button:-ms-lang(cop-Copt),
+select:-ms-lang(cop-Copt),
+option:-ms-lang(cop-Copt) {
+  font-family: "Segoe MDL2 Assets", "Ebrima", "Nirmala UI", "Gadugi", "Segoe UI Emoji", "Segoe MDL2 Assets", "Symbols", "Yu Gothic UI", "Yu Gothic", "Meiryo UI", "Leelawadee UI", "Microsoft YaHei UI", "Microsoft JhengHei UI", "Malgun Gothic", "Segoe UI Historic", "Estrangelo Edessa", "Microsoft Himalaya", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Tai Le", "Microsoft Yi Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text", "Javanese Text", "Cambria Math";
+}
+body:-ms-lang(zh-CN, zh-Hans, zh-SG),
+.win-type-xx-large:-ms-lang(zh-CN, zh-Hans, zh-SG),
+.win-type-x-large:-ms-lang(zh-CN, zh-Hans, zh-SG),
+.win-type-large:-ms-lang(zh-CN, zh-Hans, zh-SG),
+.win-type-medium:-ms-lang(zh-CN, zh-Hans, zh-SG),
+.win-type-small:-ms-lang(zh-CN, zh-Hans, zh-SG),
+.win-type-x-small:-ms-lang(zh-CN, zh-Hans, zh-SG),
+.win-type-xx-small:-ms-lang(zh-CN, zh-Hans, zh-SG),
+input:-ms-lang(zh-CN, zh-Hans, zh-SG),
+textarea:-ms-lang(zh-CN, zh-Hans, zh-SG),
+.win-textarea:-ms-lang(zh-CN, zh-Hans, zh-SG),
+button:-ms-lang(zh-CN, zh-Hans, zh-SG),
+select:-ms-lang(zh-CN, zh-Hans, zh-SG),
+option:-ms-lang(zh-CN, zh-Hans, zh-SG) {
+  font-family: "Microsoft YaHei UI", "Ebrima", "Nirmala UI", "Gadugi", "Segoe UI Emoji", "Segoe MDL2 Assets", "Symbols", "Yu Gothic UI", "Yu Gothic", "Meiryo UI", "Leelawadee UI", "Microsoft YaHei UI", "Microsoft JhengHei UI", "Malgun Gothic", "Segoe UI Historic", "Estrangelo Edessa", "Microsoft Himalaya", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Tai Le", "Microsoft Yi Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text", "Javanese Text", "Cambria Math";
+}
+body:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+.win-type-xx-large:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+.win-type-x-large:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+.win-type-large:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+.win-type-medium:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+.win-type-small:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+.win-type-x-small:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+.win-type-xx-small:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+input:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+textarea:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+.win-textarea:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+button:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+select:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+option:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO) {
+  font-family: "Microsoft JhengHei UI", "Ebrima", "Nirmala UI", "Gadugi", "Segoe UI Emoji", "Segoe MDL2 Assets", "Symbols", "Yu Gothic UI", "Yu Gothic", "Meiryo UI", "Leelawadee UI", "Microsoft YaHei UI", "Microsoft JhengHei UI", "Malgun Gothic", "Segoe UI Historic", "Estrangelo Edessa", "Microsoft Himalaya", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Tai Le", "Microsoft Yi Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text", "Javanese Text", "Cambria Math";
+}
+html,
+body {
+  width: 100%;
+  height: 100%;
+  margin: 0px;
+  cursor: default;
+  -moz-user-select: none;
+  -webkit-touch-callout: none;
+  -webkit-user-select: none;
+  -khtml-user-select: none;
+  -ms-user-select: none;
+  -ms-scroll-translation: vertical-to-horizontal;
+  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+html {
+  overflow: hidden;
+  direction: ltr;
+}
+html:lang(ar),
+html:lang(dv),
+html:lang(fa),
+html:lang(he),
+html:lang(ku-Arab),
+html:lang(pa-Arab),
+html:lang(prs),
+html:lang(ps),
+html:lang(sd-Arab),
+html:lang(syr),
+html:lang(ug),
+html:lang(ur),
+html:lang(qps-plocm) {
+  direction: rtl;
+}
+body {
+  -ms-content-zooming: none;
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 1.333;
+}
+iframe {
+  border: 0;
+}
+body,
+.win-type-xx-large,
+.win-type-x-large,
+.win-type-large,
+.win-type-medium,
+.win-type-small,
+.win-type-x-small,
+.win-type-xx-small,
+input,
+textarea,
+.win-textarea,
+button,
+select,
+option {
+  font-family: "Segoe UI", "Segoe WP", sans-serif, "Segoe MDL2 Assets", "Symbols";
+}
+input:not([type]),
+input[type=""],
+input[type=text],
+input[type=password],
+input[type=email],
+input[type=number],
+input[type=tel],
+input[type=url],
+input[type=search],
+textarea,
+.win-textarea {
+  -ms-user-select: element;
+  border-style: solid;
+  border-width: 2px;
+  border-radius: 0;
+  margin: 8px 0px;
+  width: 296px;
+  min-width: 64px;
+  min-height: 28px;
+  background-clip: border-box;
+  box-sizing: border-box;
+  padding: 3px 6px 5px 10px;
+  outline: 0;
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 1.333;
+}
+input::-ms-value {
+  margin: 0;
+  padding: 0;
+}
+textarea,
+.win-textarea {
+  resize: none;
+  overflow-y: auto;
+}
+input[type=radio],
+input[type=checkbox] {
+  width: 20px;
+  height: 20px;
+  margin-right: 8px;
+  margin-top: 12px;
+  margin-bottom: 12px;
+}
+input[type=radio]:lang(ar),
+input[type=checkbox]:lang(ar),
+input[type=radio]:lang(dv),
+input[type=checkbox]:lang(dv),
+input[type=radio]:lang(fa),
+input[type=checkbox]:lang(fa),
+input[type=radio]:lang(he),
+input[type=checkbox]:lang(he),
+input[type=radio]:lang(ku-Arab),
+input[type=checkbox]:lang(ku-Arab),
+input[type=radio]:lang(pa-Arab),
+input[type=checkbox]:lang(pa-Arab),
+input[type=radio]:lang(prs),
+input[type=checkbox]:lang(prs),
+input[type=radio]:lang(ps),
+input[type=checkbox]:lang(ps),
+input[type=radio]:lang(sd-Arab),
+input[type=checkbox]:lang(sd-Arab),
+input[type=radio]:lang(syr),
+input[type=checkbox]:lang(syr),
+input[type=radio]:lang(ug),
+input[type=checkbox]:lang(ug),
+input[type=radio]:lang(ur),
+input[type=checkbox]:lang(ur),
+input[type=radio]:lang(qps-plocm),
+input[type=checkbox]:lang(qps-plocm) {
+  margin-left: 8px;
+  margin-right: 0px;
+}
+input::-ms-check {
+  border-style: solid;
+  display: inline-block;
+  border-width: 2px;
+  background-clip: border-box;
+}
+button,
+input[type=button],
+input[type=reset],
+input[type=submit],
+button[type=submit] {
+  border-style: solid;
+  margin: 0px;
+  min-height: 32px;
+  min-width: 120px;
+  padding: 4px 8px;
+  border-width: 2px;
+  background-clip: border-box;
+  border-radius: 0;
+  touch-action: manipulation;
+  -webkit-appearance: none;
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 1.333;
+}
+input::-ms-clear,
+input::-ms-reveal {
+  padding-right: 2px;
+  margin-right: -8px;
+  margin-left: 2px;
+  margin-top: -8px;
+  margin-bottom: -8px;
+  width: 30px;
+  height: 32px;
+}
+input:lang(ar)::-ms-clear,
+input:lang(dv)::-ms-clear,
+input:lang(fa)::-ms-clear,
+input:lang(he)::-ms-clear,
+input:lang(ku-Arab)::-ms-clear,
+input:lang(pa-Arab)::-ms-clear,
+input:lang(prs)::-ms-clear,
+input:lang(ps)::-ms-clear,
+input:lang(sd-Arab)::-ms-clear,
+input:lang(syr)::-ms-clear,
+input:lang(ug)::-ms-clear,
+input:lang(ur)::-ms-clear,
+input:lang(qps-plocm)::-ms-clear,
+input:lang(ar)::-ms-reveal,
+input:lang(dv)::-ms-reveal,
+input:lang(fa)::-ms-reveal,
+input:lang(he)::-ms-reveal,
+input:lang(ku-Arab)::-ms-reveal,
+input:lang(pa-Arab)::-ms-reveal,
+input:lang(prs)::-ms-reveal,
+input:lang(ps)::-ms-reveal,
+input:lang(sd-Arab)::-ms-reveal,
+input:lang(syr)::-ms-reveal,
+input:lang(ug)::-ms-reveal,
+input:lang(ur)::-ms-reveal,
+input:lang(qps-plocm)::-ms-reveal {
+  margin-left: -8px;
+  margin-right: 2px;
+}
+input[type=file] {
+  border: none;
+  min-width: 100px;
+  min-height: 20px;
+  width: 340px;
+  height: 32px;
+  padding: 0px;
+  margin: 7px 8px 21px 8px;
+  background-clip: padding-box;
+}
+input[type=file]::-ms-value {
+  margin: 0;
+  border-width: 2px;
+  border-style: solid;
+  border-right-style: none;
+  border-radius: 0;
+  background-clip: border-box;
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 1.333;
+}
+input[type=file]:lang(ar)::-ms-value,
+input[type=file]:lang(dv)::-ms-value,
+input[type=file]:lang(fa)::-ms-value,
+input[type=file]:lang(he)::-ms-value,
+input[type=file]:lang(ku-Arab)::-ms-value,
+input[type=file]:lang(pa-Arab)::-ms-value,
+input[type=file]:lang(prs)::-ms-value,
+input[type=file]:lang(ps)::-ms-value,
+input[type=file]:lang(sd-Arab)::-ms-value,
+input[type=file]:lang(syr)::-ms-value,
+input[type=file]:lang(ug)::-ms-value,
+input[type=file]:lang(ur)::-ms-value,
+input[type=file]:lang(qps-plocm)::-ms-value {
+  border-left-style: none;
+  border-right-style: solid;
+}
+input[type=file]::-ms-browse {
+  margin: 0;
+  padding: 0 18px;
+  border-width: 2px;
+  border-style: solid;
+  background-clip: padding-box;
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 1.333;
+}
+select {
+  min-width: 56px;
+  max-width: 368px;
+  min-height: 32px;
+  margin: 8px 0;
+  border-style: solid;
+  border-width: 2px;
+  background-clip: border-box;
+  background-image: none;
+  box-sizing: border-box;
+  border-radius: 0;
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 1.333;
+}
+select::-ms-value {
+  padding: 5px 12px 7px 12px;
+  margin: 0;
+}
+select::-ms-expand {
+  border: none;
+  margin-right: 5px;
+  margin-left: 3px;
+  margin-bottom: -2px;
+  font-size: 20px;
+}
+select[multiple] {
+  padding: 0 0 0 12px;
+  vertical-align: bottom;
+}
+option {
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 1.333;
+}
+progress {
+  width: 180px;
+  height: 4px;
+  -webkit-appearance: none;
+}
+progress:not(:indeterminate) {
+  border-style: none;
+}
+progress::-ms-fill {
+  border-style: none;
+}
+progress.win-medium {
+  width: 296px;
+}
+progress.win-large {
+  width: 100%;
+}
+progress:indeterminate::-webkit-progress-value {
+  position: relative;
+  -webkit-animation: win-progress-indeterminate 3s linear infinite;
+}
+progress.win-paused:not(:indeterminate) {
+  animation-name: win-progress-fade-out;
+  animation-duration: 3s;
+  animation-timing-function: cubic-bezier(0.03, 0.76, 0.31, 1);
+  opacity: 0.5;
+}
+progress.win-error::-ms-fill {
+  opacity: 0;
+}
+progress.win-ring:indeterminate::-ms-fill {
+  animation-name: -ms-ring;
+}
+progress.win-ring {
+  width: 20px;
+  height: 20px;
+}
+progress.win-medium.win-ring {
+  width: 40px;
+  height: 40px;
+}
+progress.win-large.win-ring {
+  width: 60px;
+  height: 60px;
+}
+@-webkit-keyframes win-progress-indeterminate {
+  0% {
+    left: 0;
+    width: 25%;
+  }
+  50% {
+    left: calc(75%);
+    width: 25%;
+  }
+  75% {
+    left: calc(100%);
+    width: 0%;
+  }
+  75.1% {
+    left: 0;
+    width: 0%;
+  }
+  100% {
+    left: 0;
+    width: 25%;
+  }
+}
+@keyframes win-progress-fade-out {
+  from {
+    opacity: 1.0;
+  }
+  to {
+    opacity: 0.5;
+  }
+}
+input[type=range] {
+  -webkit-appearance: none;
+  width: 280px;
+  height: 22px;
+  padding-top: 17px;
+  padding-bottom: 32px;
+}
+input[type=range]::-ms-track {
+  height: 2px;
+  border-style: none;
+}
+input[type=range]::-webkit-slider-runnable-track {
+  height: 2px;
+  border-style: none;
+}
+input[type=range]::-moz-range-track {
+  height: 2px;
+  border-style: none;
+}
+input[type=range]::-ms-thumb {
+  width: 24px;
+  height: 8px;
+  border-radius: 4px;
+  border-style: none;
+}
+input[type=range]::-webkit-slider-thumb {
+  -webkit-appearance: none;
+  margin-top: -4px;
+  width: 24px;
+  height: 8px;
+  border-radius: 4px;
+  border-style: none;
+}
+input[type=range]::-moz-range-thumb {
+  width: 24px;
+  height: 8px;
+  border-radius: 4px;
+  border-style: none;
+}
+input[type=range].win-vertical {
+  writing-mode: bt-lr;
+  width: 22px;
+  height: 280px;
+}
+input[type=range].win-vertical::-ms-track {
+  width: 2px;
+  height: auto;
+}
+input[type=range].win-vertical::-ms-thumb {
+  width: 8px;
+  height: 24px;
+}
+input[type=range].win-vertical:lang(ar),
+input[type=range].win-vertical:lang(dv),
+input[type=range].win-vertical:lang(fa),
+input[type=range].win-vertical:lang(he),
+input[type=range].win-vertical:lang(ku-Arab),
+input[type=range].win-vertical:lang(pa-Arab),
+input[type=range].win-vertical:lang(prs),
+input[type=range].win-vertical:lang(ps),
+input[type=range].win-vertical:lang(sd-Arab),
+input[type=range].win-vertical:lang(syr),
+input[type=range].win-vertical:lang(ug),
+input[type=range].win-vertical:lang(ur),
+input[type=range].win-vertical:lang(qps-plocm) {
+  writing-mode: bt-rl;
+}
+a {
+  text-decoration: underline;
+  cursor: pointer;
+  touch-action: manipulation;
+}
+img {
+  border-style: none;
+}
+form {
+  margin: 0px;
+  padding: 0px;
+}
+legend {
+  margin: 0px 0px 10px 0px;
+  padding: 0px;
+  color: inherit;
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 1.333;
+}
+code,
+pre,
+samp {
+  font-family: "Consolas", "Menlo", "Monaco", "Courier New", monospace;
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 1.333;
+}
+caption,
+figcaption,
+small {
+  font-size: 12px;
+  font-weight: 400;
+  line-height: 1.167;
+}
+.win-type-ellipsis {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+h1.win-type-ellipsis,
+.win-type-xx-large.win-type-ellipsis {
+  line-height: 1.4286;
+}
+h2.win-type-ellipsis,
+.win-type-x-large.win-type-ellipsis {
+  line-height: 1.5;
+}
+dt,
+th {
+  font-size: 11px;
+  font-weight: 700;
+  line-height: 1.3636;
+}
+abbr,
+acronym,
+address,
+blockquote,
+cite,
+dl,
+dd,
+li,
+ol,
+p,
+q,
+td,
+tr {
+  font-weight: 300;
+}
+b,
+strong {
+  font-weight: 700;
+}
+em {
+  font-style: italic;
+}
+.win-scrollview {
+  overflow-x: auto;
+  overflow-y: hidden;
+  height: 400px;
+  width: 100%;
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+  margin-top: 0px;
+  margin-bottom: 0px;
+}
+h1 {
+  font-size: 46px;
+  font-weight: 200;
+  line-height: 1.216;
+  letter-spacing: 0px;
+}
+h2 {
+  font-size: 34px;
+  font-weight: 200;
+  line-height: 1.176;
+}
+h3 {
+  font-size: 24px;
+  font-weight: 300;
+  line-height: 1.167;
+}
+h4 {
+  font-size: 20px;
+  font-weight: 400;
+  line-height: 1.2;
+}
+h5 {
+  font-size: 15px;
+  font-weight: 500;
+  line-height: 1.333;
+}
+h6 {
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 1.333;
+}
+.win-listview {
+  overflow: hidden;
+  height: 400px;
+}
+.win-listview .win-surface {
+  overflow: visible;
+}
+.win-listview > .win-viewport.win-horizontal .win-surface {
+  height: 100%;
+}
+.win-listview > .win-viewport.win-vertical .win-surface {
+  width: 100%;
+}
+.win-listview > .win-viewport {
+  position: relative;
+  width: 100%;
+  height: 100%;
+  z-index: 0;
+  -ms-overflow-style: -ms-autohiding-scrollbar;
+  -webkit-overflow-scrolling: touch;
+  white-space: nowrap;
+}
+.win-listview > .win-viewport.win-horizontal {
+  overflow-x: auto;
+  overflow-y: hidden;
+}
+.win-listview > .win-viewport.win-vertical {
+  overflow-x: hidden;
+  overflow-y: auto;
+}
+.win-listview .win-itemscontainer {
+  overflow: hidden;
+}
+.win-listview .win-itemscontainer-padder {
+  width: 0;
+  height: 0;
+  margin: 0;
+  padding: 0;
+  border: 0;
+  overflow: hidden;
+}
+.win-listview > .win-horizontal .win-container {
+  margin: 10px 5px 0px 5px;
+}
+.win-listview > .win-vertical .win-container {
+  margin: 10px 24px 0px 7px;
+}
+.win-listview.win-rtl > .win-vertical .win-container {
+  margin: 10px 7px 0px 24px;
+}
+.win-listview .win-container,
+.win-listview .win-itembox,
+.win-itemcontainer.win-container,
+.win-itemcontainer .win-itembox {
+  cursor: default;
+  z-index: 0;
+}
+.win-listview .win-container {
+  touch-action: pan-x pan-y pinch-zoom;
+}
+.win-semanticzoom .win-listview > .win-viewport * {
+  touch-action: auto;
+}
+.win-semanticzoom .win-listview > .win-viewport.win-zooming-x {
+  overflow-x: visible;
+}
+.win-semanticzoom .win-listview > .win-viewport.win-zooming-y {
+  overflow-y: visible;
+}
+.win-listview .win-itembox,
+.win-itemcontainer .win-itembox {
+  width: 100%;
+  height: 100%;
+}
+.win-listview .win-item,
+.win-itemcontainer .win-item {
+  z-index: 1;
+}
+.win-listview .win-item,
+.win-itemcontainer .win-item {
+  overflow: hidden;
+  position: relative;
+}
+.win-listview > .win-vertical .win-item {
+  width: 100%;
+}
+.win-listview .win-item:focus,
+.win-itemcontainer .win-item:focus {
+  outline-style: none;
+}
+.win-listview .win-focusedoutline,
+.win-itemcontainer .win-focusedoutline {
+  width: calc(100% - 4px);
+  height: calc(100% - 4px);
+  left: 2px;
+  top: 2px;
+  position: absolute;
+  z-index: 5;
+  pointer-events: none;
+}
+.win-container.win-selected .win-selectionborder {
+  border-width: 2px;
+  border-style: solid;
+}
+html.win-hoverable .win-container.win-selected:hover .win-selectionborder {
+  border-width: 2px;
+  border-style: solid;
+}
+html.win-hoverable .win-listview .win-itembox:hover::before,
+html.win-hoverable .win-itemcontainer .win-itembox:hover::before {
+  position: absolute;
+  left: 0px;
+  top: 0px;
+  content: "";
+  width: calc(100% - 4px);
+  height: calc(100% - 4px);
+  pointer-events: none;
+  border-style: solid;
+  border-width: 2px;
+  z-index: 3;
+}
+html.win-hoverable .win-listview.win-selectionstylefilled .win-itembox:hover::before,
+html.win-hoverable .win-itemcontainer.win-selectionstylefilled .win-itembox:hover::before,
+html.win-hoverable .win-listview .win-itembox.win-selected:hover::before,
+html.win-hoverable .win-itemcontainer.win-itembox.win-selected:hover::before,
+html.win-hoverable .win-itemcontainer.win-itembox.win-selected:hover::before {
+  display: none;
+}
+.win-listview .win-groupheader {
+  padding: 10px 10px 10px 2px;
+  overflow: hidden;
+  outline-width: 0.01px;
+  outline-style: none;
+  float: left;
+  font-size: 34px;
+  font-weight: 200;
+  line-height: 1.176;
+}
+.win-listview .win-groupheadercontainer {
+  z-index: 1;
+  touch-action: pan-x pan-y pinch-zoom;
+  overflow: hidden;
+}
+.win-listview .win-horizontal .win-headercontainer,
+.win-listview .win-horizontal .win-footercontainer {
+  height: 100%;
+  display: inline-block;
+  overflow: hidden;
+  white-space: normal;
+}
+.win-listview .win-vertical .win-headercontainer,
+.win-listview .win-vertical .win-footercontainer {
+  width: 100%;
+  display: block;
+  overflow: hidden;
+  white-space: normal;
+}
+.win-listview .win-groupheader.win-focused {
+  outline-style: dotted;
+}
+.win-listview.win-rtl .win-groupheader {
+  padding-left: 10px;
+  padding-right: 2px;
+  float: right;
+}
+.win-listview.win-groups .win-horizontal .win-groupleader {
+  margin-left: 70px;
+}
+.win-listview.win-groups.win-rtl .win-horizontal .win-groupleader {
+  margin-left: 0;
+  margin-right: 70px;
+}
+.win-listview.win-groups .win-vertical .win-listlayout .win-groupleader,
+.win-listview.win-groups .win-vertical .win-gridlayout .win-groupleader {
+  margin-top: 70px;
+}
+.win-listview.win-groups > .win-vertical .win-surface.win-listlayout,
+.win-listview.win-groups > .win-vertical .win-surface.win-gridlayout {
+  margin-top: -65px;
+}
+.win-listview.win-groups > .win-horizontal .win-surface {
+  margin-left: -70px;
+}
+.win-listview.win-groups.win-rtl > .win-horizontal .win-surface {
+  margin-left: 0;
+  margin-right: -70px;
+}
+.win-listview .win-surface {
+  -webkit-margin-collapse: separate;
+  white-space: normal;
+}
+.win-surface ._win-proxy {
+  position: relative;
+  overflow: hidden;
+  width: 0;
+  height: 0;
+  touch-action: none;
+}
+.win-selectionborder {
+  position: absolute;
+  opacity: inherit;
+  z-index: 2;
+  pointer-events: none;
+}
+.win-container.win-selected .win-selectionborder {
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+}
+.win-selectionbackground {
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  z-index: 0;
+}
+.win-selectioncheckmarkbackground {
+  position: absolute;
+  top: 2px;
+  right: 2px;
+  width: 14px;
+  height: 11px;
+  margin: 0;
+  padding: 0;
+  border-left-width: 2px;
+  border-right-width: 2px;
+  border-top-width: 4px;
+  border-bottom-width: 3px;
+  border-style: solid;
+  z-index: 3;
+  display: none;
+}
+.win-listview.win-rtl .win-selectioncheckmarkbackground,
+.win-itemcontainer.win-rtl .win-selectioncheckmarkbackground {
+  left: 2px;
+  right: auto;
+}
+.win-selectionmode.win-itemcontainer .win-selectioncheckmarkbackground,
+.win-selectionmode.win-itemcontainer.win-selectionmode .win-selectioncheckmark,
+.win-selectionmode .win-itemcontainer .win-selectioncheckmarkbackground,
+.win-selectionmode .win-itemcontainer.win-selectionmode .win-selectioncheckmark,
+.win-listview .win-selectionmode .win-selectioncheckmarkbackground,
+.win-listview .win-selectionmode .win-selectioncheckmark {
+  display: block;
+}
+.win-selectioncheckmark {
+  position: absolute;
+  margin: 0;
+  padding: 2px;
+  right: 1px;
+  top: 1px;
+  font-family: "Segoe MDL2 Assets", "Symbols";
+  font-size: 14px;
+  z-index: 4;
+  line-height: 1;
+  display: none;
+}
+.win-rtl .win-selectioncheckmark {
+  right: auto;
+  left: 0px;
+}
+.win-selectionstylefilled.win-container,
+.win-selectionstylefilled .win-container {
+  overflow: hidden;
+}
+.win-selectionmode .win-itemcontainer.win-container .win-itembox::after,
+.win-selectionmode.win-itemcontainer.win-container .win-itembox::after,
+.win-listview .win-surface.win-selectionmode .win-itembox::after {
+  content: "";
+  position: absolute;
+  width: 18px;
+  height: 18px;
+  pointer-events: none;
+  right: 2px;
+  top: 2px;
+  z-index: 3;
+}
+.win-rtl .win-selectionmode .win-itemcontainer.win-container .win-itembox::after,
+.win-itemcontainer.win-rtl.win-selectionmode.win-container .win-itembox::after,
+.win-listview.win-rtl .win-surface.win-selectionmode .win-itembox::after {
+  right: auto;
+  left: 2px;
+}
+.win-listview.win-selectionstylefilled .win-surface.win-selectionmode .win-item {
+  transition: transform 250ms cubic-bezier(0.17, 0.79, 0.215, 1.0025);
+  -webkit-transition: -webkit-transform 250ms cubic-bezier(0.17, 0.79, 0.215, 1.0025);
+  transform: translate(40px, 0px);
+  -webkit-transform: translate(40px, 0px);
+}
+.win-listview.win-rtl.win-selectionstylefilled .win-surface.win-selectionmode .win-item {
+  transition: transform 250ms cubic-bezier(0.17, 0.79, 0.215, 1.0025);
+  -webkit-transition: -webkit-transform 250ms cubic-bezier(0.17, 0.79, 0.215, 1.0025);
+  transform: translate(-40px, 0px);
+  -webkit-transform: translate(-40px, 0px);
+}
+.win-listview.win-selectionstylefilled .win-surface.win-hidingselectionmode .win-item {
+  transition: transform 250ms cubic-bezier(0.17, 0.79, 0.215, 1.0025);
+  -webkit-transition: -webkit-transform 250ms cubic-bezier(0.17, 0.79, 0.215, 1.0025);
+  transform: none;
+  -webkit-transform: none;
+}
+.win-listview.win-rtl.win-selectionstylefilled .win-surface.win-hideselectionmode .win-item {
+  transition: transform 250ms cubic-bezier(0.17, 0.79, 0.215, 1.0025);
+  -webkit-transition: -webkit-transform 250ms cubic-bezier(0.17, 0.79, 0.215, 1.0025);
+  transform: none;
+  -webkit-transform: none;
+}
+.win-listview.win-selectionstylefilled .win-surface.win-selectionmode .win-itembox::after {
+  left: 12px;
+  right: auto;
+  top: 50%;
+  margin-top: -9px;
+  display: block;
+  border: 2px solid;
+  width: 16px;
+  height: 16px;
+}
+.win-listview.win-selectionstylefilled.win-rtl .win-surface.win-selectionmode .win-itembox::after {
+  left: auto;
+  right: 12px;
+}
+.win-listview.win-selectionstylefilled .win-surface.win-selectionmode .win-selectioncheckmarkbackground {
+  left: 12px;
+  top: 50%;
+  margin-top: -9px;
+  display: block;
+  border: 2px solid;
+  width: 16px;
+  height: 16px;
+}
+.win-listview.win-selectionstylefilled.win-rtl .win-surface.win-selectionmode .win-selectioncheckmarkbackground {
+  left: auto;
+  right: 12px;
+}
+.win-listview.win-selectionstylefilled .win-surface.win-selectionmode .win-selectioncheckmark {
+  left: 13px;
+  top: 50%;
+  margin-top: -8px;
+  display: block;
+  width: 14px;
+  height: 14px;
+}
+.win-listview.win-selectionstylefilled.win-rtl .win-surface.win-selectionmode .win-selectioncheckmark {
+  left: 0;
+  right: 10px;
+}
+.win-selectionmode .win-itemcontainer.win-selectionstylefilled.win-container .win-itembox.win-selected::after,
+.win-itemcontainer.win-selectionmode.win-selectionstylefilled.win-container .win-itembox.win-selected::after,
+.win-listview.win-selectionstylefilled .win-surface.win-selectionmode .win-itembox.win-nonselectable::after,
+.win-listview .win-surface.win-selectionmode .win-itembox.win-selected::after {
+  display: none;
+}
+.win-listview .win-progress {
+  left: 50%;
+  top: 50%;
+  width: 60px;
+  height: 60px;
+  margin-left: -30px;
+  margin-top: -30px;
+  z-index: 1;
+  position: absolute;
+}
+.win-listview .win-progress::-ms-fill {
+  animation-name: -ms-ring;
+}
+.win-listview .win-itemsblock {
+  overflow: hidden;
+}
+.win-listview .win-surface.win-nocssgrid.win-gridlayout,
+.win-listview .win-horizontal .win-nocssgrid.win-listlayout,
+.win-listview .win-vertical .win-nocssgrid.win-listlayout.win-headerpositionleft {
+  display: -ms-inline-flexbox;
+  display: -webkit-inline-flex;
+  display: inline-flex;
+  vertical-align: top;
+}
+.win-listview .win-horizontal .win-surface.win-nocssgrid {
+  -ms-flex-direction: column;
+  -webkit-flex-direction: column;
+  flex-direction: column;
+  -ms-flex-wrap: wrap;
+  -webkit-flex-wrap: wrap;
+  flex-wrap: wrap;
+  -ms-flex-line-pack: start;
+  -webkit-align-content: flex-start;
+  align-content: flex-start;
+}
+.win-listview .win-vertical .win-surface.win-nocssgrid {
+  -ms-flex-direction: row;
+  -webkit-flex-direction: row;
+  flex-direction: row;
+  -ms-flex-wrap: wrap;
+  -webkit-flex-wrap: wrap;
+  flex-wrap: wrap;
+  -ms-flex-line-pack: start;
+  -webkit-align-content: flex-start;
+  align-content: flex-start;
+}
+.win-listview .win-vertical .win-structuralnodes.win-single-itemsblock.win-listlayout .win-itemscontainer.win-laidout,
+.win-listview .win-horizontal .win-structuralnodes.win-single-itemsblock.win-listlayout .win-itemscontainer.win-laidout,
+.win-listview .win-vertical .win-structuralnodes.win-single-itemsblock.win-gridlayout .win-uniformgridlayout.win-itemscontainer.win-laidout,
+.win-listview .win-horizontal .win-structuralnodes.win-single-itemsblock.win-gridlayout .win-uniformgridlayout.win-itemscontainer.win-laidout {
+  display: block;
+}
+.win-listview .win-vertical .win-structuralnodes.win-single-itemsblock.win-listlayout .win-itemscontainer.win-laidout .win-itemscontainer-padder,
+.win-listview .win-horizontal .win-structuralnodes.win-single-itemsblock.win-listlayout .win-itemscontainer.win-laidout .win-itemscontainer-padder,
+.win-listview .win-vertical .win-structuralnodes.win-single-itemsblock.win-gridlayout .win-uniformgridlayout.win-itemscontainer.win-laidout .win-itemscontainer-padder,
+.win-listview .win-horizontal .win-structuralnodes.win-single-itemsblock.win-gridlayout .win-uniformgridlayout.win-itemscontainer.win-laidout .win-itemscontainer-padder {
+  height: 0;
+  width: 0;
+}
+.win-listview.win-groups .win-vertical .win-listlayout.win-headerpositionleft .win-itemscontainer,
+.win-listview.win-groups .win-vertical .win-listlayout.win-headerpositionleft .win-groupheadercontainer,
+.win-listview.win-groups .win-horizontal .win-listlayout .win-itemscontainer,
+.win-listview.win-groups .win-horizontal .win-listlayout .win-groupheadercontainer {
+  display: none;
+}
+.win-listview.win-groups .win-vertical .win-listlayout.win-headerpositionleft .win-itemscontainer.win-laidout,
+.win-listview.win-groups .win-vertical .win-listlayout.win-headerpositionleft .win-groupheadercontainer.win-laidout,
+.win-listview.win-groups .win-horizontal .win-listlayout .win-groupheadercontainer.win-laidout {
+  display: block;
+}
+.win-listview .win-listlayout .win-itemscontainer {
+  overflow: visible;
+}
+.win-listview .win-listlayout .win-itemsblock {
+  padding-bottom: 4px;
+  margin-bottom: -4px;
+}
+.win-listview > .win-vertical .win-listlayout.win-headerpositiontop .win-groupheader {
+  float: none;
+}
+.win-listview > .win-vertical .win-surface.win-listlayout {
+  margin-bottom: 5px;
+}
+.win-listview .win-vertical .win-listlayout.win-headerpositionleft.win-surface {
+  display: -ms-inline-grid;
+  -ms-grid-columns: auto 1fr;
+  -ms-grid-rows: auto;
+}
+.win-listview .win-vertical .win-listlayout.win-headerpositionleft .win-groupheadercontainer {
+  -ms-grid-column: 1;
+}
+.win-listview .win-vertical .win-listlayout.win-headerpositionleft .win-itemscontainer {
+  -ms-grid-column: 2;
+}
+.win-listview > .win-horizontal .win-surface.win-listlayout {
+  display: -ms-inline-grid;
+  -ms-grid-columns: auto;
+  -ms-grid-rows: auto;
+  vertical-align: top;
+}
+.win-listview .win-horizontal .win-listlayout .win-itemsblock {
+  height: 100%;
+}
+.win-listview .win-horizontal .win-listlayout .win-itemscontainer {
+  margin-bottom: 24px;
+}
+.win-listview .win-horizontal .win-listlayout .win-container {
+  height: calc(100% - 10px);
+}
+.win-listview > .win-horizontal .win-surface.win-listlayout.win-headerpositiontop {
+  -ms-grid-rows: auto 1fr;
+}
+.win-listview .win-horizontal .win-listlayout.win-headerpositiontop .win-groupheadercontainer {
+  -ms-grid-row: 1;
+}
+.win-listview .win-horizontal .win-listlayout.win-headerpositiontop .win-itemscontainer {
+  -ms-grid-row: 2;
+}
+.win-listview .win-gridlayout.win-surface {
+  display: -ms-inline-grid;
+  vertical-align: top;
+}
+.win-listview .win-gridlayout .win-container {
+  margin: 5px;
+}
+.win-listview .win-vertical .win-gridlayout.win-headerpositionleft .win-groupheadercontainer,
+.win-listview .win-vertical .win-gridlayout.win-headerpositiontop .win-groupheadercontainer {
+  -ms-grid-column: 1;
+}
+.win-listview.win-groups .win-gridlayout .win-itemscontainer,
+.win-listview.win-groups .win-gridlayout .win-groupheadercontainer {
+  display: none;
+}
+.win-listview.win-groups .win-gridlayout .win-groupheadercontainer.win-laidout {
+  display: block;
+}
+.win-listview .win-horizontal .win-gridlayout.win-headerpositiontop.win-surface {
+  -ms-grid-columns: auto;
+  -ms-grid-rows: auto 1fr;
+}
+.win-listview .win-horizontal .win-gridlayout.win-headerpositiontop .win-groupheadercontainer {
+  -ms-grid-row: 1;
+}
+.win-listview .win-horizontal .win-gridlayout.win-headerpositiontop .win-itemscontainer {
+  -ms-grid-row: 2;
+}
+.win-listview .win-horizontal .win-gridlayout.win-headerpositionleft.win-surface {
+  -ms-grid-columns: auto;
+  -ms-grid-rows: auto;
+}
+.win-listview .win-horizontal .win-gridlayout.win-headerpositionleft .win-groupheadercontainer {
+  -ms-grid-row: 1;
+}
+.win-listview .win-horizontal .win-gridlayout.win-headerpositionleft .win-itemscontainer {
+  -ms-grid-row: 1;
+}
+.win-listview .win-vertical .win-gridlayout.win-headerpositiontop.win-surface {
+  -ms-grid-columns: auto;
+  -ms-grid-rows: auto;
+}
+.win-listview .win-vertical .win-gridlayout.win-headerpositiontop .win-itemscontainer {
+  -ms-grid-column: 1;
+}
+.win-listview .win-vertical .win-gridlayout.win-headerpositionleft.win-surface {
+  -ms-grid-columns: auto 1fr;
+  -ms-grid-rows: auto;
+}
+.win-listview .win-vertical .win-gridlayout.win-headerpositionleft .win-itemscontainer {
+  -ms-grid-column: 2;
+}
+.win-listview .win-gridlayout.win-structuralnodes .win-uniformgridlayout.win-itemscontainer.win-laidout {
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  -ms-flex-direction: row;
+  -webkit-flex-direction: row;
+  flex-direction: row;
+}
+.win-listview .win-horizontal .win-listlayout .win-itemscontainer,
+.win-listview.win-groups .win-horizontal .win-listlayout .win-itemscontainer.win-laidout,
+.win-listview .win-horizontal .win-listlayout .win-itemsblock,
+.win-listview .win-horizontal .win-gridlayout .win-uniformgridlayout.win-itemscontainer.win-laidout,
+.win-listview .win-horizontal .win-gridlayout .win-uniformgridlayout .win-itemsblock {
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  -ms-flex-direction: column;
+  -webkit-flex-direction: column;
+  flex-direction: column;
+  -ms-flex-wrap: wrap;
+  -webkit-flex-wrap: wrap;
+  flex-wrap: wrap;
+  -ms-flex-line-pack: start;
+  -webkit-align-content: flex-start;
+  align-content: flex-start;
+}
+.win-listview .win-horizontal .win-itemscontainer-padder {
+  height: 100%;
+}
+.win-listview .win-horizontal .win-gridlayout .win-uniformgridlayout .win-itemsblock {
+  height: 100%;
+}
+.win-listview .win-horizontal .win-gridlayout .win-cellspanninggridlayout.win-itemscontainer.win-laidout {
+  display: -ms-grid;
+}
+.win-listview .win-vertical .win-gridlayout.win-structuralnodes .win-uniformgridlayout.win-itemscontainer.win-laidout {
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  -ms-flex-direction: column;
+  -webkit-flex-direction: column;
+  flex-direction: column;
+}
+.win-listview .win-vertical .win-gridlayout .win-uniformgridlayout.win-itemscontainer.win-laidout,
+.win-listview .win-vertical .win-gridlayout .win-uniformgridlayout .win-itemsblock {
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  -ms-flex-direction: row;
+  -webkit-flex-direction: row;
+  flex-direction: row;
+  -ms-flex-wrap: wrap;
+  -webkit-flex-wrap: wrap;
+  flex-wrap: wrap;
+  -ms-flex-line-pack: start;
+  -webkit-align-content: flex-start;
+  align-content: flex-start;
+}
+.win-listview .win-vertical .win-gridlayout .win-uniformgridlayout .win-itemsblock {
+  width: 100%;
+}
+.win-listview .win-cellspanninggridlayout .win-container.win-laidout {
+  display: block;
+}
+.win-listview .win-cellspanninggridlayout .win-container {
+  display: none;
+}
+.win-listview .win-itembox {
+  position: relative;
+}
+.win-listview.win-dragover .win-itembox {
+  transform: scale(0.86);
+  -webkit-transform: scale(0.86);
+}
+.win-listview .win-itembox.win-dragsource,
+.win-itemcontainer .win-itembox.win-dragsource {
+  opacity: 0.5;
+  transition: opacity cubic-bezier(0.1, 0.9, 0.2, 1) 167ms, transform cubic-bezier(0.1, 0.9, 0.2, 1) 220ms;
+  -webkit-transition: opacity cubic-bezier(0.1, 0.9, 0.2, 1) 167ms, transform cubic-bezier(0.1, 0.9, 0.2, 1) 220ms;
+}
+.win-listview.win-dragover .win-itembox.win-dragsource {
+  opacity: 0;
+  transition: none;
+  -webkit-transition: none;
+}
+html.win-hoverable .win-listview.win-dragover .win-container:hover {
+  outline: none;
+}
+.win-listview .win-itembox {
+  transition: transform cubic-bezier(0.1, 0.9, 0.2, 1) 220ms;
+  -webkit-transition: -webkit-transform cubic-bezier(0.1, 0.9, 0.2, 1) 220ms;
+}
+.win-listview.win-groups > .win-vertical .win-surface.win-listlayout.win-headerpositionleft {
+  margin-left: 70px;
+}
+.win-listview.win-groups.win-rtl > .win-vertical .win-surface.win-listlayout.win-headerpositionleft {
+  margin-left: 0px;
+  margin-right: 70px;
+}
+.win-listview > .win-horizontal .win-surface.win-listlayout {
+  margin-left: 70px;
+}
+.win-listview.win-rtl > .win-horizontal .win-surface.win-listlayout {
+  margin-left: 0px;
+  margin-right: 70px;
+}
+.win-listview .win-vertical .win-gridlayout.win-surface {
+  margin-left: 20px;
+}
+.win-listview.win-rtl .win-vertical .win-gridlayout.win-surface {
+  margin-left: 0px;
+  margin-right: 20px;
+}
+.win-itemcontainer .win-itembox,
+.win-itemcontainer.win-container {
+  position: relative;
+}
+.win-itemcontainer {
+  touch-action: pan-x pan-y pinch-zoom;
+}
+html.win-hoverable .win-listview .win-itembox:hover::before,
+html.win-hoverable .win-itemcontainer .win-itembox:hover::before {
+  opacity: 0.4;
+}
+html.win-hoverable .win-listview .win-pressed .win-itembox:hover::before,
+html.win-hoverable .win-itemcontainer .win-pressed .win-itembox:hover::before,
+html.win-hoverable .win-listview .win-pressed.win-itembox:hover::before,
+html.win-hoverable .win-itemcontainer .win-pressed.win-itembox:hover::before {
+  opacity: 0.6;
+}
+html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover,
+html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover,
+html.win-hoverable .win-selectionstylefilled .win-itemcontainer.win-container:hover {
+  outline: none;
+}
+.win-selectionstylefilled.win-itemcontainer .win-itembox,
+.win-selectionstylefilled .win-itemcontainer .win-itembox,
+.win-listview.win-selectionstylefilled .win-itembox {
+  background-color: transparent;
+}
+.win-listview.win-selectionstylefilled .win-container.win-selected .win-selectionborder,
+.win-itemcontainer.win-selectionstylefilled.win-container.win-selected .win-selectionborder {
+  border-color: transparent;
+}
+.win-listview.win-selectionstylefilled .win-surface.win-selectionmode .win-itembox::after {
+  background-color: transparent;
+}
+.win-listview.win-selectionstylefilled .win-selectioncheckmarkbackground,
+.win-itemcontainer.win-selectionstylefilled .win-selectioncheckmarkbackground {
+  border-color: transparent;
+}
+.win-listview.win-selectionstylefilled .win-selected a,
+.win-listview.win-selectionstylefilled .win-selected progress,
+.win-listview.win-selectionstylefilled .win-selected .win-rating .win-star.win-full,
+.win-itemcontainer.win-selectionstylefilled.win-selected a,
+.win-itemcontainer.win-selectionstylefilled.win-selected progress,
+.win-itemcontainer.win-selectionstylefilled.win-selected .win-rating .win-star.win-full {
+  color: #ffffff;
+}
+.win-listview.win-selectionstylefilled .win-selected.win-selected a:hover:active,
+.win-itemcontainer.win-selectionstylefilled.win-selected.win-selected a:hover:active {
+  color: rgba(255, 255, 255, 0.6);
+}
+html.win-hoverable .win-listview.win-selectionstylefilled .win-selected a:hover,
+html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-selected a:hover {
+  color: rgba(255, 255, 255, 0.8);
+}
+.win-listview.win-selectionstylefilled .win-selected button,
+.win-listview.win-selectionstylefilled .win-selected input[type=button],
+.win-listview.win-selectionstylefilled .win-selected input[type=reset],
+.win-listview.win-selectionstylefilled .win-selected input[type=text],
+.win-listview.win-selectionstylefilled .win-selected input[type=password],
+.win-listview.win-selectionstylefilled .win-selected input[type=email],
+.win-listview.win-selectionstylefilled .win-selected input[type=number],
+.win-listview.win-selectionstylefilled .win-selected input[type=tel],
+.win-listview.win-selectionstylefilled .win-selected input[type=url],
+.win-listview.win-selectionstylefilled .win-selected input[type=search],
+.win-listview.win-selectionstylefilled .win-selected input::-ms-check,
+.win-listview.win-selectionstylefilled .win-selected textarea,
+.win-listview.win-selectionstylefilled .win-selected .win-textarea,
+.win-listview.win-selectionstylefilled .win-selected select,
+.win-itemcontainer.win-selectionstylefilled.win-selected button,
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=button],
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=reset],
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=text],
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=password],
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=email],
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=number],
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=tel],
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=url],
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=search],
+.win-itemcontainer.win-selectionstylefilled.win-selected input::-ms-check,
+.win-itemcontainer.win-selectionstylefilled.win-selected textarea,
+.win-itemcontainer.win-selectionstylefilled.win-selected .win-textarea,
+.win-itemcontainer.win-selectionstylefilled.win-selected select {
+  background-clip: border-box;
+  background-color: rgba(255, 255, 255, 0.8);
+  border-color: transparent;
+  color: #000000;
+}
+.win-listview.win-selectionstylefilled .win-selected button[type=submit],
+.win-listview.win-selectionstylefilled .win-selected input[type=submit],
+.win-itemcontainer.win-selectionstylefilled.win-selected button[type=submit],
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=submit] {
+  border-color: #ffffff;
+}
+.win-listview.win-selectionstylefilled .win-selected input[type=range]::-ms-fill-lower,
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=range]::-ms-fill-lower {
+  background-color: #ffffff;
+}
+.win-listview.win-selectionstylefilled .win-selected input[type=range]::-ms-thumb,
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=range]::-ms-thumb {
+  background-color: #000000;
+}
+.win-listview.win-selectionstylefilled .win-selected input[type=range]::-ms-fill-upper,
+.win-listview.win-selectionstylefilled .win-selected progress,
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=range]::-ms-fill-upper,
+.win-itemcontainer.win-selectionstylefilled.win-selected progress {
+  background-color: rgba(255, 255, 255, 0.16);
+}
+.win-listview.win-selectionstylefilled .win-selected progress:indeterminate,
+.win-itemcontainer.win-selectionstylefilled.win-selected progress:indeterminate {
+  background-color: transparent;
+}
+.win-listview.win-selectionstylefilled .win-selected .win-rating .win-star.win-empty,
+.win-itemcontainer.win-selectionstylefilled.win-selected .win-rating .win-star.win-empty {
+  color: rgba(255, 255, 255, 0.16);
+}
+.win-listview .win-viewport {
+  outline: none;
+}
+@media (-ms-high-contrast) {
+  .win-listview .win-groupheader {
+    color: WindowText;
+  }
+  .win-selectioncheckmark {
+    color: HighlightText;
+  }
+  .win-listview .win-focusedoutline,
+  .win-listview .win-groupheader,
+  .win-itemcontainer .win-focusedoutline {
+    outline-color: WindowText;
+  }
+  .win-listview.win-selectionstylefilled .win-itembox,
+  .win-itemcontainer.win-selectionstylefilled .win-itembox {
+    background-color: Window;
+    color: WindowText;
+  }
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover .win-itembox,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover .win-itembox {
+    background-color: Highlight;
+    color: HighlightText;
+  }
+  .win-listview.win-selectionstylefilled .win-container.win-selected .win-itembox,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container.win-selected:hover .win-itembox,
+  .win-itemcontainer.win-selectionstylefilled.win-container.win-selected .win-itembox,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container.win-selected:hover .win-itembox {
+    background-color: Highlight;
+    color: HighlightText;
+  }
+  .win-listview:not(.win-selectionstylefilled) .win-container.win-selected .win-selectionborder,
+  .win-itemcontainer:not(.win-selectionstylefilled).win-container.win-selected .win-selectionborder {
+    border-color: Highlight;
+  }
+  .win-listview.win-selectionstylefilled .win-container.win-selected .win-selectionborder,
+  .win-itemcontainer.win-selectionstylefilled.win-container.win-selected .win-selectionborder {
+    border-color: transparent;
+  }
+  html.win-hoverable .win-listview:not(.win-selectionstylefilled) .win-container.win-selected:hover .win-selectionborder,
+  html.win-hoverable .win-itemcontainer:not(.win-selectionstylefilled).win-container.win-selected:hover .win-selectionborder {
+    border-color: Highlight;
+  }
+  .win-listview.win-selectionstylefilled .win-selected .win-selectionbackground,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-selected:hover .win-selectionbackground,
+  .win-itemcontainer.win-selectionstylefilled.win-selected .win-selectionbackground,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-selected:hover .win-selectionbackground {
+    background-color: Highlight;
+    color: HighlightText;
+  }
+  .win-listview.win-selectionstylefilled .win-selectioncheckmarkbackground,
+  .win-itemcontainer.win-selectionstylefilled .win-selectioncheckmarkbackground {
+    border-color: transparent;
+  }
+  .win-listview.win-selectionstylefilled .win-selected a,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover a,
+  .win-listview.win-selectionstylefilled .win-selected progress,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover progress,
+  .win-listview.win-selectionstylefilled .win-selected .win-rating .win-star:after,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover .win-rating .win-star:after,
+  .win-itemcontainer.win-selectionstylefilled.win-selected a,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover a,
+  .win-itemcontainer.win-selectionstylefilled.win-selected progress,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover progress,
+  .win-itemcontainer.win-selectionstylefilled.win-selected .win-rating .win-star:after,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover .win-rating .win-star:after {
+    color: HighlightText;
+  }
+  .win-listview.win-selectionstylefilled .win-selected input,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover input,
+  .win-listview.win-selectionstylefilled .win-selected input::-ms-check,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover input::-ms-check,
+  .win-listview.win-selectionstylefilled .win-selected input::-ms-value,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover input::-ms-value,
+  .win-listview.win-selectionstylefilled .win-selected input::-ms-track,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover input::-ms-track,
+  .win-listview.win-selectionstylefilled .win-selected button,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover button,
+  .win-listview.win-selectionstylefilled .win-selected progress,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover progress,
+  .win-listview.win-selectionstylefilled .win-selected progress::-ms-fill,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover progress::-ms-fill,
+  .win-listview.win-selectionstylefilled .win-selected select,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover select,
+  .win-listview.win-selectionstylefilled .win-selected textarea,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover textarea,
+  .win-listview.win-selectionstylefilled.win-selected input,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover input,
+  .win-itemcontainer.win-selectionstylefilled.win-selected input::-ms-check,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover input::-ms-check,
+  .win-itemcontainer.win-selectionstylefilled.win-selected input::-ms-value,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover input::-ms-value,
+  .win-itemcontainer.win-selectionstylefilled.win-selected input::-ms-track,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover input::-ms-track,
+  .win-itemcontainer.win-selectionstylefilled.win-selected button,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover button,
+  .win-itemcontainer.win-selectionstylefilled.win-selected progress,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover progress,
+  .win-itemcontainer.win-selectionstylefilled.win-selected progress::-ms-fill,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover progress::-ms-fill,
+  .win-itemcontainer.win-selectionstylefilled.win-selected select,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover select,
+  .win-itemcontainer.win-selectionstylefilled.win-selected textarea,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover textarea {
+    border-color: HighlightText;
+  }
+  .win-listview.win-selectionstylefilled .win-selected input[type=range]::-ms-fill-lower,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover input[type=range]::-ms-fill-lower,
+  .win-listview.win-selectionstylefilled .win-selected progress::-ms-fill,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover progress::-ms-fill,
+  .win-itemcontainer.win-selectionstylefilled.win-selected input[type=range]::-ms-fill-lower,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover input[type=range]::-ms-fill-lower,
+  .win-itemcontainer.win-selectionstylefilled.win-selected progress::-ms-fill,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover progress::-ms-fill {
+    background-color: HighlightText;
+  }
+  .win-listview.win-selectionstylefilled .win-selected input[type=range]::-ms-fill-upper,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover input[type=range]::-ms-fill-upper,
+  .win-listview.win-selectionstylefilled .win-selected progress,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover progress,
+  .win-itemcontainer.win-selectionstylefilled.win-selected input[type=range]::-ms-fill-upper,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover input[type=range]::-ms-fill-upper,
+  .win-itemcontainer.win-selectionstylefilled.win-selected progress,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover progress {
+    background-color: Highlight;
+  }
+  .win-listview.win-selectionstylefilled .win-selected .win-rating .win-star.win-full:before,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover .win-rating .win-star.win-full:before,
+  .win-itemcontainer.win-selectionstylefilled.win-selected .win-rating .win-star.win-full:before,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover .win-rating .win-star.win-full:before {
+    color: ButtonFace;
+  }
+  .win-listview.win-selectionstylefilled .win-selected .win-rating .win-star.win-empty:before,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover .win-rating .win-star.win-empty:before,
+  .win-itemcontainer.win-selectionstylefilled.win-selected .win-rating .win-star.win-empty:before,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover .win-rating .win-star.win-empty:before {
+    color: Highlight;
+  }
+  html.win-hoverable .win-listview .win-container:hover,
+  html.win-hoverable .win-itemcontainer.win-container:hover {
+    outline: Highlight solid 3px;
+  }
+}
+.win-flipview {
+  overflow: hidden;
+  height: 400px;
+}
+.win-flipview .win-surface {
+  -ms-scroll-chaining: none;
+}
+.win-flipview .win-navleft {
+  left: 0%;
+  top: 50%;
+  margin-top: -19px;
+}
+.win-flipview .win-navright {
+  left: 100%;
+  top: 50%;
+  margin-left: -20px;
+  margin-top: -19px;
+}
+.win-flipview .win-navtop {
+  left: 50%;
+  top: 0%;
+  margin-left: -35px;
+}
+.win-flipview .win-navbottom {
+  left: 50%;
+  top: 100%;
+  margin-left: -35px;
+  margin-top: -36px;
+}
+.win-flipview .win-navbutton {
+  border: none;
+  width: 20px;
+  height: 36px;
+  z-index: 1;
+  position: absolute;
+  font-family: "Segoe MDL2 Assets", "Symbols";
+  font-size: 16px;
+  padding: 0;
+  min-width: 0;
+}
+.win-flipview .win-item,
+.win-flipview .win-item > .win-template {
+  height: 100%;
+  width: 100%;
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  -ms-flex-align: center;
+  -webkit-align-items: center;
+  align-items: center;
+  -ms-flex-pack: center;
+  -webkit-justify-content: center;
+  justify-content: center;
+}
+@media (-ms-high-contrast) {
+  .win-flipview .win-navbottom {
+    left: 50%;
+    top: 100%;
+    margin-left: -35px;
+    margin-top: -35px;
+  }
+  .win-flipview .win-navbutton {
+    background-color: ButtonFace;
+    color: ButtonText;
+    border: 2px solid ButtonText;
+    width: 65px;
+    height: 35px;
+  }
+  .win-flipview .win-navbutton.win-navbutton:hover:active,
+  .win-flipview .win-navbutton.win-navbutton:active {
+    background-color: ButtonText;
+    color: ButtonFace;
+  }
+  .win-flipview .win-navright {
+    margin-left: -65px;
+  }
+  html.win-hoverable .win-flipview .win-navbutton:hover {
+    background-color: Highlight;
+    color: HighlightText;
+  }
+}
+.win-datepicker {
+  display: -ms-inline-flexbox;
+  display: -webkit-inline-flex;
+  display: inline-flex;
+  height: auto;
+  width: auto;
+}
+.win-datepicker select {
+  min-width: 80px;
+  margin-top: 4px;
+  margin-bottom: 4px;
+}
+.win-datepicker .win-datepicker-month {
+  margin-right: 20px;
+}
+.win-datepicker .win-datepicker-date.win-order0,
+.win-datepicker .win-datepicker-date.win-order1 {
+  margin-right: 20px;
+}
+.win-datepicker .win-datepicker-year.win-order0 {
+  margin-right: 20px;
+}
+.win-datepicker .win-datepicker-month:lang(ar),
+.win-datepicker .win-datepicker-month:lang(dv),
+.win-datepicker .win-datepicker-month:lang(fa),
+.win-datepicker .win-datepicker-month:lang(he),
+.win-datepicker .win-datepicker-month:lang(ku-Arab),
+.win-datepicker .win-datepicker-month:lang(pa-Arab),
+.win-datepicker .win-datepicker-month:lang(prs),
+.win-datepicker .win-datepicker-month:lang(ps),
+.win-datepicker .win-datepicker-month:lang(sd-Arab),
+.win-datepicker .win-datepicker-month:lang(syr),
+.win-datepicker .win-datepicker-month:lang(ug),
+.win-datepicker .win-datepicker-month:lang(ur),
+.win-datepicker .win-datepicker-month:lang(qps-plocm),
+.win-datepicker .win-datepicker-date.win-order0:lang(ar),
+.win-datepicker .win-datepicker-date.win-order0:lang(dv),
+.win-datepicker .win-datepicker-date.win-order0:lang(fa),
+.win-datepicker .win-datepicker-date.win-order0:lang(he),
+.win-datepicker .win-datepicker-date.win-order0:lang(ku-Arab),
+.win-datepicker .win-datepicker-date.win-order0:lang(pa-Arab),
+.win-datepicker .win-datepicker-date.win-order0:lang(prs),
+.win-datepicker .win-datepicker-date.win-order0:lang(ps),
+.win-datepicker .win-datepicker-date.win-order0:lang(sd-Arab),
+.win-datepicker .win-datepicker-date.win-order0:lang(syr),
+.win-datepicker .win-datepicker-date.win-order0:lang(ug),
+.win-datepicker .win-datepicker-date.win-order0:lang(ur),
+.win-datepicker .win-datepicker-date.win-order0:lang(qps-plocm),
+.win-datepicker .win-datepicker-date.win-order1:lang(ar),
+.win-datepicker .win-datepicker-date.win-order1:lang(dv),
+.win-datepicker .win-datepicker-date.win-order1:lang(fa),
+.win-datepicker .win-datepicker-date.win-order1:lang(he),
+.win-datepicker .win-datepicker-date.win-order1:lang(ku-Arab),
+.win-datepicker .win-datepicker-date.win-order1:lang(pa-Arab),
+.win-datepicker .win-datepicker-date.win-order1:lang(prs),
+.win-datepicker .win-datepicker-date.win-order1:lang(ps),
+.win-datepicker .win-datepicker-date.win-order1:lang(sd-Arab),
+.win-datepicker .win-datepicker-date.win-order1:lang(syr),
+.win-datepicker .win-datepicker-date.win-order1:lang(ug),
+.win-datepicker .win-datepicker-date.win-order1:lang(ur),
+.win-datepicker .win-datepicker-date.win-order1:lang(qps-plocm),
+.win-datepicker .win-datepicker-year.win-order0:lang(ar),
+.win-datepicker .win-datepicker-year.win-order0:lang(dv),
+.win-datepicker .win-datepicker-year.win-order0:lang(fa),
+.win-datepicker .win-datepicker-year.win-order0:lang(he),
+.win-datepicker .win-datepicker-year.win-order0:lang(ku-Arab),
+.win-datepicker .win-datepicker-year.win-order0:lang(pa-Arab),
+.win-datepicker .win-datepicker-year.win-order0:lang(prs),
+.win-datepicker .win-datepicker-year.win-order0:lang(ps),
+.win-datepicker .win-datepicker-year.win-order0:lang(sd-Arab),
+.win-datepicker .win-datepicker-year.win-order0:lang(syr),
+.win-datepicker .win-datepicker-year.win-order0:lang(ug),
+.win-datepicker .win-datepicker-year.win-order0:lang(ur),
+.win-datepicker .win-datepicker-year.win-order0:lang(qps-plocm) {
+  margin-right: 0;
+  margin-left: 20px;
+}
+.win-timepicker {
+  display: -ms-inline-flexbox;
+  display: -webkit-inline-flex;
+  display: inline-flex;
+  height: auto;
+  width: auto;
+}
+.win-timepicker select {
+  min-width: 80px;
+  margin-top: 4px;
+  margin-bottom: 4px;
+}
+.win-timepicker .win-timepicker-hour {
+  margin-right: 20px;
+}
+.win-timepicker .win-timepicker-period.win-order0 {
+  margin-right: 20px;
+}
+.win-timepicker .win-timepicker-minute.win-order1 {
+  margin-right: 20px;
+}
+.win-timepicker .win-timepicker-period.win-order0:lang(ar),
+.win-timepicker .win-timepicker-period.win-order0:lang(dv),
+.win-timepicker .win-timepicker-period.win-order0:lang(fa),
+.win-timepicker .win-timepicker-period.win-order0:lang(he),
+.win-timepicker .win-timepicker-period.win-order0:lang(ku-Arab),
+.win-timepicker .win-timepicker-period.win-order0:lang(pa-Arab),
+.win-timepicker .win-timepicker-period.win-order0:lang(prs),
+.win-timepicker .win-timepicker-period.win-order0:lang(ps),
+.win-timepicker .win-timepicker-period.win-order0:lang(sd-Arab),
+.win-timepicker .win-timepicker-period.win-order0:lang(syr),
+.win-timepicker .win-timepicker-period.win-order0:lang(ug),
+.win-timepicker .win-timepicker-period.win-order0:lang(ur),
+.win-timepicker .win-timepicker-period.win-order0:lang(qps-plocm),
+.win-timepicker .win-timepicker-hour:lang(ar),
+.win-timepicker .win-timepicker-hour:lang(dv),
+.win-timepicker .win-timepicker-hour:lang(fa),
+.win-timepicker .win-timepicker-hour:lang(he),
+.win-timepicker .win-timepicker-hour:lang(ku-Arab),
+.win-timepicker .win-timepicker-hour:lang(pa-Arab),
+.win-timepicker .win-timepicker-hour:lang(prs),
+.win-timepicker .win-timepicker-hour:lang(ps),
+.win-timepicker .win-timepicker-hour:lang(sd-Arab),
+.win-timepicker .win-timepicker-hour:lang(syr),
+.win-timepicker .win-timepicker-hour:lang(ug),
+.win-timepicker .win-timepicker-hour:lang(ur),
+.win-timepicker .win-timepicker-hour:lang(qps-plocm) {
+  margin-right: 0;
+  margin-left: 20px;
+}
+.win-timepicker .win-timepicker-minute.win-order1:lang(ar),
+.win-timepicker .win-timepicker-minute.win-order1:lang(dv),
+.win-timepicker .win-timepicker-minute.win-order1:lang(fa),
+.win-timepicker .win-timepicker-minute.win-order1:lang(he),
+.win-timepicker .win-timepicker-minute.win-order1:lang(ku-Arab),
+.win-timepicker .win-timepicker-minute.win-order1:lang(pa-Arab),
+.win-timepicker .win-timepicker-minute.win-order1:lang(prs),
+.win-timepicker .win-timepicker-minute.win-order1:lang(ps),
+.win-timepicker .win-timepicker-minute.win-order1:lang(sd-Arab),
+.win-timepicker .win-timepicker-minute.win-order1:lang(syr),
+.win-timepicker .win-timepicker-minute.win-order1:lang(ug),
+.win-timepicker .win-timepicker-minute.win-order1:lang(ur),
+.win-timepicker .win-timepicker-minute.win-order1:lang(qps-plocm),
+.win-timepicker .win-timepicker-minute.win-order0:lang(ar),
+.win-timepicker .win-timepicker-minute.win-order0:lang(dv),
+.win-timepicker .win-timepicker-minute.win-order0:lang(fa),
+.win-timepicker .win-timepicker-minute.win-order0:lang(he),
+.win-timepicker .win-timepicker-minute.win-order0:lang(ku-Arab),
+.win-timepicker .win-timepicker-minute.win-order0:lang(pa-Arab),
+.win-timepicker .win-timepicker-minute.win-order0:lang(prs),
+.win-timepicker .win-timepicker-minute.win-order0:lang(ps),
+.win-timepicker .win-timepicker-minute.win-order0:lang(sd-Arab),
+.win-timepicker .win-timepicker-minute.win-order0:lang(syr),
+.win-timepicker .win-timepicker-minute.win-order0:lang(ug),
+.win-timepicker .win-timepicker-minute.win-order0:lang(ur),
+.win-timepicker .win-timepicker-minute.win-order0:lang(qps-plocm) {
+  margin-left: 20px;
+  margin-right: 0;
+}
+body > .win-navigation-backbutton {
+  position: absolute;
+  top: 50px;
+  left: 20px;
+}
+.win-backbutton,
+.win-navigation-backbutton,
+.win-back {
+  display: inline-block;
+  min-width: 0;
+  min-height: 0;
+  padding: 0;
+  text-align: center;
+  width: 41px;
+  height: 41px;
+  font-size: 24px;
+  line-height: 41px;
+  vertical-align: baseline;
+}
+.win-backbutton::before,
+.win-back::before {
+  font-family: "Segoe MDL2 Assets", "Symbols";
+  font-weight: normal;
+  content: "\E0D5";
+  vertical-align: 50%;
+}
+.win-backbutton:lang(ar)::before,
+.win-backbutton:lang(dv)::before,
+.win-backbutton:lang(fa)::before,
+.win-backbutton:lang(he)::before,
+.win-backbutton:lang(ku-Arab)::before,
+.win-backbutton:lang(pa-Arab)::before,
+.win-backbutton:lang(prs)::before,
+.win-backbutton:lang(ps)::before,
+.win-backbutton:lang(sd-Arab)::before,
+.win-backbutton:lang(syr)::before,
+.win-backbutton:lang(ug)::before,
+.win-backbutton:lang(ur)::before,
+.win-backbutton:lang(qps-plocm)::before,
+.win-back:lang(ar)::before,
+.win-back:lang(dv)::before,
+.win-back:lang(fa)::before,
+.win-back:lang(he)::before,
+.win-back:lang(ku-Arab)::before,
+.win-back:lang(pa-Arab)::before,
+.win-back:lang(prs)::before,
+.win-back:lang(ps)::before,
+.win-back:lang(sd-Arab)::before,
+.win-back:lang(syr)::before,
+.win-back:lang(ug)::before,
+.win-back:lang(ur)::before,
+.win-back:lang(qps-plocm)::before {
+  content: "\E0AE";
+}
+button.win-navigation-backbutton,
+button.win-navigation-backbutton:active,
+html.win-hoverable button.win-navigation-backbutton:enabled:hover,
+button.win-navigation-backbutton:enabled:hover:active {
+  background-color: transparent;
+  border: none;
+}
+@media (-ms-high-contrast) {
+  button.win-navigation-backbutton,
+  button.win-navigation-backbutton:active,
+  html.win-hoverable button.win-navigation-backbutton:enabled:hover,
+  button.win-navigation-backbutton:enabled:hover:active {
+    /* Overwrite default background and border styles from BackButton control's <button> element */
+    background-color: transparent;
+    border: none;
+  }
+  .win-backbutton,
+  .win-back {
+    background-color: ButtonFace;
+    border-color: ButtonText;
+    color: ButtonText;
+  }
+  .win-backbutton.win-backbutton:enabled:hover:active,
+  .win-navigation-backbutton.win-navigation-backbutton:enabled:hover:active .win-back {
+    background-clip: border-box;
+    background-color: ButtonText;
+    border-color: transparent;
+    color: ButtonFace;
+  }
+  .win-backbutton:disabled,
+  .win-navigation-backbutton:disabled .win-back,
+  .win-backbutton:disabled:active,
+  .win-navigation-backbutton:disabled:active .win-back {
+    background-color: ButtonFace;
+    border-color: GrayText;
+    color: GrayText;
+  }
+  .win-backbutton:-ms-keyboard-active,
+  .win-navigation-backbutton:-ms-keyboard-active .win-back {
+    background-clip: border-box;
+    background-color: ButtonText;
+    border-color: transparent;
+    color: ButtonFace;
+  }
+  html.win-hoverable .win-backbutton:enabled:hover,
+  html.win-hoverable .win-navigation-backbutton:enabled:hover .win-back {
+    background-color: Highlight;
+    border-color: ButtonText;
+    color: HighlightText;
+  }
+}
+.win-tooltip {
+  display: block;
+  position: fixed;
+  top: 30px;
+  left: 30px;
+  max-width: 320px;
+  box-sizing: border-box;
+  margin: 0;
+  padding: 4px 7px 6px 7px;
+  border-style: solid;
+  border-width: 1px;
+  z-index: 9999;
+  word-wrap: break-word;
+  animation-fill-mode: both;
+  font-size: 12px;
+  font-weight: 400;
+  line-height: 1.167;
+}
+.win-tooltip-phantom {
+  display: block;
+  position: fixed;
+  top: 30px;
+  left: 30px;
+  background-color: transparent;
+  border-width: 0;
+  margin: 0;
+  padding: 0;
+}
+@media (-ms-high-contrast) {
+  .win-tooltip {
+    background-color: Window;
+    border-color: WindowText;
+    color: WindowText;
+  }
+}
+.win-rating {
+  display: -ms-inline-flexbox;
+  display: -webkit-inline-flex;
+  display: inline-flex;
+  -ms-flex-pack: self;
+  -webkit-justify-content: self;
+  justify-content: self;
+  -ms-flex-align: stretch;
+  -webkit-align-items: stretch;
+  align-items: stretch;
+  height: auto;
+  width: auto;
+  white-space: normal;
+  outline: 0;
+}
+.win-rating .win-star {
+  -ms-flex: 1 1 auto;
+  -webkit-flex: 1 1 auto;
+  flex: 1 1 auto;
+  height: 24px;
+  width: 24px;
+  padding: 9px 10px 11px 10px;
+  font-family: "Segoe MDL2 Assets", "Symbols";
+  font-size: 24px;
+  overflow: hidden;
+  text-indent: 0;
+  line-height: 1;
+  cursor: default;
+  position: relative;
+  letter-spacing: 0;
+  -ms-touch-action: none;
+  touch-action: none;
+}
+.win-rating.win-small .win-star {
+  width: 12px;
+  height: 12px;
+  font-size: 12px;
+  padding: 3px 4px 5px 4px;
+}
+.win-rating .win-star:before {
+  content: "\E082";
+}
+.win-rating .win-star.win-disabled {
+  cursor: default;
+  -ms-touch-action: auto;
+  touch-action: auto;
+}
+@media (-ms-high-contrast) {
+  .win-rating .win-star:before {
+    content: "\E082" !important;
+  }
+  .win-rating .win-star.win-full {
+    color: HighLight;
+  }
+  .win-rating .win-star.win-tentative.win-full {
+    color: ButtonText;
+  }
+  .win-rating .win-star.win-empty {
+    color: ButtonFace;
+  }
+  .win-rating .win-star:after {
+    content: "\E224" !important;
+    position: relative;
+    top: -100%;
+    color: ButtonText;
+  }
+}
+.win-toggleswitch {
+  outline: 0;
+}
+.win-toggleswitch .win-toggleswitch-header {
+  max-width: 470px;
+  margin-bottom: 14px;
+  margin-top: 22px;
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 1.333;
+}
+.win-toggleswitch .win-toggleswitch-values {
+  display: inline-block;
+  vertical-align: top;
+}
+.win-toggleswitch .win-toggleswitch-value {
+  min-width: 65px;
+  margin-left: 12px;
+  height: 16px;
+  vertical-align: top;
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 16px;
+}
+.win-toggleswitch .win-toggleswitch-description {
+  font-size: 12px;
+  width: 22em;
+  margin-top: 28px;
+  display: none;
+}
+.win-toggleswitch .win-toggleswitch-clickregion {
+  display: inline-block;
+  touch-action: none;
+  -ms-user-select: none;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  user-select: none;
+}
+.win-toggleswitch .win-toggleswitch-track {
+  position: relative;
+  display: inline-block;
+  width: 44px;
+  height: 16px;
+  border-style: solid;
+  border-width: 2px;
+  border-radius: 8px;
+  box-sizing: border-box;
+}
+.win-toggleswitch .win-toggleswitch-thumb {
+  position: absolute;
+  top: 2px;
+  display: inline-block;
+  width: 20px;
+  height: 8px;
+  border-radius: 4px;
+  -webkit-transition: left 0.1s;
+  transition: left 0.1s;
+}
+.win-toggleswitch:focus .win-toggleswitch-track {
+  outline-width: 1px;
+  outline-style: dotted;
+}
+.win-toggleswitch.win-toggleswitch-dragging .win-toggleswitch-thumb {
+  -webkit-transition: none;
+  transition: none;
+}
+.win-toggleswitch.win-toggleswitch-off .win-toggleswitch-value-on {
+  visibility: hidden;
+  height: 0;
+  font-size: 0;
+  line-height: 0;
+}
+.win-toggleswitch.win-toggleswitch-on .win-toggleswitch-value-off {
+  visibility: hidden;
+  height: 0;
+  font-size: 0;
+  line-height: 0;
+}
+.win-toggleswitch.win-toggleswitch-on .win-toggleswitch-thumb {
+  left: 18px;
+}
+.win-toggleswitch.win-toggleswitch-off .win-toggleswitch-thumb {
+  left: 2px;
+}
+.win-toggleswitch:lang(ar),
+.win-toggleswitch:lang(dv),
+.win-toggleswitch:lang(fa),
+.win-toggleswitch:lang(he),
+.win-toggleswitch:lang(ku-Arab),
+.win-toggleswitch:lang(pa-Arab),
+.win-toggleswitch:lang(prs),
+.win-toggleswitch:lang(ps),
+.win-toggleswitch:lang(sd-Arab),
+.win-toggleswitch:lang(syr),
+.win-toggleswitch:lang(ug),
+.win-toggleswitch:lang(ur),
+.win-toggleswitch:lang(qps-plocm) {
+  direction: rtl;
+}
+.win-toggleswitch:lang(ar).win-toggleswitch-on .win-toggleswitch-thumb,
+.win-toggleswitch:lang(dv).win-toggleswitch-on .win-toggleswitch-thumb,
+.win-toggleswitch:lang(fa).win-toggleswitch-on .win-toggleswitch-thumb,
+.win-toggleswitch:lang(he).win-toggleswitch-on .win-toggleswitch-thumb,
+.win-toggleswitch:lang(ku-Arab).win-toggleswitch-on .win-toggleswitch-thumb,
+.win-toggleswitch:lang(pa-Arab).win-toggleswitch-on .win-toggleswitch-thumb,
+.win-toggleswitch:lang(prs).win-toggleswitch-on .win-toggleswitch-thumb,
+.win-toggleswitch:lang(ps).win-toggleswitch-on .win-toggleswitch-thumb,
+.win-toggleswitch:lang(sd-Arab).win-toggleswitch-on .win-toggleswitch-thumb,
+.win-toggleswitch:lang(syr).win-toggleswitch-on .win-toggleswitch-thumb,
+.win-toggleswitch:lang(ug).win-toggleswitch-on .win-toggleswitch-thumb,
+.win-toggleswitch:lang(ur).win-toggleswitch-on .win-toggleswitch-thumb,
+.win-toggleswitch:lang(qps-plocm).win-toggleswitch-on .win-toggleswitch-thumb {
+  left: 2px;
+}
+.win-toggleswitch:lang(ar).win-toggleswitch-off .win-toggleswitch-thumb,
+.win-toggleswitch:lang(dv).win-toggleswitch-off .win-toggleswitch-thumb,
+.win-toggleswitch:lang(fa).win-toggleswitch-off .win-toggleswitch-thumb,
+.win-toggleswitch:lang(he).win-toggleswitch-off .win-toggleswitch-thumb,
+.win-toggleswitch:lang(ku-Arab).win-toggleswitch-off .win-toggleswitch-thumb,
+.win-toggleswitch:lang(pa-Arab).win-toggleswitch-off .win-toggleswitch-thumb,
+.win-toggleswitch:lang(prs).win-toggleswitch-off .win-toggleswitch-thumb,
+.win-toggleswitch:lang(ps).win-toggleswitch-off .win-toggleswitch-thumb,
+.win-toggleswitch:lang(sd-Arab).win-toggleswitch-off .win-toggleswitch-thumb,
+.win-toggleswitch:lang(syr).win-toggleswitch-off .win-toggleswitch-thumb,
+.win-toggleswitch:lang(ug).win-toggleswitch-off .win-toggleswitch-thumb,
+.win-toggleswitch:lang(ur).win-toggleswitch-off .win-toggleswitch-thumb,
+.win-toggleswitch:lang(qps-plocm).win-toggleswitch-off .win-toggleswitch-thumb {
+  left: 18px;
+}
+.win-semanticzoom {
+  touch-action: pan-x pan-y double-tap-zoom;
+  height: 400px;
+}
+.win-semanticzoom .win-listview > .win-viewport * {
+  touch-action: auto;
+}
+.win-semanticzoom * {
+  touch-action: inherit;
+}
+.win-semanticzoom-button {
+  z-index: 100;
+  position: absolute;
+  min-width: 25px;
+  min-height: 25px;
+  width: 25px;
+  height: 25px;
+  padding: 0px;
+  bottom: 21px;
+  touch-action: none;
+}
+.win-semanticzoom-button::before {
+  font-family: "Segoe MDL2 Assets", "Symbols";
+  font-weight: normal;
+  font-size: 11px;
+  content: "\E0B8";
+  /* minus sign */
+}
+.win-semanticzoom-button-location {
+  left: auto;
+  right: 4px;
+}
+.win-semanticzoom-button-location:lang(ar),
+.win-semanticzoom-button-location:lang(dv),
+.win-semanticzoom-button-location:lang(fa),
+.win-semanticzoom-button-location:lang(he),
+.win-semanticzoom-button-location:lang(ku-Arab),
+.win-semanticzoom-button-location:lang(pa-Arab),
+.win-semanticzoom-button-location:lang(prs),
+.win-semanticzoom-button-location:lang(ps),
+.win-semanticzoom-button-location:lang(sd-Arab),
+.win-semanticzoom-button-location:lang(syr),
+.win-semanticzoom-button-location:lang(ug),
+.win-semanticzoom-button-location:lang(ur),
+.win-semanticzoom-button-location:lang(qps-plocm) {
+  left: 4px;
+  right: auto;
+}
+@media (-ms-high-contrast) {
+  .win-semanticzoom-button {
+    background-color: ButtonFace;
+    border-color: ButtonText;
+    color: ButtonText;
+  }
+  .win-semanticzoom-button.win-semanticzoom-button:hover:active {
+    background-clip: border-box;
+    background-color: ButtonText;
+    border-color: transparent;
+    color: ButtonFace;
+  }
+  .win-semanticzoom-button:-ms-keyboard-active {
+    background-clip: border-box;
+    background-color: ButtonText;
+    border-color: transparent;
+    color: ButtonFace;
+  }
+  html.win-hoverable win-semanticzoom-button:hover {
+    background-color: Highlight;
+    border-color: ButtonText;
+    color: HighlightText;
+  }
+}
+.win-pivot {
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  -ms-flex-direction: column;
+  -webkit-flex-direction: column;
+  flex-direction: column;
+  -ms-flex-wrap: none;
+  -webkit-flex-wrap: nowrap;
+  flex-wrap: nowrap;
+  height: 100%;
+  width: 100%;
+  overflow: hidden;
+  -ms-scroll-limit-x-max: 0px;
+  touch-action: manipulation;
+}
+.win-pivot .win-pivot-navbutton {
+  position: absolute;
+  width: 20px;
+  height: 36px;
+  padding: 0px;
+  margin: 0px;
+  top: 10px;
+  min-width: 0px;
+  border-width:

<TRUNCATED>
http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/template/WinJS/fonts/Symbols.ttf
----------------------------------------------------------------------
diff --git a/template/WinJS/fonts/Symbols.ttf b/template/WinJS/fonts/Symbols.ttf
new file mode 100644
index 0000000..ad24323
Binary files /dev/null and b/template/WinJS/fonts/Symbols.ttf differ


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


[7/7] cordova-windows git commit: CB-8923 Add support for Windows 10 platform

Posted by ax...@apache.org.
CB-8923 Add support for Windows 10 platform

github: closes #70


Project: http://git-wip-us.apache.org/repos/asf/cordova-windows/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-windows/commit/0d2387d9
Tree: http://git-wip-us.apache.org/repos/asf/cordova-windows/tree/0d2387d9
Diff: http://git-wip-us.apache.org/repos/asf/cordova-windows/diff/0d2387d9

Branch: refs/heads/windows10
Commit: 0d2387d95433c62b9efdbc509a627ed7277283b4
Parents: 653b7d1
Author: Rob Paveza <Ro...@microsoft.com>
Authored: Thu Apr 23 16:26:40 2015 -0700
Committer: Parashuram <co...@nparashuram.com>
Committed: Mon Apr 27 21:08:19 2015 -0700

----------------------------------------------------------------------
 .jshintignore                                 |     1 +
 NOTICE                                        |    12 +-
 README.md                                     |    11 +-
 RELEASENOTES.md                               |    18 +
 VERSION                                       |     2 +-
 bin/lib/create.js                             |     2 +-
 cordova-windows10.md                          |   159 +
 spec/unit/Prepare.Win10.spec.js               |   398 +
 spec/unit/Version.spec.js                     |   145 +
 spec/unit/build.spec.js                       |    15 +-
 spec/unit/package.spec.js                     |    11 +-
 spec/unit/run.spec.js                         |     2 +-
 template/CordovaApp.Windows10.jsproj          |   104 +
 template/CordovaApp.sln                       |    32 +-
 template/WinJS/css/ui-dark.css                |  7663 ++
 template/WinJS/css/ui-light.css               |  7663 ++
 template/WinJS/fonts/Symbols.ttf              |   Bin 0 -> 47488 bytes
 template/WinJS/js/WinJS.intellisense-setup.js |    30 +
 template/WinJS/js/WinJS.intellisense.js       |   195 +
 template/WinJS/js/WinJS.js                    | 80988 +++++++++++++++++++
 template/WinJS/js/en-US/ui.strings.js         |   476 +
 template/config.xml                           |     3 +-
 template/cordova/lib/ConfigParser.js          |    54 +
 template/cordova/lib/MSBuildTools.js          |    35 +-
 template/cordova/lib/Version.js               |   114 +
 template/cordova/lib/WindowsStoreAppUtils.ps1 |    18 +
 template/cordova/lib/build.js                 |   110 +-
 template/cordova/lib/package.js               |    81 +-
 template/cordova/lib/prepare.js               |   418 +-
 template/cordova/lib/run.js                   |   101 +-
 template/cordova/lib/utils.js                 |    25 +-
 template/images/Square44x44Logo.scale-100.png |   Bin 0 -> 2947 bytes
 template/images/Square71x71Logo.scale-100.png |   Bin 0 -> 6383 bytes
 template/package.windows10.appxmanifest       |    73 +
 template/www/cordova.js                       |     5 +-
 template/www/js/index.js                      |     2 +-
 36 files changed, 98841 insertions(+), 125 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/.jshintignore
----------------------------------------------------------------------
diff --git a/.jshintignore b/.jshintignore
index 31c0a5a..126ec0f 100644
--- a/.jshintignore
+++ b/.jshintignore
@@ -1 +1,2 @@
 template/www/*
+template/WinJS/*
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/NOTICE
----------------------------------------------------------------------
diff --git a/NOTICE b/NOTICE
index c38e7d7..2f3db22 100644
--- a/NOTICE
+++ b/NOTICE
@@ -2,4 +2,14 @@ Apache Cordova
 Copyright 2012 The Apache Software Foundation
 
 This product includes software developed by
-The Apache Software Foundation (http://www.apache.org)
\ No newline at end of file
+The Apache Software Foundation (http://www.apache.org)
+
+
+------------------------------------------------------- 
+* WinJS * 
+ 
+http://github.com/winjs/winjs
+ 
+The MIT License 
+http://www.opensource.org/licenses/mit-license.php 
+Copyright (c) 2015 Microsoft Corporation

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
index dfc1d0f..0fa2095 100644
--- a/README.md
+++ b/README.md
@@ -24,7 +24,10 @@ Apache Cordova for Windows
 
 [![Build status](https://ci.appveyor.com/api/projects/status/19h1fq0lyvwtei05/branch/master)](https://ci.appveyor.com/project/Humbedooh/cordova-windows/branch/master)
 
-Includes Windows universal app template to build [Apache Cordova](http://cordova.apache.org) applications that target Windows 8.0, Windows 8.1 and Windows Phone 8.1. An Apache Cordova based applications is, at the core, an application written with web technology: HTML, CSS and JavaScript.
+# Experimental branch for Windows 10 #
+**You are using an experimental branch** which includes support for Windows 10 Universal Apps.  For more information about what's new with Windows 10 support, see [What's New in Windows 10 for Cordova](cordova-windows10.md).
+
+Also includes a universal app template to build [Apache Cordova](http://cordova.apache.org) applications that target Windows 8.0, Windows 8.1 and Windows Phone 8.1. An Apache Cordova based applications is, at the core, an application written with web technology: HTML, CSS and JavaScript.
 
 [Apache Cordova](http://cordova.apache.org) is a project of [The Apache Software Foundation (ASF)](http://apache.org)
 
@@ -32,7 +35,11 @@ Requires
 ---
 **To build for Windows 10** Platform support is experimental
 
-**To build for all platforms** (Windows 8.0, Windows 8.1 and Windows Phone 8.1)
+**To build for Windows 10** (Windows 10, Windows 8.1, and Windows Phone 8.1)
+
+  Windows 8.1 or Windows 10, along with [Visual Studio 2015 RC](http://www.visualstudio.com/downloads)
+
+**To build for Windows 8 or Windows 8.1** (Windows 8.0, Windows 8.1 and Windows Phone 8.1)
 
   Windows 8.1 along with [Visual Studio 2013 Express](http://www.visualstudio.com/downloads/download-visual-studio-vs#d-express-windows-8).
 

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/RELEASENOTES.md
----------------------------------------------------------------------
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 0c956b8..d638838 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -24,7 +24,20 @@ Update these notes using: git log --pretty=format:'* %s' --topo-order --no-merge
 
 cordova-windows is a library that enables developers to create Windows 8/8.1 and WP8.1 application projects that support Cordova APIs.
 
+[4.0.0-dev]
+
+* Added support for Windows 10 Universal Apps. 
+* To target Windows 10, add `<preference name="WindowsTargetVersion" value="10.0" />` to config.xml
+
+**Known Issues with 4.0.0-dev and Windows 10**
+
+- Windows 10 Technical Preview 2 does not have a command-line compatible emulator deployment scenario.  To deploy to an emulator, open your solution file in Visual Studio.
+- The Windows SDK included with Visual Studio 2015 RC does not include a tool to deploy to a Windows 10 Phone.  To deploy to a phone, open your solution file in Visual Studio.
+- `-AndContinue` APIs have been deprecated in Windows 10, so plugins may throw an exception if they call such APIs from a Windows 10 app.
+- WinJS is included inline in the package.  In the future, it will be migrated to an NPM dependency, and the dependency will not include any UI-related files.  You should not take a dependency on WinJS UI functionality unless you include it yourself (see [WinJS on Github](http://github.com/winjs/winjs)).
+
 [3.8.1]
+
 * CB-8796 updated package.json version manually
 * CB-8796 updated version file manually
 * Removed verbose strict inequality tests
@@ -35,6 +48,7 @@ cordova-windows is a library that enables developers to create Windows 8/8.1 and
 * Update JS snapshot to version 3.8.1 (via coho)
 
 [3.8.0]
+
 * Update JS snapshot to version 3.8.0 (via coho)
 * CB-7985 windows platform does not build with Visual Studio 14 CTP tools
 * CB-8515 Support DefaultLanguage selection for Windows
@@ -47,9 +61,11 @@ cordova-windows is a library that enables developers to create Windows 8/8.1 and
 * Fixed regex used in getPackageFileInfo().
 
 [3.7.1]
+
 * Updated expired temporary certificate
 
 [3.7.0]
+
 * Update JS snapshot to version 3.7.0 (via coho)
 * CB-7731 catch obvious missing args error
 * CB-7493 Adds `space-in-path` and `unicode in name` tests for CI
@@ -69,6 +85,7 @@ cordova-windows is a library that enables developers to create Windows 8/8.1 and
 * CB-7377 Removes unnecessary rules tracing which is also incorrectly handled by PS
 
 [3.6.4]
+
 * Set VERSION to 3.6.4 (via coho)
 * Update JS snapshot to version 3.6.4 (via coho)
 * CB-7617 partial match support for --target
@@ -76,6 +93,7 @@ cordova-windows is a library that enables developers to create Windows 8/8.1 and
 * bundledDependencies + fixed some whitespace
 
 [3.6.0]
+
 * CB-7377 Removes unnecessary rules tracing which is also incorrectly handled by PS
 * update cordova.js
 * Removed un-needed files, multiple cordova.js files can only cause confusion

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/VERSION
----------------------------------------------------------------------
diff --git a/VERSION b/VERSION
index 724ee60..d9b058f 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-3.9.0-dev
+4.0.0-dev

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/bin/lib/create.js
----------------------------------------------------------------------
diff --git a/bin/lib/create.js b/bin/lib/create.js
index e88f72c..8f323d0 100644
--- a/bin/lib/create.js
+++ b/bin/lib/create.js
@@ -74,7 +74,7 @@ module.exports.run = function (argv) {
     }
 
     // replace specific values in manifests' templates
-    ['package.windows.appxmanifest', 'package.windows80.appxmanifest', 'package.phone.appxmanifest'].forEach(function (file) {
+    ['package.windows.appxmanifest', 'package.windows80.appxmanifest', 'package.phone.appxmanifest', 'package.windows10.appxmanifest'].forEach(function (file) {
         var fileToReplace = path.join(projectPath, file);
         shell.sed('-i', /\$guid1\$/g, guid, fileToReplace);
         shell.sed('-i', /\$safeprojectname\$/g, packageName, fileToReplace);

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/cordova-windows10.md
----------------------------------------------------------------------
diff --git a/cordova-windows10.md b/cordova-windows10.md
new file mode 100644
index 0000000..4c7e1f7
--- /dev/null
+++ b/cordova-windows10.md
@@ -0,0 +1,159 @@
+*This document contains information about an experimental branch of cordova-windows with support for 
+Windows 10 Technical Preview 2 released at the Build conference in April 2015.  Information is subject 
+to change with later revisions of the software.*
+
+# What’s New in Windows 10 for Cordova #
+Windows 10 has a number of new platform features that make it easier to share code across Cordova 
+applications, as well as bringing forward support for hosted web apps.  This document outlines what 
+app developers and plugin developers need to know about Windows 10 when building support for Windows.
+
+## Getting Started with Windows 10 ##
+Adding Windows 10 support to your app is as easy as setting your Windows target platform version to 
+10.0:
+
+    <preference name="WindowsTargetVersion" value="10.0" />
+
+To develop apps for Windows 10, you require:
+
+* Windows 8.1 or Windows 10 Technical Preview 2, 32-bit or 64-bit
+* Visual Studio 2015 RC
+
+### Web Context and Windows Runtime Access ###
+
+In Windows 8 and 8.1, loading your app into the web context (using `ms-appx-web://`) would allow 
+developers freedom of certain kinds of document manipulation (such as inline script) but would 
+prevent Windows Runtime (WinRT) access.  In Windows 10, many of these restrictions have been lifted; 
+web applications have access to WinRT APIs as long as the page’s origin has been whitelisted in the 
+app manifest.
+  
+To prevent malicious scripts injection, developers are encouraged to:
+
+* Whitelist only authorized and protected origins using the allow-navigation tag in config.xml
+* Apply a [Content Security Policy](http://content-security-policy.com/) meta tag to all pages 
+viewed in a Cordova app
+
+These are good practices in all cases.
+
+### Remote Access and Capabilities ###
+
+When the app manifest declares remote URIs or Web Context to have access to WinRT, then the 
+public Windows Store will prevent on-boarding of apps that have the following capabilities 
+declared:
+
+* Enterprise Authentication (`enterpriseAuthentication`)
+* Shared User Certificates (`sharedUserCertificates`)
+* Documents Library (`documentsLibrary`)
+* Music Library (`musicLibrary`)
+* Pictures Library (`picturesLibrary`)
+* Videos Library (`videosLibrary`)
+* Removable Storage (`removableStorage`)
+* Internet client/server (`internetClientClientServer`) - note that `internetClient` is 
+still permitted
+* Private network client/server (`privateNetworkClientServer`)
+
+Each of the library restrictions may be worked around by requesting that the user interact 
+with the file system via a file picker.  This prevents malicious injected code from arbitrarily 
+accessing (for example) the file system.
+
+The network-related restrictions must be worked around by either using an API that doesn't use 
+capability checks or by brokering communication via standard internet communication channels, 
+such as `XMLHttpRequest` or Web Sockets.
+
+The Enterprise Authentication and Shared User Certificates capabilities are specifically 
+targeted at Enterprise scenarios. These capabilities are supported for private/enterprise-enabled 
+App Stores, so if you are building apps which are going to be deployed to an internal deployment 
+mechanism, you can still support these. 
+
+Whenever you build targeting Windows 10, if one of these capabilities is detected in your app 
+manifest, a warning will be displayed.
+
+## Reference ##
+
+### config.xml Preferences ###
+
+#### WindowsTargetVersion, WindowsPhoneTargetVersion ####
+
+    <preference name="WindowsTargetVersion" value="10.0" />
+    <preference name="WindowsPhoneTargetVersion" value="10.0" />
+
+*At least one is required.*
+
+These preferences identify the version of Windows or Windows Phone you would like your app 
+package to target.
+
+**Valid Values**
+
+* 10.0, UAP: Builds for Windows 10 Universal Windows Platform
+* 8.1: Builds for Windows 8.1 or Windows Phone 8.1 (the default)
+* 8.0: Build for Windows 8.0. Not valid for Windows Phone (use the wp8 Cordova platform 
+instead)
+
+**Scenarios**
+
+If you are targeting Windows 8.1 or Windows 10 only, you only need to have a single 
+`WindowsTargetVersion` setting in your config.xml file.  Explicitly setting 
+`WindowsTargetVersion` to specify Windows 10 will push the Phone setting to 10 as well.
+
+#### WindowsDefaultUriPrefix ####
+    <preference name="WindowsDefaultUriPrefix" value="ms-appx://|ms-appx-web://" />
+
+This preference identifies whether you want your app to target the local context or web 
+context as its startup URI. When building for Windows 10, the default is the web context 
+(`ms-appx-web://`).
+
+In order to have a local-context application that is not impacted by web-context capability 
+restrictions, you must set this preference to `ms-appx://` and not declare any 
+`<allow-navigation>` elements with remote URIs.
+
+**Valid Values**
+
+* `ms-appx://` (Default for Windows 8, 8.1): The start page runs in the local context
+* `ms-appx-web://` (Default for Windows 10): The start page runs in the web context
+
+#### {SDK}-MinVersion, {SDK}-MaxVersionTested ####
+*Optional*
+
+    <preference name="Windows.Universal-MinVersion" value="10.0.0.0" />
+    <preference name="Windows.Mobile-MinVersion" value="10.0.9927.0" />
+    <preference name="Windows.Mobile-MaxVersionTested" value="10.0.10031.0" />
+    <preference name="Microsoft.Northwind-MinVersion" value="10.0.11.0" />
+
+These preferences identify which ecosystems or required Extension SDKs (including but not 
+limited to Windows Universal, Windows Mobile, or Xbox) and the min/max versions they are 
+compatible with. They still require that the platforms have support for the Universal 
+Windows Platform (with Windows 10 as the base OS). However, these may indicate that the 
+application is aware of particular functionality that may only be available on certain 
+devices.
+
+**Valid Values**
+
+There are three parts to each value: the **SDK**, the **version restriction**, and the 
+**version value**. These preferences are detected by beginning with `Windows` or 
+`Microsoft` and ending in `-MinVersion` or `-MaxVersionTested`:
+
+* The **SDK** defines what platform or Extension SDK you want to target. The default is 
+`Windows.Universal`. Valid values for these are defined in the AppxManifest schema, 
+in thePackage/Dependencies/TargetPlatform elements.
+* The **version restriction** defines application compatibility rules. For example, if the 
+`-MinVersion` is set to `10.1.0.0`, then OS versions which don't support at least 10.1.0.0 
+of the corresponding SDK won't be able to load it.
+ * `-MinVersion` specifies the minimum version of the SDK required
+ * `-MaxVersionTested` specifies the highest-tested version of the SDK. If a new version of 
+ the corresponding SDK is released, it will run in compatibility mode for the specified version.
+* The **version value** is a 4-integer tuple in the form of *major.minor.build.qfe*.
+
+If no preferences of these types are specified in your config.xml file, then 
+`Windows.Universal` version 10.0.0.0 will be chosen by default.
+
+### The allow-navigation Element ###
+    <allow-navigation href="http://www.contoso.com/" />
+
+This preference identifies origins which will have access to Windows APIs.  Effectively, this 
+means that origins which are whitelisted with allow-navigation elements can be top-level 
+navigation targets, and will have full access to Cordova plugins that target Windows.
+
+This aligns with the behavior of the `allow-navigation` element in 
+[cordova-plugin-whitelist](https://github.com/apache/cordova-plugin-whitelist), but is built 
+into the platform.  Both the top-level page, as well as webviews, will have access based on 
+the origin of the URI.  It is recommended that, when using this element, that any pages loaded 
+into the frame have a Content Security Policy applied.

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/spec/unit/Prepare.Win10.spec.js
----------------------------------------------------------------------
diff --git a/spec/unit/Prepare.Win10.spec.js b/spec/unit/Prepare.Win10.spec.js
new file mode 100644
index 0000000..d686586
--- /dev/null
+++ b/spec/unit/Prepare.Win10.spec.js
@@ -0,0 +1,398 @@
+/**
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+*/
+
+var rewire  = require('rewire'),
+    prepare = rewire('../../template/cordova/lib/prepare'),
+    Version = require('../../template/cordova/lib/Version'),
+    et      = require('elementtree'),
+    fs      = require('fs'),
+    getAllMinMaxUAPVersions         = prepare.__get__('getAllMinMaxUAPVersions'),
+    applyCoreProperties             = prepare.__get__('applyCoreProperties'),
+    applyAccessRules                = prepare.__get__('applyAccessRules'),
+    checkForRestrictedCaps          = prepare.__get__('checkForRestrictedCapabilities'),
+    ensureUapPrefixedCapabilities   = prepare.__get__('ensureUapPrefixedCapabilities');
+
+var Win10ManifestPath = 'template/package.windows10.appxmanifest',
+    Win81ManifestPath = 'template/package.windows.appxmanifest';
+
+/***
+  * Unit tests for validating that min/max versions are correctly obtained 
+  * (for the function getAllMinMaxUAPVersions) from prepare.js.
+  **/
+describe('Min/Max UAP versions are correctly read from the config file.', function() {
+
+    var mockConfig = {
+        getMatchingPreferences: function(regexp) {
+            return [
+                { name: 'Windows.Universal-MinVersion', value: '10.0.9910.0' },
+                { name: 'Windows.Universal-MaxVersionTested', value: '10.0.9917.0' },
+                { name: 'Windows.Desktop-MinVersion', value: '10.0.9910.0' },
+                { name: 'Microsoft.Xbox-MaxVersionTested', value: '10.0.9917.0' }
+            ];
+        }
+    };
+
+    it('Should correctly transform all versions as a baseline.', function() {
+        var versionSet = getAllMinMaxUAPVersions(mockConfig);
+        var ver9910 = new Version(10, 0, 9910, 0);
+        var ver9917 = new Version(10, 0, 9917, 0);
+
+        expect(versionSet['Windows.Universal']).toBeDefined();
+        expect(ver9910.eq(versionSet['Windows.Universal'].MinVersion)).toBe(true);
+        expect(ver9917.eq(versionSet['Windows.Universal'].MaxVersionTested)).toBe(true);
+
+        expect(versionSet['Windows.Desktop']).toBeDefined();
+        expect(ver9910.eq(versionSet['Windows.Desktop'].MinVersion)).toBe(true);
+        expect(ver9910.eq(versionSet['Windows.Desktop'].MaxVersionTested)).toBe(true);
+
+        expect(versionSet['Microsoft.Xbox']).toBeDefined();
+        expect(ver9917.eq(versionSet['Microsoft.Xbox'].MinVersion)).toBe(true);
+        expect(ver9917.eq(versionSet['Microsoft.Xbox'].MaxVersionTested)).toBe(true);
+
+        expect(Object.keys(versionSet).length).toBe(3);
+    });
+
+});
+
+describe('Min/Max UAP versions are produced correctly even when the config file has no settings.', function() {
+    var mockConfig = {
+        getMatchingPreferences: function(regexp) {
+            return [];
+        }
+    };
+
+    it('Should correctly transform all versions as a baseline.', function() {
+        var versionSet = getAllMinMaxUAPVersions(mockConfig);
+        var verBaseline = prepare.__get__('BASE_UAP_VERSION');
+
+        expect(versionSet['Windows.Universal']).toBeDefined();
+        expect(verBaseline.eq(versionSet['Windows.Universal'].MinVersion)).toBe(true);
+        expect(verBaseline.eq(versionSet['Windows.Universal'].MaxVersionTested)).toBe(true);
+
+        expect(Object.keys(versionSet).length).toBe(1);
+    });
+});
+
+describe('Min/Max UAP versions are correctly read from the config file.', function() {
+
+    var mockConfig = {
+        getMatchingPreferences: function(regexp) {
+            return [
+                { name: 'Windows.Universal-MinVersion', value: '10.0.9910.f' },
+                { name: 'Windows.Universal-MaxVersionTested', value: '10.0.9917.0' },
+            ];
+        }
+    };
+
+    it('Should fail to produce min/max versions with a RangeError.', function() {
+        try {
+            getAllMinMaxUAPVersions(mockConfig);
+            expect(false).toBe(true);
+        }
+        catch (ex) {
+            expect(ex.constructor).toBe(RangeError);
+        }
+    });
+
+});
+
+/***
+  * Unit tests for validating default ms-appx-web:// URI scheme in Win10
+  * (for the function applyCoreProperties) from prepare.js.
+  **/
+function createMockConfigAndManifestForApplyCoreProperties(startPage, windowsDefaultUriPrefix, win10) {
+    var config = {
+        version: function() { return '1.0.0.0'; },
+        name: function() { return 'HelloCordova'; },
+        packageName: function() { return 'org.apache.cordova.HelloCordova'; },
+        author: function() { return 'Apache'; },
+        startPage: function() { return startPage; },
+        getPreference: function(preferenceName) {
+            if (preferenceName === 'WindowsDefaultUriPrefix') {
+                return windowsDefaultUriPrefix;
+            }
+            else if (preferenceName === 'Orientation') {
+                return null;
+            }
+            else {
+                throw new RangeError('Unexpected call to config.getPreference with "' + preferenceName + '" in unit test.');
+            }
+        }
+    };
+
+    var filePath = win10 ? Win10ManifestPath : Win81ManifestPath;
+    var fileContents = fs.readFileSync(filePath, 'utf-8');
+    var manifest = new et.ElementTree(et.XML(fileContents.trim()));
+
+    return { config: config, manifest: manifest };
+}
+
+function addCapabilityDeclarationToMockManifest(manifest, capability) {
+    var capRoot = manifest.find('.//Capabilities');
+    var cap = new et.Element('Capability');
+    cap.attrib.Name = capability;
+    capRoot.append(cap);
+}
+
+describe('A Windows 8.1 project should not have an HTTP or HTTPS scheme for its startup URI.', function() {
+
+    // arrange
+    var mockConfig = createMockConfigAndManifestForApplyCoreProperties('index.html', 'http://', false);
+
+    // act
+    applyCoreProperties(mockConfig.config, mockConfig.manifest, 'fake-path', 'm2:', false);
+
+    var app = mockConfig.manifest.find('.//Application');
+    expect(app.attrib.StartPage).toBe('www/index.html');
+});
+
+describe('A Windows 8.1 project should not have any scheme for its startup URI.', function() {
+
+    // arrange
+    var mockConfig = createMockConfigAndManifestForApplyCoreProperties('index.html', 'ms-appx://', false);
+
+    // act
+    applyCoreProperties(mockConfig.config, mockConfig.manifest, 'fake-path', 'm2:', false);
+
+    var app = mockConfig.manifest.find('.//Application');
+    expect(app.attrib.StartPage).toBe('www/index.html');
+});
+
+describe('A Windows 10 project default to ms-appx-web for its startup URI.', function() {
+
+    // arrange
+    var mockConfig = createMockConfigAndManifestForApplyCoreProperties('index.html', null, true);
+
+    // act
+    applyCoreProperties(mockConfig.config, mockConfig.manifest, 'fake-path', 'uap:', true);
+
+    var app = mockConfig.manifest.find('.//Application');
+    expect(app.attrib.StartPage).toBe('ms-appx-web:///www/index.html');
+});
+
+describe('A Windows 10 project should allow ms-appx as its startup URI, and it gets removed from the final output.', function() {
+
+    // arrange
+    var mockConfig = createMockConfigAndManifestForApplyCoreProperties('index.html', 'ms-appx://', true);
+
+    // act
+    applyCoreProperties(mockConfig.config, mockConfig.manifest, 'fake-path', 'uap:', true);
+
+    var app = mockConfig.manifest.find('.//Application');
+    expect(app.attrib.StartPage).toBe('www/index.html');
+});
+
+describe('A Windows 10 project should allow an HTTP or HTTPS scheme for its startup URI.', function() {
+
+    // arrange
+    var mockConfig = createMockConfigAndManifestForApplyCoreProperties('www.contoso.com/', 'http://', true);
+
+    // act
+    applyCoreProperties(mockConfig.config, mockConfig.manifest, 'fake-path', 'uap:', true);
+
+    var app = mockConfig.manifest.find('.//Application');
+    expect(app.attrib.StartPage).toBe('http://www.contoso.com/');
+});
+
+describe('A Windows 10 project should warn if it supports remote mode and restricted capabilities.', function() {
+
+    // arrange
+    var mockConfig = createMockConfigAndManifestForApplyAccessRules(true, 'http://www.bing.com/*');
+    addCapabilityDeclarationToMockManifest(mockConfig.manifest, 'documentsLibrary');
+
+    var stringFound     = false,
+        searchStr       = '   documentsLibrary',
+        oldConsoleWarn  = console.warn;
+
+    beforeEach(function() {
+        stringFound = false;
+        spyOn(console, 'warn').andCallFake(function(msg) {
+            if (msg === searchStr)
+                stringFound = true;
+        });
+    });
+    afterEach(function() {
+        console.warn = oldConsoleWarn;
+    });
+
+    
+    it('asserts that the documentsLibrary capability is restricted', function() {
+        // act
+        checkForRestrictedCaps(mockConfig.config, mockConfig.manifest);
+
+        // assert
+        expect(stringFound).toBe(true);
+    });
+});
+
+/***
+  * Unit tests for validating that access rules get correctly applied
+  * (for the function applyAccessRules) from prepare.js.
+  **/
+
+function createMockConfigAndManifestForApplyAccessRules(isWin10) {
+    var rules = [];
+    for (var i = 1; i < arguments.length; i++) {
+        rules.push(arguments[i]);
+    }
+
+    var config = {
+        version: function() { return '1.0.0.0'; },
+        name: function() { return 'HelloCordova'; },
+        packageName: function() { return 'org.apache.cordova.HelloCordova'; },
+        author: function() { return 'Apache'; },
+        startPage: function() { return 'index.html'; },
+        getPreference: function(preferenceName) {
+            if (preferenceName === 'WindowsDefaultUriPrefix') {
+                return isWin10 ? 'ms-appx-web://' : 'ms-appx://';
+            }
+            else {
+                throw new RangeError('Unexpected call to config.getPreference in unit test.');
+            }
+        }, 
+        getAccessRules: function() {
+            if (isWin10) {
+                return [];
+            }
+
+            return rules;
+        },
+        getNavigationWhitelistRules: function() {
+            if (isWin10) {
+                return rules;
+            }
+
+            return [];
+        }
+    };
+
+    var filePath = isWin10 ? Win10ManifestPath : Win81ManifestPath;
+    var fileContents = fs.readFileSync(filePath, 'utf-8');
+    var manifest = new et.ElementTree(et.XML(fileContents.trim()));
+
+    return { config: config, manifest: manifest };
+}
+
+describe('A Windows 8.1 project should not have WindowsRuntimeAccess attributes in access rules.', function() {
+
+    var mockConfig = createMockConfigAndManifestForApplyAccessRules(false, 'https://www.contoso.com');
+
+    applyAccessRules(mockConfig.config, mockConfig.manifest, false);
+
+    var app         = mockConfig.manifest.find('.//Application'),
+        accessRules = app.find('.//ApplicationContentUriRules');
+
+    expect(accessRules).toBeDefined();
+    expect(accessRules.len()).toBe(1);
+
+    var rule = accessRules.getItem(0);
+    expect(rule).toBeDefined();
+    expect(rule.attrib.WindowsRuntimeAccess).toBeUndefined();
+
+});
+
+describe('A Windows 10 project should have WindowsRuntimeAccess attributes in access rules.', function() {
+
+    var mockConfig = createMockConfigAndManifestForApplyAccessRules(true, 'https://www.contoso.com');
+
+    applyAccessRules(mockConfig.config, mockConfig.manifest, true);
+
+    var app         = mockConfig.manifest.find('.//Application'),
+        accessRules = app.find('.//uap:ApplicationContentUriRules');
+
+    expect(accessRules).toBeDefined();
+    expect(accessRules.len()).toBe(2);
+
+    var rule = accessRules.getItem(0);
+    expect(rule).toBeDefined();
+    expect(rule.attrib.WindowsRuntimeAccess).toBeDefined();
+    expect(rule.attrib.WindowsRuntimeAccess).toBe('all');
+
+});
+
+describe('A Windows 8.1 project should reject http:// URI scheme rules.', function() {
+    
+    var stringIndex     = -1,
+        searchStr       = 'Access rules must begin with "https://", the following rule will be ignored: ',
+        oldConsoleWarn  = console.warn;
+    beforeEach(function() {
+        spyOn(console, 'warn').andCallFake(function(msg) {
+            stringIndex = msg.indexOf(searchStr);
+        });
+    });
+    afterEach(function() {
+        console.warn = oldConsoleWarn;
+    });
+    
+    it('applies access rules and verifies at least one was rejected', function() {
+        var mockConfig = createMockConfigAndManifestForApplyAccessRules(false, 'http://www.contoso.com');
+        applyAccessRules(mockConfig.config, mockConfig.manifest, false);
+
+        expect(stringIndex).toBe(0);
+    });
+});
+
+describe('A Windows 10 project should accept http:// URI access rules.', function() {
+
+    var stringIndex     = -1,
+        searchStr       = 'The following navigation rule had an invalid URI scheme and is ignored:',
+        oldConsoleWarn  = console.warn;
+    beforeEach(function() {
+        spyOn(console, 'warn').andCallFake(function(msg) {
+            stringIndex = msg.indexOf(searchStr);
+        });
+    });
+    afterEach(function() {
+        console.warn = oldConsoleWarn;
+    });
+
+    it('applies access rules and verifies they were accepted', function() {
+        var mockConfig = createMockConfigAndManifestForApplyAccessRules(true, 'http://www.contoso.com');
+        applyAccessRules(mockConfig.config, mockConfig.manifest, true);
+
+        expect(stringIndex).toBe(-1);
+    });
+
+});
+
+describe('A Windows 10 project should apply the uap: namespace prefix to certain capabilities.', function() {
+    
+    var element = null;
+
+    beforeEach(function() {
+        element = new et.Element('Capabilities');
+        element.append(new et.Element('Capability', { Name: 'internetClient' }));
+        element.append(new et.Element('Capability', { Name: 'documentsLibrary' }));
+        element.append(new et.Element('DeviceCapability', { Name: 'location' }));
+    });
+
+    it('Applies the uap: prefix to the documentsLibrary capability.', function() {
+        ensureUapPrefixedCapabilities(element);
+        var children = element.getchildren();
+        var testResults = {};
+        // map capabilities to tag
+        children.forEach(function(child) {
+            testResults[child.attrib.Name] = child.tag;
+        });
+
+        expect(testResults.internetClient).toBe('Capability');
+        expect(testResults.documentsLibrary).toBe('uap:Capability');
+        expect(testResults.location).toBe('DeviceCapability');
+    });
+});

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/spec/unit/Version.spec.js
----------------------------------------------------------------------
diff --git a/spec/unit/Version.spec.js b/spec/unit/Version.spec.js
new file mode 100644
index 0000000..5f1e29f
--- /dev/null
+++ b/spec/unit/Version.spec.js
@@ -0,0 +1,145 @@
+/**
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+*/
+
+var Version = require('../../template/cordova/lib/Version.js');
+
+describe('Version constructors behave correctly.', function() {
+
+    var v1 = new Version(1);
+    expect(v1.major).toBe(1);
+    expect(v1.minor).toBe(0);
+    expect(v1.build).toBe(0);
+    expect(v1.qfe).toBe(0);
+    var v2 = new Version(1, 2);
+    expect(v2.major).toBe(1);
+    expect(v2.minor).toBe(2);
+    expect(v2.build).toBe(0);
+    expect(v2.qfe).toBe(0);
+    var v3 = new Version(1, 2, 4);
+    expect(v3.major).toBe(1);
+    expect(v3.minor).toBe(2);
+    expect(v3.build).toBe(4);
+    expect(v3.qfe).toBe(0);
+    var v4 = new Version(1, 2, 4, 7);
+    expect(v4.major).toBe(1);
+    expect(v4.minor).toBe(2);
+    expect(v4.build).toBe(4);
+    expect(v4.qfe).toBe(7);
+
+});
+
+describe('Version parse functions work as expected.', function() {
+
+    var version = Version.fromString('1.2.4.7');
+    expect(version.major).toBe(1);
+    expect(version.minor).toBe(2);
+    expect(version.build).toBe(4);
+    expect(version.qfe).toBe(7);
+
+    it('should produce an error as the version string is invalid', function() {
+        try {
+            Version.fromString('This is invalid.');
+
+            expect(false).toBe(true);
+        }
+        catch (ex) {
+            expect(ex.constructor).toBe(RangeError);
+        }
+    });
+
+    it('should produce an error as the string is incomplete.', function() {
+        try {
+            Version.fromString('1.5.3');
+
+            expect(false).toBe(true);
+        }
+        catch (ex) {
+            expect(ex.constructor).toBe(RangeError);
+        }
+    });
+
+    it('should produce an error as the string is too long.', function() {
+        try {
+            Version.fromString('1.5.3.2.7');
+
+            expect(false).toBe(true);
+        }
+        catch (ex) {
+            expect(ex.constructor).toBe(RangeError);
+        }
+    });
+
+    expect(Version.tryParse('This is invalid')).toBe(false);
+
+});
+
+describe('Version equality functions work as expected.', function() {
+
+    var v1Base = new Version(1, 1, 2, 3);
+    // equal to v1Base
+    var v1Copy = new Version(1, 1, 2, 3);
+    // greater than v1Base by QFE
+    var gtV1ByQfe = new Version(1, 1, 2, 4);
+    // greater than v1Base by Build
+    var gtV1ByBuild = new Version(1, 1, 3, 3);
+    // greater than v1Base by Minor
+    var gtV1ByMinor = new Version(1, 2, 2, 3);
+    // greater than v1Base by Major
+    var gtV1ByMajor = new Version(2, 1, 2, 3);
+
+    expect(v1Copy.eq(v1Base)).toBe(true);
+    expect(v1Copy.gte(v1Base)).toBe(true);
+    expect(v1Copy.gt(v1Base)).toBe(false);
+
+    expect(gtV1ByQfe.eq(v1Base)).toBe(false);
+    expect(gtV1ByQfe.gte(v1Base)).toBe(true);
+    expect(gtV1ByQfe.gt(v1Base)).toBe(true);
+
+    expect(gtV1ByBuild.eq(v1Base)).toBe(false);
+    expect(gtV1ByBuild.gte(v1Base)).toBe(true);
+    expect(gtV1ByBuild.gt(v1Base)).toBe(true);
+
+    expect(gtV1ByMinor.eq(v1Base)).toBe(false);
+    expect(gtV1ByMinor.gte(v1Base)).toBe(true);
+    expect(gtV1ByMinor.gt(v1Base)).toBe(true);
+
+    expect(gtV1ByMajor.eq(v1Base)).toBe(false);
+    expect(gtV1ByMajor.gte(v1Base)).toBe(true);
+    expect(gtV1ByMajor.gt(v1Base)).toBe(true);
+});
+
+describe('Version equality tests integrate with Array sort and toString() as expected.', function() {
+
+    var v1Base = new Version(1, 1, 2, 3);
+    // equal to v1Base
+    var v1Copy = new Version(1, 1, 2, 3);
+    // greater than v1Base by QFE
+    var gtV1ByQfe = new Version(1, 1, 2, 4);
+    // greater than v1Base by Build
+    var gtV1ByBuild = new Version(1, 1, 3, 3);
+    // greater than v1Base by Minor
+    var gtV1ByMinor = new Version(1, 2, 2, 3);
+    // greater than v1Base by Major
+    var gtV1ByMajor = new Version(2, 1, 2, 3);
+
+    var toTest = [gtV1ByBuild, gtV1ByMajor, v1Copy, gtV1ByMinor, gtV1ByQfe, v1Base];
+    toTest.sort(Version.comparer);
+
+    expect(toTest.join(',')).toBe('1.1.2.3,1.1.2.3,1.1.2.4,1.1.3.3,1.2.2.3,2.1.2.3');
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/spec/unit/build.spec.js
----------------------------------------------------------------------
diff --git a/spec/unit/build.spec.js b/spec/unit/build.spec.js
index 37f5d94..1323f6f 100644
--- a/spec/unit/build.spec.js
+++ b/spec/unit/build.spec.js
@@ -44,11 +44,17 @@ function createConfigParserMock(winVersion, phoneVersion) {
         return {
             getPreference: function(prefName) {
                 switch (prefName) {
-                    case 'windows-target-version':
+                    case 'WindowsTargetVersion':
                         return winVersion;
-                    case 'windows-phone-target-version':
+                    case 'WindowsPhoneTargetVersion':
                         return phoneVersion;
                 }
+            },
+            getWindowsTargetVersion: function() {
+                return winVersion;
+            },
+            getWindowsPhoneTargetVersion: function() {
+                return phoneVersion;
             }
         };
     });
@@ -235,6 +241,7 @@ describe('run method', function() {
         build.__set__('utils.isCordovaProject', isCordovaProjectTrue);
         createFindAvailableVersionMock('4.0', testPath, buildSpy);
         build.__set__('prepare.applyPlatformConfig', function() {} );
+        createConfigParserMock('8.0');
 
         build.run([ 'node', buildPath, '--win' ])
         .finally(function() {
@@ -258,7 +265,7 @@ describe('run method', function() {
         });
     });
 
-    it('spec.10 should throw an error if windows-target-version has unsupported value', function(done) {
+    it('spec.10 should throw an error if WindowsTargetVersion has unsupported value', function(done) {
         var buildSpy = jasmine.createSpy(),
             errorSpy = jasmine.createSpy();
 
@@ -294,7 +301,7 @@ describe('run method', function() {
         });
     });
 
-    it('spec.12 should throw an error if windows-phone-target-version has unsupported value', function(done) {
+    it('spec.12 should throw an error if WindowsPhoneTargetVersion has unsupported value', function(done) {
         var buildSpy = jasmine.createSpy(),
             errorSpy = jasmine.createSpy();
 

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/spec/unit/package.spec.js
----------------------------------------------------------------------
diff --git a/spec/unit/package.spec.js b/spec/unit/package.spec.js
index 89478b5..cc7be6f 100644
--- a/spec/unit/package.spec.js
+++ b/spec/unit/package.spec.js
@@ -19,6 +19,7 @@
 var path = require('path'),
     rewire = require('rewire'),
     shell = require('shelljs'),
+    Q = require('q'),
     platformRoot = '../../template',
     pkgRoot = './template/',
     pkgPath = path.join(pkgRoot, 'AppPackages'),
@@ -51,7 +52,7 @@ describe('getPackage method', function() {
             expect(pkgInfo.type).toBe('windows80');
             expect(pkgInfo.buildtype).toBe('debug');
             expect(pkgInfo.arch).toBe('anycpu');
-            expect(pkgInfo.file).toBeDefined();
+            expect(pkgInfo.script).toBeDefined();
         }, rejected)
         .finally(function() {
             expect(rejected).not.toHaveBeenCalled();
@@ -67,7 +68,7 @@ describe('getPackage method', function() {
             expect(pkgInfo.type).toBe('phone');
             expect(pkgInfo.buildtype).toBe('debug');
             expect(pkgInfo.arch).toBe('anycpu');
-            expect(pkgInfo.file).toBeDefined();
+            expect(pkgInfo.script).toBeDefined();
         }, rejected)
         .finally(function() {
             expect(rejected).not.toHaveBeenCalled();
@@ -100,7 +101,7 @@ describe('getPackage method', function() {
     it('spec.5 should not find windows 8.0 x86 debug package', function(done) {
         var resolved = jasmine.createSpy();
 
-        pkg.getPackage('windows', 'debug', 'x86')
+        pkg.getPackage('windows80', 'debug', 'x86')
         .then(resolved)
         .finally(function() {
             expect(resolved).not.toHaveBeenCalled();
@@ -155,7 +156,7 @@ describe('getAppId method', function() {
     it('spec.10 should properly get phoneProductId value from manifest', function(done) {
         var resolve = jasmine.createSpy();
 
-        pkg.getAppId(pkgRoot)
+        Q(pkg.getAppId(pkgRoot))
         .then(resolve)
         .finally(function() {
             expect(resolve).toHaveBeenCalledWith('$guid1$');
@@ -168,7 +169,7 @@ describe('getPackageName method', function() {
     it('spec.11 should properly get Application Id value from manifest', function(done) {
         var resolve = jasmine.createSpy();
 
-        pkg.getAppId(pkgRoot)
+        Q(pkg.getAppId(pkgRoot))
         .then(resolve)
         .finally(function() {
             expect(resolve).toHaveBeenCalledWith('$guid1$');

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/spec/unit/run.spec.js
----------------------------------------------------------------------
diff --git a/spec/unit/run.spec.js b/spec/unit/run.spec.js
index 94978a3..3a28861 100644
--- a/spec/unit/run.spec.js
+++ b/spec/unit/run.spec.js
@@ -140,7 +140,7 @@ describe('run method', function() {
                 file: 'testfile'
             });
         });
-        run.__set__('packages.deployToPhone', function() {
+        run.__set__('packages.deployToPhoneAndRun', function() {
             deployToPhone();
             return Q();
         });

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/template/CordovaApp.Windows10.jsproj
----------------------------------------------------------------------
diff --git a/template/CordovaApp.Windows10.jsproj b/template/CordovaApp.Windows10.jsproj
new file mode 100644
index 0000000..1cbdb1f
--- /dev/null
+++ b/template/CordovaApp.Windows10.jsproj
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+-->
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <OutputPath>build\windows\$(Configuration)\$(Platform)\</OutputPath>
+    <IntermediateOutputPath>build\windows\bld\</IntermediateOutputPath>
+    <AppxPackageSigningEnabled>true</AppxPackageSigningEnabled>
+  </PropertyGroup>
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|AnyCPU">
+      <Configuration>Debug</Configuration>
+      <Platform>AnyCPU</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|ARM">
+      <Configuration>Debug</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x86">
+      <Configuration>Debug</Configuration>
+      <Platform>x86</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|AnyCPU">
+      <Configuration>Release</Configuration>
+      <Platform>AnyCPU</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|ARM">
+      <Configuration>Release</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x86">
+      <Configuration>Release</Configuration>
+      <Platform>x86</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>f9b0ae20-c91c-42b9-9c6e-d3bc28b4509e</ProjectGuid>
+  </PropertyGroup>
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0'">
+    <VisualStudioVersion>14.0</VisualStudioVersion>
+  </PropertyGroup>
+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\$(WMSJSProjectDirectory)\Microsoft.VisualStudio.$(WMSJSProject).Default.props" />
+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\$(WMSJSProjectDirectory)\Microsoft.VisualStudio.$(WMSJSProject).props" />
+  <PropertyGroup>
+    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
+    <TargetPlatformVersion>10.0.10030.0</TargetPlatformVersion>
+    <TargetPlatformMinVersion>10.0.10030.0</TargetPlatformMinVersion>
+    <MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
+    <DefaultLanguage>en-US</DefaultLanguage>
+    <PackageCertificateKeyFile>CordovaApp_TemporaryKey.pfx</PackageCertificateKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <AppxManifest Include="package.windows10.appxmanifest">
+      <SubType>Designer</SubType>
+    </AppxManifest>
+    <Content Include="images\*.png" Exclude="images\*.scale-240.*" />
+    <Content Include="WinJS\css\ui-dark.css" />
+    <Content Include="WinJS\css\ui-light.css" />
+    <Content Include="WinJS\fonts\Symbols.ttf" />
+    <Content Include="WinJS\js\en-US\ui.strings.js" />
+    <Content Include="WinJS\js\WinJS.js" />
+    <None Include="WinJS\js\WinJS.intellisense.js" />
+    <None Include="WinJS\js\WinJS.intellisense-setup.js" />
+    <None Include="CordovaApp_TemporaryKey.pfx" />
+  </ItemGroup>
+  <Import Project="CordovaApp.projitems" Label="Shared" />
+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\$(WMSJSProjectDirectory)\Microsoft.VisualStudio.$(WMSJSProject).targets" />
+  <!-- To modify your build process, add your task inside one of the targets below then uncomment
+       that target and the DisableFastUpToDateCheck PropertyGroup. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  <PropertyGroup>
+    <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
+  </PropertyGroup>
+  -->
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/template/CordovaApp.sln
----------------------------------------------------------------------
diff --git a/template/CordovaApp.sln b/template/CordovaApp.sln
index 71caade..808a6aa 100644
--- a/template/CordovaApp.sln
+++ b/template/CordovaApp.sln
@@ -1,6 +1,6 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
+# Visual Studio 14
 #
 # Licensed to the Apache Software Foundation (ASF) under one
 # or more contributor license agreements.  See the NOTICE file
@@ -19,7 +19,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
 # specific language governing permissions and limitations
 # under the License.
 #
-VisualStudioVersion = 12.0.30324.0
+VisualStudioVersion = 14.0.22803.0
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CordovaApp", "CordovaApp", "{3A47E08D-7EA5-4F3F-AA6D-1D4A41F26944}"
 EndProject
@@ -31,11 +31,14 @@ Project("{262852C6-CD72-467D-83FE-5EEB1973A190}") = "CordovaApp.Windows", "Cordo
 EndProject
 Project("{262852C6-CD72-467D-83FE-5EEB1973A190}") = "CordovaApp.Phone", "CordovaApp.Phone.jsproj", "{31B67A35-9503-4213-857E-F44EB42AE549}"
 EndProject
+Project("{262852C6-CD72-467D-83FE-5EEB1973A190}") = "CordovaApp.Windows10", "CordovaApp.Windows10.jsproj", "{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}"
+EndProject
 Global
 	GlobalSection(SharedMSBuildProjectFiles) = preSolution
 		CordovaApp.projitems*{58950fb6-2f93-4963-b9cd-637f83f3efbf}*SharedItemsImports = 5
 		CordovaApp.projitems*{efffab2f-bfc5-4eda-b545-45ef4995f55a}*SharedItemsImports = 5
 		CordovaApp.projitems*{9ebdb27f-d75b-4d8c-b53f-7be4a1fe89f9}*SharedItemsImports = 13
+		CordovaApp.projitems*{f9b0ae20-c91c-42b9-9c6e-d3bc28b4509e}*SharedItemsImports = 5
 		CordovaApp.projitems*{31b67a35-9503-4213-857e-f44eb42ae549}*SharedItemsImports = 5
 	EndGlobalSection
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -121,6 +124,30 @@ Global
 		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|x86.ActiveCfg = Release|x86
 		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|x86.Build.0 = Release|x86
 		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A}.Release|x86.Deploy.0 = Release|x86
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}.Debug|ARM.ActiveCfg = Debug|ARM
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}.Debug|ARM.Build.0 = Debug|ARM
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}.Debug|ARM.Deploy.0 = Debug|ARM
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}.Debug|x64.ActiveCfg = Debug|x64
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}.Debug|x64.Build.0 = Debug|x64
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}.Debug|x64.Deploy.0 = Debug|x64
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}.Debug|x86.ActiveCfg = Debug|x86
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}.Debug|x86.Build.0 = Debug|x86
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}.Debug|x86.Deploy.0 = Debug|x86
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}.Release|Any CPU.Deploy.0 = Release|Any CPU
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}.Release|ARM.ActiveCfg = Release|ARM
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}.Release|ARM.Build.0 = Release|ARM
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}.Release|ARM.Deploy.0 = Release|ARM
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}.Release|x64.ActiveCfg = Release|x64
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}.Release|x64.Build.0 = Release|x64
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}.Release|x64.Deploy.0 = Release|x64
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}.Release|x86.ActiveCfg = Release|x86
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}.Release|x86.Build.0 = Release|x86
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E}.Release|x86.Deploy.0 = Release|x86
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -130,5 +157,6 @@ Global
 		{58950FB6-2F93-4963-B9CD-637F83F3EFBF} = {3A47E08D-7EA5-4F3F-AA6D-1D4A41F26944}
 		{31B67A35-9503-4213-857E-F44EB42AE549} = {3A47E08D-7EA5-4F3F-AA6D-1D4A41F26944}
 		{EFFFAB2F-BFC5-4EDA-B545-45EF4995F55A} = {3A47E08D-7EA5-4F3F-AA6D-1D4A41F26944}
+		{F9B0AE20-C91C-42B9-9C6E-D3BC28B4509E} = {3A47E08D-7EA5-4F3F-AA6D-1D4A41F26944}
 	EndGlobalSection
 EndGlobal


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


[6/7] cordova-windows git commit: CB-8923 Add support for Windows 10 platform

Posted by ax...@apache.org.
http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/0d2387d9/template/WinJS/css/ui-dark.css
----------------------------------------------------------------------
diff --git a/template/WinJS/css/ui-dark.css b/template/WinJS/css/ui-dark.css
new file mode 100644
index 0000000..b5022b7
--- /dev/null
+++ b/template/WinJS/css/ui-dark.css
@@ -0,0 +1,7663 @@
+/* Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. */
+@keyframes WinJS-node-inserted {
+  from {
+    outline-color: #000;
+  }
+  to {
+    outline-color: #001;
+  }
+}
+@keyframes WinJS-opacity-in {
+  from {
+    opacity: 0;
+  }
+  to {
+    opacity: 1;
+  }
+}
+@keyframes WinJS-opacity-out {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+  }
+}
+@keyframes WinJS-scale-up {
+  from {
+    transform: scale(0.85);
+  }
+  to {
+    transform: scale(1);
+  }
+}
+@keyframes WinJS-scale-down {
+  from {
+    transform: scale(1);
+  }
+  to {
+    transform: scale(0.85);
+  }
+}
+@keyframes WinJS-default-remove {
+  from {
+    transform: translateX(11px);
+  }
+  to {
+    transform: none;
+  }
+}
+@keyframes WinJS-default-remove-rtl {
+  from {
+    transform: translateX(-11px);
+  }
+  to {
+    transform: none;
+  }
+}
+@keyframes WinJS-default-apply {
+  from {
+    transform: none;
+  }
+  to {
+    transform: translateX(11px);
+  }
+}
+@keyframes WinJS-default-apply-rtl {
+  from {
+    transform: none;
+  }
+  to {
+    transform: translateX(-11px);
+  }
+}
+@keyframes WinJS-showEdgeUI {
+  from {
+    transform: translateY(-70px);
+  }
+  to {
+    transform: none;
+  }
+}
+@keyframes WinJS-showPanel {
+  from {
+    transform: translateX(364px);
+  }
+  to {
+    transform: none;
+  }
+}
+@keyframes WinJS-showPanel-rtl {
+  from {
+    transform: translateX(-364px);
+  }
+  to {
+    transform: none;
+  }
+}
+@keyframes WinJS-hideEdgeUI {
+  from {
+    transform: none;
+  }
+  to {
+    transform: translateY(-70px);
+  }
+}
+@keyframes WinJS-hidePanel {
+  from {
+    transform: none;
+  }
+  to {
+    transform: translateX(364px);
+  }
+}
+@keyframes WinJS-hidePanel-rtl {
+  from {
+    transform: none;
+  }
+  to {
+    transform: translateX(-364px);
+  }
+}
+@keyframes WinJS-showPopup {
+  from {
+    transform: translateY(50px);
+  }
+  to {
+    transform: none;
+  }
+}
+@keyframes WinJS-dragSourceEnd {
+  from {
+    transform: translateX(11px) scale(1.05);
+  }
+  to {
+    transform: none;
+  }
+}
+@keyframes WinJS-dragSourceEnd-rtl {
+  from {
+    transform: translateX(-11px) scale(1.05);
+  }
+  to {
+    transform: none;
+  }
+}
+@keyframes WinJS-enterContent {
+  from {
+    transform: translateY(28px);
+  }
+  to {
+    transform: none;
+  }
+}
+@keyframes WinJS-exit {
+  from {
+    transform: none;
+  }
+  to {
+    transform: none;
+  }
+}
+@keyframes WinJS-enterPage {
+  from {
+    transform: translateY(28px);
+  }
+  to {
+    transform: none;
+  }
+}
+@keyframes WinJS-updateBadge {
+  from {
+    transform: translateY(24px);
+  }
+  to {
+    transform: none;
+  }
+}
+@-webkit-keyframes WinJS-node-inserted {
+  from {
+    outline-color: #000;
+  }
+  to {
+    outline-color: #001;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-opacity-in {
+  from {
+    opacity: 0;
+  }
+  to {
+    opacity: 1;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-opacity-out {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-scale-up {
+  from {
+    -webkit-transform: scale(0.85);
+  }
+  to {
+    -webkit-transform: scale(1);
+  }
+}
+@-webkit-keyframes -webkit-WinJS-scale-down {
+  from {
+    -webkit-transform: scale(1);
+  }
+  to {
+    -webkit-transform: scale(0.85);
+  }
+}
+@-webkit-keyframes -webkit-WinJS-default-remove {
+  from {
+    -webkit-transform: translateX(11px);
+  }
+  to {
+    -webkit-transform: none;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-default-remove-rtl {
+  from {
+    -webkit-transform: translateX(-11px);
+  }
+  to {
+    -webkit-transform: none;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-default-apply {
+  from {
+    -webkit-transform: none;
+  }
+  to {
+    -webkit-transform: translateX(11px);
+  }
+}
+@-webkit-keyframes -webkit-WinJS-default-apply-rtl {
+  from {
+    -webkit-transform: none;
+  }
+  to {
+    -webkit-transform: translateX(-11px);
+  }
+}
+@-webkit-keyframes -webkit-WinJS-showEdgeUI {
+  from {
+    -webkit-transform: translateY(-70px);
+  }
+  to {
+    -webkit-transform: none;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-showPanel {
+  from {
+    -webkit-transform: translateX(364px);
+  }
+  to {
+    -webkit-transform: none;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-showPanel-rtl {
+  from {
+    -webkit-transform: translateX(-364px);
+  }
+  to {
+    -webkit-transform: none;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-hideEdgeUI {
+  from {
+    -webkit-transform: none;
+  }
+  to {
+    -webkit-transform: translateY(-70px);
+  }
+}
+@-webkit-keyframes -webkit-WinJS-hidePanel {
+  from {
+    -webkit-transform: none;
+  }
+  to {
+    -webkit-transform: translateX(364px);
+  }
+}
+@-webkit-keyframes -webkit-WinJS-hidePanel-rtl {
+  from {
+    -webkit-transform: none;
+  }
+  to {
+    -webkit-transform: translateX(-364px);
+  }
+}
+@-webkit-keyframes -webkit-WinJS-showPopup {
+  from {
+    -webkit-transform: translateY(50px);
+  }
+  to {
+    -webkit-transform: none;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-dragSourceEnd {
+  from {
+    -webkit-transform: translateX(11px) scale(1.05);
+  }
+  to {
+    -webkit-transform: none;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-dragSourceEnd-rtl {
+  from {
+    -webkit-transform: translateX(-11px) scale(1.05);
+  }
+  to {
+    -webkit-transform: none;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-enterContent {
+  from {
+    -webkit-transform: translateY(28px);
+  }
+  to {
+    -webkit-transform: none;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-exit {
+  from {
+    -webkit-transform: none;
+  }
+  to {
+    -webkit-transform: none;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-enterPage {
+  from {
+    -webkit-transform: translateY(28px);
+  }
+  to {
+    -webkit-transform: none;
+  }
+}
+@-webkit-keyframes -webkit-WinJS-updateBadge {
+  from {
+    -webkit-transform: translateY(24px);
+  }
+  to {
+    -webkit-transform: none;
+  }
+}
+@font-face {
+  font-family: "Segoe UI Command";
+  src: local("Segoe MDL2 Assets");
+  font-weight: normal;
+  font-style: normal;
+}
+@font-face {
+  font-family: "Symbols";
+  src: url(../fonts/Symbols.ttf);
+}
+.win-type-xx-large {
+  font-size: 46px;
+  font-weight: 200;
+  line-height: 1.216;
+  letter-spacing: 0px;
+}
+.win-type-x-large {
+  font-size: 34px;
+  font-weight: 200;
+  line-height: 1.176;
+}
+.win-type-large {
+  font-size: 24px;
+  font-weight: 300;
+  line-height: 1.167;
+}
+.win-type-medium {
+  font-size: 20px;
+  font-weight: 400;
+  line-height: 1.2;
+}
+.win-type-small {
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 1.333;
+}
+.win-type-x-small {
+  font-size: 15px;
+  font-weight: 500;
+  line-height: 1.333;
+}
+.win-type-xx-small {
+  font-size: 12px;
+  font-weight: 400;
+  line-height: 1.167;
+}
+@font-face {
+  font-family: "Segoe UI";
+  font-weight: 200;
+  src: local("Segoe UI Light");
+}
+@font-face {
+  font-family: "Segoe UI";
+  font-weight: 300;
+  src: local("Segoe UI Semilight");
+}
+@font-face {
+  font-family: "Segoe UI";
+  font-weight: 400;
+  src: local("Segoe UI");
+}
+@font-face {
+  font-family: "Segoe UI";
+  font-weight: 500;
+  src: local("Segoe UI Semibold");
+}
+@font-face {
+  font-family: "Segoe UI";
+  font-weight: 600;
+  src: local("Segoe UI Bold");
+}
+@font-face {
+  font-family: "Segoe UI";
+  font-style: italic;
+  font-weight: 400;
+  src: local("Segoe UI Italic");
+}
+@font-face {
+  font-family: "Segoe UI";
+  font-style: italic;
+  font-weight: 700;
+  src: local("Segoe UI Bold Italic");
+}
+@font-face {
+  font-family: "Segoe WP";
+  font-weight: 300;
+  src: local("Segoe WP Light");
+}
+@font-face {
+  font-family: "Segoe WP";
+  font-weight: 600;
+  src: local("Segoe WP Semilight");
+}
+@font-face {
+  font-family: "Segoe WP";
+  font-weight: 500;
+  src: local("Segoe WP");
+}
+@font-face {
+  font-family: "Segoe WP";
+  font-weight: 400;
+  src: local("Segoe WP");
+}
+@font-face {
+  font-family: "Segoe WP";
+  font-weight: 700;
+  src: local("Segoe WP Bold");
+}
+@font-face {
+  font-family: "Segoe WP";
+  font-style: italic;
+  font-weight: 500;
+  src: local("Segoe WP Italic");
+}
+@font-face {
+  font-family: "Segoe WP";
+  font-style: italic;
+  font-weight: 700;
+  src: local("Segoe WP Bold Italic");
+}
+@font-face {
+  font-family: "Microsoft Yahei UI";
+  font-weight: 200;
+  src: local("Microsoft Yahei UI Light");
+}
+@font-face {
+  font-family: "Microsoft Yahei UI";
+  font-weight: 300;
+  src: local("Microsoft Yahei UI");
+}
+@font-face {
+  font-family: "Microsoft Yahei UI";
+  font-weight: 500;
+  src: local("Microsoft Yahei UI");
+}
+@font-face {
+  font-family: "Microsoft Yahei UI";
+  font-weight: 600;
+  src: local("Microsoft Yahei UI Bold");
+}
+@font-face {
+  font-family: "Microsoft JhengHei UI";
+  font-weight: 200;
+  src: local("Microsoft JhengHei UI Light");
+}
+@font-face {
+  font-family: "Microsoft JhengHei UI";
+  font-weight: 300;
+  src: local("Microsoft JhengHei UI");
+}
+@font-face {
+  font-family: "Microsoft JhengHei UI";
+  font-weight: 500;
+  src: local("Microsoft JhengHei UI");
+}
+@font-face {
+  font-family: "Microsoft JhengHei UI";
+  font-weight: 600;
+  src: local("Microsoft JhengHei UI Bold");
+}
+body:-ms-lang(am, ti),
+.win-type-xx-large:-ms-lang(am, ti),
+.win-type-x-large:-ms-lang(am, ti),
+.win-type-large:-ms-lang(am, ti),
+.win-type-medium:-ms-lang(am, ti),
+.win-type-small:-ms-lang(am, ti),
+.win-type-x-small:-ms-lang(am, ti),
+.win-type-xx-small:-ms-lang(am, ti),
+input:-ms-lang(am, ti),
+textarea:-ms-lang(am, ti),
+.win-textarea:-ms-lang(am, ti),
+button:-ms-lang(am, ti),
+select:-ms-lang(am, ti),
+option:-ms-lang(am, ti) {
+  font-family: "Ebrima", "Ebrima", "Nirmala UI", "Gadugi", "Segoe UI Emoji", "Segoe MDL2 Assets", "Symbols", "Yu Gothic UI", "Yu Gothic", "Meiryo UI", "Leelawadee UI", "Microsoft YaHei UI", "Microsoft JhengHei UI", "Malgun Gothic", "Segoe UI Historic", "Estrangelo Edessa", "Microsoft Himalaya", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Tai Le", "Microsoft Yi Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text", "Javanese Text", "Cambria Math";
+}
+body:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+.win-type-xx-large:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+.win-type-x-large:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+.win-type-large:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+.win-type-medium:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+.win-type-small:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+.win-type-x-small:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+.win-type-xx-small:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+input:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+textarea:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+.win-textarea:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+button:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+select:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te),
+option:-ms-lang(as, bn, gu, hi, kn, kok, ml, mr, ne, or, pa, sat-Olck, si, srb-Sora, ta, te) {
+  font-family: "Nirmala UI", "Ebrima", "Nirmala UI", "Gadugi", "Segoe UI Emoji", "Segoe MDL2 Assets", "Symbols", "Yu Gothic UI", "Yu Gothic", "Meiryo UI", "Leelawadee UI", "Microsoft YaHei UI", "Microsoft JhengHei UI", "Malgun Gothic", "Segoe UI Historic", "Estrangelo Edessa", "Microsoft Himalaya", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Tai Le", "Microsoft Yi Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text", "Javanese Text", "Cambria Math";
+}
+body:-ms-lang(chr-CHER-US),
+.win-type-xx-large:-ms-lang(chr-CHER-US),
+.win-type-x-large:-ms-lang(chr-CHER-US),
+.win-type-large:-ms-lang(chr-CHER-US),
+.win-type-medium:-ms-lang(chr-CHER-US),
+.win-type-small:-ms-lang(chr-CHER-US),
+.win-type-x-small:-ms-lang(chr-CHER-US),
+.win-type-xx-small:-ms-lang(chr-CHER-US),
+input:-ms-lang(chr-CHER-US),
+textarea:-ms-lang(chr-CHER-US),
+.win-textarea:-ms-lang(chr-CHER-US),
+button:-ms-lang(chr-CHER-US),
+select:-ms-lang(chr-CHER-US),
+option:-ms-lang(chr-CHER-US) {
+  font-family: "Gadugi", "Ebrima", "Nirmala UI", "Gadugi", "Segoe UI Emoji", "Segoe MDL2 Assets", "Symbols", "Yu Gothic UI", "Yu Gothic", "Meiryo UI", "Leelawadee UI", "Microsoft YaHei UI", "Microsoft JhengHei UI", "Malgun Gothic", "Segoe UI Historic", "Estrangelo Edessa", "Microsoft Himalaya", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Tai Le", "Microsoft Yi Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text", "Javanese Text", "Cambria Math";
+}
+body:-ms-lang(ja),
+.win-type-xx-large:-ms-lang(ja),
+.win-type-x-large:-ms-lang(ja),
+.win-type-large:-ms-lang(ja),
+.win-type-medium:-ms-lang(ja),
+.win-type-small:-ms-lang(ja),
+.win-type-x-small:-ms-lang(ja),
+.win-type-xx-small:-ms-lang(ja),
+input:-ms-lang(ja),
+textarea:-ms-lang(ja),
+.win-textarea:-ms-lang(ja),
+button:-ms-lang(ja),
+select:-ms-lang(ja),
+option:-ms-lang(ja) {
+  font-family: "Yu Gothic UI", "Ebrima", "Nirmala UI", "Gadugi", "Segoe UI Emoji", "Segoe MDL2 Assets", "Symbols", "Yu Gothic UI", "Yu Gothic", "Meiryo UI", "Leelawadee UI", "Microsoft YaHei UI", "Microsoft JhengHei UI", "Malgun Gothic", "Segoe UI Historic", "Estrangelo Edessa", "Microsoft Himalaya", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Tai Le", "Microsoft Yi Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text", "Javanese Text", "Cambria Math";
+}
+body:-ms-lang(km, lo, th, bug-Bugi),
+.win-type-xx-large:-ms-lang(km, lo, th, bug-Bugi),
+.win-type-x-large:-ms-lang(km, lo, th, bug-Bugi),
+.win-type-large:-ms-lang(km, lo, th, bug-Bugi),
+.win-type-medium:-ms-lang(km, lo, th, bug-Bugi),
+.win-type-small:-ms-lang(km, lo, th, bug-Bugi),
+.win-type-x-small:-ms-lang(km, lo, th, bug-Bugi),
+.win-type-xx-small:-ms-lang(km, lo, th, bug-Bugi),
+input:-ms-lang(km, lo, th, bug-Bugi),
+textarea:-ms-lang(km, lo, th, bug-Bugi),
+.win-textarea:-ms-lang(km, lo, th, bug-Bugi),
+button:-ms-lang(km, lo, th, bug-Bugi),
+select:-ms-lang(km, lo, th, bug-Bugi),
+option:-ms-lang(km, lo, th, bug-Bugi) {
+  font-family: "Leelawadee UI", "Ebrima", "Nirmala UI", "Gadugi", "Segoe UI Emoji", "Segoe MDL2 Assets", "Symbols", "Yu Gothic UI", "Yu Gothic", "Meiryo UI", "Leelawadee UI", "Microsoft YaHei UI", "Microsoft JhengHei UI", "Malgun Gothic", "Segoe UI Historic", "Estrangelo Edessa", "Microsoft Himalaya", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Tai Le", "Microsoft Yi Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text", "Javanese Text", "Cambria Math";
+}
+body:-ms-lang(ko),
+.win-type-xx-large:-ms-lang(ko),
+.win-type-x-large:-ms-lang(ko),
+.win-type-large:-ms-lang(ko),
+.win-type-medium:-ms-lang(ko),
+.win-type-small:-ms-lang(ko),
+.win-type-x-small:-ms-lang(ko),
+.win-type-xx-small:-ms-lang(ko),
+input:-ms-lang(ko),
+textarea:-ms-lang(ko),
+.win-textarea:-ms-lang(ko),
+button:-ms-lang(ko),
+select:-ms-lang(ko),
+option:-ms-lang(ko) {
+  font-family: "Malgun Gothic", "Ebrima", "Nirmala UI", "Gadugi", "Segoe UI Emoji", "Segoe MDL2 Assets", "Symbols", "Yu Gothic UI", "Yu Gothic", "Meiryo UI", "Leelawadee UI", "Microsoft YaHei UI", "Microsoft JhengHei UI", "Malgun Gothic", "Segoe UI Historic", "Estrangelo Edessa", "Microsoft Himalaya", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Tai Le", "Microsoft Yi Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text", "Javanese Text", "Cambria Math";
+}
+body:-ms-lang(jv-Java),
+.win-type-xx-large:-ms-lang(jv-Java),
+.win-type-x-large:-ms-lang(jv-Java),
+.win-type-large:-ms-lang(jv-Java),
+.win-type-medium:-ms-lang(jv-Java),
+.win-type-small:-ms-lang(jv-Java),
+.win-type-x-small:-ms-lang(jv-Java),
+.win-type-xx-small:-ms-lang(jv-Java),
+input:-ms-lang(jv-Java),
+textarea:-ms-lang(jv-Java),
+.win-textarea:-ms-lang(jv-Java),
+button:-ms-lang(jv-Java),
+select:-ms-lang(jv-Java),
+option:-ms-lang(jv-Java) {
+  font-family: "Javanese Text", "Ebrima", "Nirmala UI", "Gadugi", "Segoe UI Emoji", "Segoe MDL2 Assets", "Symbols", "Yu Gothic UI", "Yu Gothic", "Meiryo UI", "Leelawadee UI", "Microsoft YaHei UI", "Microsoft JhengHei UI", "Malgun Gothic", "Segoe UI Historic", "Estrangelo Edessa", "Microsoft Himalaya", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Tai Le", "Microsoft Yi Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text", "Javanese Text", "Cambria Math";
+}
+body:-ms-lang(cop-Copt),
+.win-type-xx-large:-ms-lang(cop-Copt),
+.win-type-x-large:-ms-lang(cop-Copt),
+.win-type-large:-ms-lang(cop-Copt),
+.win-type-medium:-ms-lang(cop-Copt),
+.win-type-small:-ms-lang(cop-Copt),
+.win-type-x-small:-ms-lang(cop-Copt),
+.win-type-xx-small:-ms-lang(cop-Copt),
+input:-ms-lang(cop-Copt),
+textarea:-ms-lang(cop-Copt),
+.win-textarea:-ms-lang(cop-Copt),
+button:-ms-lang(cop-Copt),
+select:-ms-lang(cop-Copt),
+option:-ms-lang(cop-Copt) {
+  font-family: "Segoe MDL2 Assets", "Ebrima", "Nirmala UI", "Gadugi", "Segoe UI Emoji", "Segoe MDL2 Assets", "Symbols", "Yu Gothic UI", "Yu Gothic", "Meiryo UI", "Leelawadee UI", "Microsoft YaHei UI", "Microsoft JhengHei UI", "Malgun Gothic", "Segoe UI Historic", "Estrangelo Edessa", "Microsoft Himalaya", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Tai Le", "Microsoft Yi Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text", "Javanese Text", "Cambria Math";
+}
+body:-ms-lang(zh-CN, zh-Hans, zh-SG),
+.win-type-xx-large:-ms-lang(zh-CN, zh-Hans, zh-SG),
+.win-type-x-large:-ms-lang(zh-CN, zh-Hans, zh-SG),
+.win-type-large:-ms-lang(zh-CN, zh-Hans, zh-SG),
+.win-type-medium:-ms-lang(zh-CN, zh-Hans, zh-SG),
+.win-type-small:-ms-lang(zh-CN, zh-Hans, zh-SG),
+.win-type-x-small:-ms-lang(zh-CN, zh-Hans, zh-SG),
+.win-type-xx-small:-ms-lang(zh-CN, zh-Hans, zh-SG),
+input:-ms-lang(zh-CN, zh-Hans, zh-SG),
+textarea:-ms-lang(zh-CN, zh-Hans, zh-SG),
+.win-textarea:-ms-lang(zh-CN, zh-Hans, zh-SG),
+button:-ms-lang(zh-CN, zh-Hans, zh-SG),
+select:-ms-lang(zh-CN, zh-Hans, zh-SG),
+option:-ms-lang(zh-CN, zh-Hans, zh-SG) {
+  font-family: "Microsoft YaHei UI", "Ebrima", "Nirmala UI", "Gadugi", "Segoe UI Emoji", "Segoe MDL2 Assets", "Symbols", "Yu Gothic UI", "Yu Gothic", "Meiryo UI", "Leelawadee UI", "Microsoft YaHei UI", "Microsoft JhengHei UI", "Malgun Gothic", "Segoe UI Historic", "Estrangelo Edessa", "Microsoft Himalaya", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Tai Le", "Microsoft Yi Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text", "Javanese Text", "Cambria Math";
+}
+body:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+.win-type-xx-large:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+.win-type-x-large:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+.win-type-large:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+.win-type-medium:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+.win-type-small:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+.win-type-x-small:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+.win-type-xx-small:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+input:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+textarea:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+.win-textarea:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+button:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+select:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO),
+option:-ms-lang(zh-HK, zh-TW, zh-Hant, zh-MO) {
+  font-family: "Microsoft JhengHei UI", "Ebrima", "Nirmala UI", "Gadugi", "Segoe UI Emoji", "Segoe MDL2 Assets", "Symbols", "Yu Gothic UI", "Yu Gothic", "Meiryo UI", "Leelawadee UI", "Microsoft YaHei UI", "Microsoft JhengHei UI", "Malgun Gothic", "Segoe UI Historic", "Estrangelo Edessa", "Microsoft Himalaya", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Tai Le", "Microsoft Yi Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text", "Javanese Text", "Cambria Math";
+}
+html,
+body {
+  width: 100%;
+  height: 100%;
+  margin: 0px;
+  cursor: default;
+  -moz-user-select: none;
+  -webkit-touch-callout: none;
+  -webkit-user-select: none;
+  -khtml-user-select: none;
+  -ms-user-select: none;
+  -ms-scroll-translation: vertical-to-horizontal;
+  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+html {
+  overflow: hidden;
+  direction: ltr;
+}
+html:lang(ar),
+html:lang(dv),
+html:lang(fa),
+html:lang(he),
+html:lang(ku-Arab),
+html:lang(pa-Arab),
+html:lang(prs),
+html:lang(ps),
+html:lang(sd-Arab),
+html:lang(syr),
+html:lang(ug),
+html:lang(ur),
+html:lang(qps-plocm) {
+  direction: rtl;
+}
+body {
+  -ms-content-zooming: none;
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 1.333;
+}
+iframe {
+  border: 0;
+}
+body,
+.win-type-xx-large,
+.win-type-x-large,
+.win-type-large,
+.win-type-medium,
+.win-type-small,
+.win-type-x-small,
+.win-type-xx-small,
+input,
+textarea,
+.win-textarea,
+button,
+select,
+option {
+  font-family: "Segoe UI", "Segoe WP", sans-serif, "Segoe MDL2 Assets", "Symbols";
+}
+input:not([type]),
+input[type=""],
+input[type=text],
+input[type=password],
+input[type=email],
+input[type=number],
+input[type=tel],
+input[type=url],
+input[type=search],
+textarea,
+.win-textarea {
+  -ms-user-select: element;
+  border-style: solid;
+  border-width: 2px;
+  border-radius: 0;
+  margin: 8px 0px;
+  width: 296px;
+  min-width: 64px;
+  min-height: 28px;
+  background-clip: border-box;
+  box-sizing: border-box;
+  padding: 3px 6px 5px 10px;
+  outline: 0;
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 1.333;
+}
+input::-ms-value {
+  margin: 0;
+  padding: 0;
+}
+textarea,
+.win-textarea {
+  resize: none;
+  overflow-y: auto;
+}
+input[type=radio],
+input[type=checkbox] {
+  width: 20px;
+  height: 20px;
+  margin-right: 8px;
+  margin-top: 12px;
+  margin-bottom: 12px;
+}
+input[type=radio]:lang(ar),
+input[type=checkbox]:lang(ar),
+input[type=radio]:lang(dv),
+input[type=checkbox]:lang(dv),
+input[type=radio]:lang(fa),
+input[type=checkbox]:lang(fa),
+input[type=radio]:lang(he),
+input[type=checkbox]:lang(he),
+input[type=radio]:lang(ku-Arab),
+input[type=checkbox]:lang(ku-Arab),
+input[type=radio]:lang(pa-Arab),
+input[type=checkbox]:lang(pa-Arab),
+input[type=radio]:lang(prs),
+input[type=checkbox]:lang(prs),
+input[type=radio]:lang(ps),
+input[type=checkbox]:lang(ps),
+input[type=radio]:lang(sd-Arab),
+input[type=checkbox]:lang(sd-Arab),
+input[type=radio]:lang(syr),
+input[type=checkbox]:lang(syr),
+input[type=radio]:lang(ug),
+input[type=checkbox]:lang(ug),
+input[type=radio]:lang(ur),
+input[type=checkbox]:lang(ur),
+input[type=radio]:lang(qps-plocm),
+input[type=checkbox]:lang(qps-plocm) {
+  margin-left: 8px;
+  margin-right: 0px;
+}
+input::-ms-check {
+  border-style: solid;
+  display: inline-block;
+  border-width: 2px;
+  background-clip: border-box;
+}
+button,
+input[type=button],
+input[type=reset],
+input[type=submit],
+button[type=submit] {
+  border-style: solid;
+  margin: 0px;
+  min-height: 32px;
+  min-width: 120px;
+  padding: 4px 8px;
+  border-width: 2px;
+  background-clip: border-box;
+  border-radius: 0;
+  touch-action: manipulation;
+  -webkit-appearance: none;
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 1.333;
+}
+input::-ms-clear,
+input::-ms-reveal {
+  padding-right: 2px;
+  margin-right: -8px;
+  margin-left: 2px;
+  margin-top: -8px;
+  margin-bottom: -8px;
+  width: 30px;
+  height: 32px;
+}
+input:lang(ar)::-ms-clear,
+input:lang(dv)::-ms-clear,
+input:lang(fa)::-ms-clear,
+input:lang(he)::-ms-clear,
+input:lang(ku-Arab)::-ms-clear,
+input:lang(pa-Arab)::-ms-clear,
+input:lang(prs)::-ms-clear,
+input:lang(ps)::-ms-clear,
+input:lang(sd-Arab)::-ms-clear,
+input:lang(syr)::-ms-clear,
+input:lang(ug)::-ms-clear,
+input:lang(ur)::-ms-clear,
+input:lang(qps-plocm)::-ms-clear,
+input:lang(ar)::-ms-reveal,
+input:lang(dv)::-ms-reveal,
+input:lang(fa)::-ms-reveal,
+input:lang(he)::-ms-reveal,
+input:lang(ku-Arab)::-ms-reveal,
+input:lang(pa-Arab)::-ms-reveal,
+input:lang(prs)::-ms-reveal,
+input:lang(ps)::-ms-reveal,
+input:lang(sd-Arab)::-ms-reveal,
+input:lang(syr)::-ms-reveal,
+input:lang(ug)::-ms-reveal,
+input:lang(ur)::-ms-reveal,
+input:lang(qps-plocm)::-ms-reveal {
+  margin-left: -8px;
+  margin-right: 2px;
+}
+input[type=file] {
+  border: none;
+  min-width: 100px;
+  min-height: 20px;
+  width: 340px;
+  height: 32px;
+  padding: 0px;
+  margin: 7px 8px 21px 8px;
+  background-clip: padding-box;
+}
+input[type=file]::-ms-value {
+  margin: 0;
+  border-width: 2px;
+  border-style: solid;
+  border-right-style: none;
+  border-radius: 0;
+  background-clip: border-box;
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 1.333;
+}
+input[type=file]:lang(ar)::-ms-value,
+input[type=file]:lang(dv)::-ms-value,
+input[type=file]:lang(fa)::-ms-value,
+input[type=file]:lang(he)::-ms-value,
+input[type=file]:lang(ku-Arab)::-ms-value,
+input[type=file]:lang(pa-Arab)::-ms-value,
+input[type=file]:lang(prs)::-ms-value,
+input[type=file]:lang(ps)::-ms-value,
+input[type=file]:lang(sd-Arab)::-ms-value,
+input[type=file]:lang(syr)::-ms-value,
+input[type=file]:lang(ug)::-ms-value,
+input[type=file]:lang(ur)::-ms-value,
+input[type=file]:lang(qps-plocm)::-ms-value {
+  border-left-style: none;
+  border-right-style: solid;
+}
+input[type=file]::-ms-browse {
+  margin: 0;
+  padding: 0 18px;
+  border-width: 2px;
+  border-style: solid;
+  background-clip: padding-box;
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 1.333;
+}
+select {
+  min-width: 56px;
+  max-width: 368px;
+  min-height: 32px;
+  margin: 8px 0;
+  border-style: solid;
+  border-width: 2px;
+  background-clip: border-box;
+  background-image: none;
+  box-sizing: border-box;
+  border-radius: 0;
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 1.333;
+}
+select::-ms-value {
+  padding: 5px 12px 7px 12px;
+  margin: 0;
+}
+select::-ms-expand {
+  border: none;
+  margin-right: 5px;
+  margin-left: 3px;
+  margin-bottom: -2px;
+  font-size: 20px;
+}
+select[multiple] {
+  padding: 0 0 0 12px;
+  vertical-align: bottom;
+}
+option {
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 1.333;
+}
+progress {
+  width: 180px;
+  height: 4px;
+  -webkit-appearance: none;
+}
+progress:not(:indeterminate) {
+  border-style: none;
+}
+progress::-ms-fill {
+  border-style: none;
+}
+progress.win-medium {
+  width: 296px;
+}
+progress.win-large {
+  width: 100%;
+}
+progress:indeterminate::-webkit-progress-value {
+  position: relative;
+  -webkit-animation: win-progress-indeterminate 3s linear infinite;
+}
+progress.win-paused:not(:indeterminate) {
+  animation-name: win-progress-fade-out;
+  animation-duration: 3s;
+  animation-timing-function: cubic-bezier(0.03, 0.76, 0.31, 1);
+  opacity: 0.5;
+}
+progress.win-error::-ms-fill {
+  opacity: 0;
+}
+progress.win-ring:indeterminate::-ms-fill {
+  animation-name: -ms-ring;
+}
+progress.win-ring {
+  width: 20px;
+  height: 20px;
+}
+progress.win-medium.win-ring {
+  width: 40px;
+  height: 40px;
+}
+progress.win-large.win-ring {
+  width: 60px;
+  height: 60px;
+}
+@-webkit-keyframes win-progress-indeterminate {
+  0% {
+    left: 0;
+    width: 25%;
+  }
+  50% {
+    left: calc(75%);
+    width: 25%;
+  }
+  75% {
+    left: calc(100%);
+    width: 0%;
+  }
+  75.1% {
+    left: 0;
+    width: 0%;
+  }
+  100% {
+    left: 0;
+    width: 25%;
+  }
+}
+@keyframes win-progress-fade-out {
+  from {
+    opacity: 1.0;
+  }
+  to {
+    opacity: 0.5;
+  }
+}
+input[type=range] {
+  -webkit-appearance: none;
+  width: 280px;
+  height: 22px;
+  padding-top: 17px;
+  padding-bottom: 32px;
+}
+input[type=range]::-ms-track {
+  height: 2px;
+  border-style: none;
+}
+input[type=range]::-webkit-slider-runnable-track {
+  height: 2px;
+  border-style: none;
+}
+input[type=range]::-moz-range-track {
+  height: 2px;
+  border-style: none;
+}
+input[type=range]::-ms-thumb {
+  width: 24px;
+  height: 8px;
+  border-radius: 4px;
+  border-style: none;
+}
+input[type=range]::-webkit-slider-thumb {
+  -webkit-appearance: none;
+  margin-top: -4px;
+  width: 24px;
+  height: 8px;
+  border-radius: 4px;
+  border-style: none;
+}
+input[type=range]::-moz-range-thumb {
+  width: 24px;
+  height: 8px;
+  border-radius: 4px;
+  border-style: none;
+}
+input[type=range].win-vertical {
+  writing-mode: bt-lr;
+  width: 22px;
+  height: 280px;
+}
+input[type=range].win-vertical::-ms-track {
+  width: 2px;
+  height: auto;
+}
+input[type=range].win-vertical::-ms-thumb {
+  width: 8px;
+  height: 24px;
+}
+input[type=range].win-vertical:lang(ar),
+input[type=range].win-vertical:lang(dv),
+input[type=range].win-vertical:lang(fa),
+input[type=range].win-vertical:lang(he),
+input[type=range].win-vertical:lang(ku-Arab),
+input[type=range].win-vertical:lang(pa-Arab),
+input[type=range].win-vertical:lang(prs),
+input[type=range].win-vertical:lang(ps),
+input[type=range].win-vertical:lang(sd-Arab),
+input[type=range].win-vertical:lang(syr),
+input[type=range].win-vertical:lang(ug),
+input[type=range].win-vertical:lang(ur),
+input[type=range].win-vertical:lang(qps-plocm) {
+  writing-mode: bt-rl;
+}
+a {
+  text-decoration: underline;
+  cursor: pointer;
+  touch-action: manipulation;
+}
+img {
+  border-style: none;
+}
+form {
+  margin: 0px;
+  padding: 0px;
+}
+legend {
+  margin: 0px 0px 10px 0px;
+  padding: 0px;
+  color: inherit;
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 1.333;
+}
+code,
+pre,
+samp {
+  font-family: "Consolas", "Menlo", "Monaco", "Courier New", monospace;
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 1.333;
+}
+caption,
+figcaption,
+small {
+  font-size: 12px;
+  font-weight: 400;
+  line-height: 1.167;
+}
+.win-type-ellipsis {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+h1.win-type-ellipsis,
+.win-type-xx-large.win-type-ellipsis {
+  line-height: 1.4286;
+}
+h2.win-type-ellipsis,
+.win-type-x-large.win-type-ellipsis {
+  line-height: 1.5;
+}
+dt,
+th {
+  font-size: 11px;
+  font-weight: 700;
+  line-height: 1.3636;
+}
+abbr,
+acronym,
+address,
+blockquote,
+cite,
+dl,
+dd,
+li,
+ol,
+p,
+q,
+td,
+tr {
+  font-weight: 300;
+}
+b,
+strong {
+  font-weight: 700;
+}
+em {
+  font-style: italic;
+}
+.win-scrollview {
+  overflow-x: auto;
+  overflow-y: hidden;
+  height: 400px;
+  width: 100%;
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+  margin-top: 0px;
+  margin-bottom: 0px;
+}
+h1 {
+  font-size: 46px;
+  font-weight: 200;
+  line-height: 1.216;
+  letter-spacing: 0px;
+}
+h2 {
+  font-size: 34px;
+  font-weight: 200;
+  line-height: 1.176;
+}
+h3 {
+  font-size: 24px;
+  font-weight: 300;
+  line-height: 1.167;
+}
+h4 {
+  font-size: 20px;
+  font-weight: 400;
+  line-height: 1.2;
+}
+h5 {
+  font-size: 15px;
+  font-weight: 500;
+  line-height: 1.333;
+}
+h6 {
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 1.333;
+}
+.win-listview {
+  overflow: hidden;
+  height: 400px;
+}
+.win-listview .win-surface {
+  overflow: visible;
+}
+.win-listview > .win-viewport.win-horizontal .win-surface {
+  height: 100%;
+}
+.win-listview > .win-viewport.win-vertical .win-surface {
+  width: 100%;
+}
+.win-listview > .win-viewport {
+  position: relative;
+  width: 100%;
+  height: 100%;
+  z-index: 0;
+  -ms-overflow-style: -ms-autohiding-scrollbar;
+  -webkit-overflow-scrolling: touch;
+  white-space: nowrap;
+}
+.win-listview > .win-viewport.win-horizontal {
+  overflow-x: auto;
+  overflow-y: hidden;
+}
+.win-listview > .win-viewport.win-vertical {
+  overflow-x: hidden;
+  overflow-y: auto;
+}
+.win-listview .win-itemscontainer {
+  overflow: hidden;
+}
+.win-listview .win-itemscontainer-padder {
+  width: 0;
+  height: 0;
+  margin: 0;
+  padding: 0;
+  border: 0;
+  overflow: hidden;
+}
+.win-listview > .win-horizontal .win-container {
+  margin: 10px 5px 0px 5px;
+}
+.win-listview > .win-vertical .win-container {
+  margin: 10px 24px 0px 7px;
+}
+.win-listview.win-rtl > .win-vertical .win-container {
+  margin: 10px 7px 0px 24px;
+}
+.win-listview .win-container,
+.win-listview .win-itembox,
+.win-itemcontainer.win-container,
+.win-itemcontainer .win-itembox {
+  cursor: default;
+  z-index: 0;
+}
+.win-listview .win-container {
+  touch-action: pan-x pan-y pinch-zoom;
+}
+.win-semanticzoom .win-listview > .win-viewport * {
+  touch-action: auto;
+}
+.win-semanticzoom .win-listview > .win-viewport.win-zooming-x {
+  overflow-x: visible;
+}
+.win-semanticzoom .win-listview > .win-viewport.win-zooming-y {
+  overflow-y: visible;
+}
+.win-listview .win-itembox,
+.win-itemcontainer .win-itembox {
+  width: 100%;
+  height: 100%;
+}
+.win-listview .win-item,
+.win-itemcontainer .win-item {
+  z-index: 1;
+}
+.win-listview .win-item,
+.win-itemcontainer .win-item {
+  overflow: hidden;
+  position: relative;
+}
+.win-listview > .win-vertical .win-item {
+  width: 100%;
+}
+.win-listview .win-item:focus,
+.win-itemcontainer .win-item:focus {
+  outline-style: none;
+}
+.win-listview .win-focusedoutline,
+.win-itemcontainer .win-focusedoutline {
+  width: calc(100% - 4px);
+  height: calc(100% - 4px);
+  left: 2px;
+  top: 2px;
+  position: absolute;
+  z-index: 5;
+  pointer-events: none;
+}
+.win-container.win-selected .win-selectionborder {
+  border-width: 2px;
+  border-style: solid;
+}
+html.win-hoverable .win-container.win-selected:hover .win-selectionborder {
+  border-width: 2px;
+  border-style: solid;
+}
+html.win-hoverable .win-listview .win-itembox:hover::before,
+html.win-hoverable .win-itemcontainer .win-itembox:hover::before {
+  position: absolute;
+  left: 0px;
+  top: 0px;
+  content: "";
+  width: calc(100% - 4px);
+  height: calc(100% - 4px);
+  pointer-events: none;
+  border-style: solid;
+  border-width: 2px;
+  z-index: 3;
+}
+html.win-hoverable .win-listview.win-selectionstylefilled .win-itembox:hover::before,
+html.win-hoverable .win-itemcontainer.win-selectionstylefilled .win-itembox:hover::before,
+html.win-hoverable .win-listview .win-itembox.win-selected:hover::before,
+html.win-hoverable .win-itemcontainer.win-itembox.win-selected:hover::before,
+html.win-hoverable .win-itemcontainer.win-itembox.win-selected:hover::before {
+  display: none;
+}
+.win-listview .win-groupheader {
+  padding: 10px 10px 10px 2px;
+  overflow: hidden;
+  outline-width: 0.01px;
+  outline-style: none;
+  float: left;
+  font-size: 34px;
+  font-weight: 200;
+  line-height: 1.176;
+}
+.win-listview .win-groupheadercontainer {
+  z-index: 1;
+  touch-action: pan-x pan-y pinch-zoom;
+  overflow: hidden;
+}
+.win-listview .win-horizontal .win-headercontainer,
+.win-listview .win-horizontal .win-footercontainer {
+  height: 100%;
+  display: inline-block;
+  overflow: hidden;
+  white-space: normal;
+}
+.win-listview .win-vertical .win-headercontainer,
+.win-listview .win-vertical .win-footercontainer {
+  width: 100%;
+  display: block;
+  overflow: hidden;
+  white-space: normal;
+}
+.win-listview .win-groupheader.win-focused {
+  outline-style: dotted;
+}
+.win-listview.win-rtl .win-groupheader {
+  padding-left: 10px;
+  padding-right: 2px;
+  float: right;
+}
+.win-listview.win-groups .win-horizontal .win-groupleader {
+  margin-left: 70px;
+}
+.win-listview.win-groups.win-rtl .win-horizontal .win-groupleader {
+  margin-left: 0;
+  margin-right: 70px;
+}
+.win-listview.win-groups .win-vertical .win-listlayout .win-groupleader,
+.win-listview.win-groups .win-vertical .win-gridlayout .win-groupleader {
+  margin-top: 70px;
+}
+.win-listview.win-groups > .win-vertical .win-surface.win-listlayout,
+.win-listview.win-groups > .win-vertical .win-surface.win-gridlayout {
+  margin-top: -65px;
+}
+.win-listview.win-groups > .win-horizontal .win-surface {
+  margin-left: -70px;
+}
+.win-listview.win-groups.win-rtl > .win-horizontal .win-surface {
+  margin-left: 0;
+  margin-right: -70px;
+}
+.win-listview .win-surface {
+  -webkit-margin-collapse: separate;
+  white-space: normal;
+}
+.win-surface ._win-proxy {
+  position: relative;
+  overflow: hidden;
+  width: 0;
+  height: 0;
+  touch-action: none;
+}
+.win-selectionborder {
+  position: absolute;
+  opacity: inherit;
+  z-index: 2;
+  pointer-events: none;
+}
+.win-container.win-selected .win-selectionborder {
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+}
+.win-selectionbackground {
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  z-index: 0;
+}
+.win-selectioncheckmarkbackground {
+  position: absolute;
+  top: 2px;
+  right: 2px;
+  width: 14px;
+  height: 11px;
+  margin: 0;
+  padding: 0;
+  border-left-width: 2px;
+  border-right-width: 2px;
+  border-top-width: 4px;
+  border-bottom-width: 3px;
+  border-style: solid;
+  z-index: 3;
+  display: none;
+}
+.win-listview.win-rtl .win-selectioncheckmarkbackground,
+.win-itemcontainer.win-rtl .win-selectioncheckmarkbackground {
+  left: 2px;
+  right: auto;
+}
+.win-selectionmode.win-itemcontainer .win-selectioncheckmarkbackground,
+.win-selectionmode.win-itemcontainer.win-selectionmode .win-selectioncheckmark,
+.win-selectionmode .win-itemcontainer .win-selectioncheckmarkbackground,
+.win-selectionmode .win-itemcontainer.win-selectionmode .win-selectioncheckmark,
+.win-listview .win-selectionmode .win-selectioncheckmarkbackground,
+.win-listview .win-selectionmode .win-selectioncheckmark {
+  display: block;
+}
+.win-selectioncheckmark {
+  position: absolute;
+  margin: 0;
+  padding: 2px;
+  right: 1px;
+  top: 1px;
+  font-family: "Segoe MDL2 Assets", "Symbols";
+  font-size: 14px;
+  z-index: 4;
+  line-height: 1;
+  display: none;
+}
+.win-rtl .win-selectioncheckmark {
+  right: auto;
+  left: 0px;
+}
+.win-selectionstylefilled.win-container,
+.win-selectionstylefilled .win-container {
+  overflow: hidden;
+}
+.win-selectionmode .win-itemcontainer.win-container .win-itembox::after,
+.win-selectionmode.win-itemcontainer.win-container .win-itembox::after,
+.win-listview .win-surface.win-selectionmode .win-itembox::after {
+  content: "";
+  position: absolute;
+  width: 18px;
+  height: 18px;
+  pointer-events: none;
+  right: 2px;
+  top: 2px;
+  z-index: 3;
+}
+.win-rtl .win-selectionmode .win-itemcontainer.win-container .win-itembox::after,
+.win-itemcontainer.win-rtl.win-selectionmode.win-container .win-itembox::after,
+.win-listview.win-rtl .win-surface.win-selectionmode .win-itembox::after {
+  right: auto;
+  left: 2px;
+}
+.win-listview.win-selectionstylefilled .win-surface.win-selectionmode .win-item {
+  transition: transform 250ms cubic-bezier(0.17, 0.79, 0.215, 1.0025);
+  -webkit-transition: -webkit-transform 250ms cubic-bezier(0.17, 0.79, 0.215, 1.0025);
+  transform: translate(40px, 0px);
+  -webkit-transform: translate(40px, 0px);
+}
+.win-listview.win-rtl.win-selectionstylefilled .win-surface.win-selectionmode .win-item {
+  transition: transform 250ms cubic-bezier(0.17, 0.79, 0.215, 1.0025);
+  -webkit-transition: -webkit-transform 250ms cubic-bezier(0.17, 0.79, 0.215, 1.0025);
+  transform: translate(-40px, 0px);
+  -webkit-transform: translate(-40px, 0px);
+}
+.win-listview.win-selectionstylefilled .win-surface.win-hidingselectionmode .win-item {
+  transition: transform 250ms cubic-bezier(0.17, 0.79, 0.215, 1.0025);
+  -webkit-transition: -webkit-transform 250ms cubic-bezier(0.17, 0.79, 0.215, 1.0025);
+  transform: none;
+  -webkit-transform: none;
+}
+.win-listview.win-rtl.win-selectionstylefilled .win-surface.win-hideselectionmode .win-item {
+  transition: transform 250ms cubic-bezier(0.17, 0.79, 0.215, 1.0025);
+  -webkit-transition: -webkit-transform 250ms cubic-bezier(0.17, 0.79, 0.215, 1.0025);
+  transform: none;
+  -webkit-transform: none;
+}
+.win-listview.win-selectionstylefilled .win-surface.win-selectionmode .win-itembox::after {
+  left: 12px;
+  right: auto;
+  top: 50%;
+  margin-top: -9px;
+  display: block;
+  border: 2px solid;
+  width: 16px;
+  height: 16px;
+}
+.win-listview.win-selectionstylefilled.win-rtl .win-surface.win-selectionmode .win-itembox::after {
+  left: auto;
+  right: 12px;
+}
+.win-listview.win-selectionstylefilled .win-surface.win-selectionmode .win-selectioncheckmarkbackground {
+  left: 12px;
+  top: 50%;
+  margin-top: -9px;
+  display: block;
+  border: 2px solid;
+  width: 16px;
+  height: 16px;
+}
+.win-listview.win-selectionstylefilled.win-rtl .win-surface.win-selectionmode .win-selectioncheckmarkbackground {
+  left: auto;
+  right: 12px;
+}
+.win-listview.win-selectionstylefilled .win-surface.win-selectionmode .win-selectioncheckmark {
+  left: 13px;
+  top: 50%;
+  margin-top: -8px;
+  display: block;
+  width: 14px;
+  height: 14px;
+}
+.win-listview.win-selectionstylefilled.win-rtl .win-surface.win-selectionmode .win-selectioncheckmark {
+  left: 0;
+  right: 10px;
+}
+.win-selectionmode .win-itemcontainer.win-selectionstylefilled.win-container .win-itembox.win-selected::after,
+.win-itemcontainer.win-selectionmode.win-selectionstylefilled.win-container .win-itembox.win-selected::after,
+.win-listview.win-selectionstylefilled .win-surface.win-selectionmode .win-itembox.win-nonselectable::after,
+.win-listview .win-surface.win-selectionmode .win-itembox.win-selected::after {
+  display: none;
+}
+.win-listview .win-progress {
+  left: 50%;
+  top: 50%;
+  width: 60px;
+  height: 60px;
+  margin-left: -30px;
+  margin-top: -30px;
+  z-index: 1;
+  position: absolute;
+}
+.win-listview .win-progress::-ms-fill {
+  animation-name: -ms-ring;
+}
+.win-listview .win-itemsblock {
+  overflow: hidden;
+}
+.win-listview .win-surface.win-nocssgrid.win-gridlayout,
+.win-listview .win-horizontal .win-nocssgrid.win-listlayout,
+.win-listview .win-vertical .win-nocssgrid.win-listlayout.win-headerpositionleft {
+  display: -ms-inline-flexbox;
+  display: -webkit-inline-flex;
+  display: inline-flex;
+  vertical-align: top;
+}
+.win-listview .win-horizontal .win-surface.win-nocssgrid {
+  -ms-flex-direction: column;
+  -webkit-flex-direction: column;
+  flex-direction: column;
+  -ms-flex-wrap: wrap;
+  -webkit-flex-wrap: wrap;
+  flex-wrap: wrap;
+  -ms-flex-line-pack: start;
+  -webkit-align-content: flex-start;
+  align-content: flex-start;
+}
+.win-listview .win-vertical .win-surface.win-nocssgrid {
+  -ms-flex-direction: row;
+  -webkit-flex-direction: row;
+  flex-direction: row;
+  -ms-flex-wrap: wrap;
+  -webkit-flex-wrap: wrap;
+  flex-wrap: wrap;
+  -ms-flex-line-pack: start;
+  -webkit-align-content: flex-start;
+  align-content: flex-start;
+}
+.win-listview .win-vertical .win-structuralnodes.win-single-itemsblock.win-listlayout .win-itemscontainer.win-laidout,
+.win-listview .win-horizontal .win-structuralnodes.win-single-itemsblock.win-listlayout .win-itemscontainer.win-laidout,
+.win-listview .win-vertical .win-structuralnodes.win-single-itemsblock.win-gridlayout .win-uniformgridlayout.win-itemscontainer.win-laidout,
+.win-listview .win-horizontal .win-structuralnodes.win-single-itemsblock.win-gridlayout .win-uniformgridlayout.win-itemscontainer.win-laidout {
+  display: block;
+}
+.win-listview .win-vertical .win-structuralnodes.win-single-itemsblock.win-listlayout .win-itemscontainer.win-laidout .win-itemscontainer-padder,
+.win-listview .win-horizontal .win-structuralnodes.win-single-itemsblock.win-listlayout .win-itemscontainer.win-laidout .win-itemscontainer-padder,
+.win-listview .win-vertical .win-structuralnodes.win-single-itemsblock.win-gridlayout .win-uniformgridlayout.win-itemscontainer.win-laidout .win-itemscontainer-padder,
+.win-listview .win-horizontal .win-structuralnodes.win-single-itemsblock.win-gridlayout .win-uniformgridlayout.win-itemscontainer.win-laidout .win-itemscontainer-padder {
+  height: 0;
+  width: 0;
+}
+.win-listview.win-groups .win-vertical .win-listlayout.win-headerpositionleft .win-itemscontainer,
+.win-listview.win-groups .win-vertical .win-listlayout.win-headerpositionleft .win-groupheadercontainer,
+.win-listview.win-groups .win-horizontal .win-listlayout .win-itemscontainer,
+.win-listview.win-groups .win-horizontal .win-listlayout .win-groupheadercontainer {
+  display: none;
+}
+.win-listview.win-groups .win-vertical .win-listlayout.win-headerpositionleft .win-itemscontainer.win-laidout,
+.win-listview.win-groups .win-vertical .win-listlayout.win-headerpositionleft .win-groupheadercontainer.win-laidout,
+.win-listview.win-groups .win-horizontal .win-listlayout .win-groupheadercontainer.win-laidout {
+  display: block;
+}
+.win-listview .win-listlayout .win-itemscontainer {
+  overflow: visible;
+}
+.win-listview .win-listlayout .win-itemsblock {
+  padding-bottom: 4px;
+  margin-bottom: -4px;
+}
+.win-listview > .win-vertical .win-listlayout.win-headerpositiontop .win-groupheader {
+  float: none;
+}
+.win-listview > .win-vertical .win-surface.win-listlayout {
+  margin-bottom: 5px;
+}
+.win-listview .win-vertical .win-listlayout.win-headerpositionleft.win-surface {
+  display: -ms-inline-grid;
+  -ms-grid-columns: auto 1fr;
+  -ms-grid-rows: auto;
+}
+.win-listview .win-vertical .win-listlayout.win-headerpositionleft .win-groupheadercontainer {
+  -ms-grid-column: 1;
+}
+.win-listview .win-vertical .win-listlayout.win-headerpositionleft .win-itemscontainer {
+  -ms-grid-column: 2;
+}
+.win-listview > .win-horizontal .win-surface.win-listlayout {
+  display: -ms-inline-grid;
+  -ms-grid-columns: auto;
+  -ms-grid-rows: auto;
+  vertical-align: top;
+}
+.win-listview .win-horizontal .win-listlayout .win-itemsblock {
+  height: 100%;
+}
+.win-listview .win-horizontal .win-listlayout .win-itemscontainer {
+  margin-bottom: 24px;
+}
+.win-listview .win-horizontal .win-listlayout .win-container {
+  height: calc(100% - 10px);
+}
+.win-listview > .win-horizontal .win-surface.win-listlayout.win-headerpositiontop {
+  -ms-grid-rows: auto 1fr;
+}
+.win-listview .win-horizontal .win-listlayout.win-headerpositiontop .win-groupheadercontainer {
+  -ms-grid-row: 1;
+}
+.win-listview .win-horizontal .win-listlayout.win-headerpositiontop .win-itemscontainer {
+  -ms-grid-row: 2;
+}
+.win-listview .win-gridlayout.win-surface {
+  display: -ms-inline-grid;
+  vertical-align: top;
+}
+.win-listview .win-gridlayout .win-container {
+  margin: 5px;
+}
+.win-listview .win-vertical .win-gridlayout.win-headerpositionleft .win-groupheadercontainer,
+.win-listview .win-vertical .win-gridlayout.win-headerpositiontop .win-groupheadercontainer {
+  -ms-grid-column: 1;
+}
+.win-listview.win-groups .win-gridlayout .win-itemscontainer,
+.win-listview.win-groups .win-gridlayout .win-groupheadercontainer {
+  display: none;
+}
+.win-listview.win-groups .win-gridlayout .win-groupheadercontainer.win-laidout {
+  display: block;
+}
+.win-listview .win-horizontal .win-gridlayout.win-headerpositiontop.win-surface {
+  -ms-grid-columns: auto;
+  -ms-grid-rows: auto 1fr;
+}
+.win-listview .win-horizontal .win-gridlayout.win-headerpositiontop .win-groupheadercontainer {
+  -ms-grid-row: 1;
+}
+.win-listview .win-horizontal .win-gridlayout.win-headerpositiontop .win-itemscontainer {
+  -ms-grid-row: 2;
+}
+.win-listview .win-horizontal .win-gridlayout.win-headerpositionleft.win-surface {
+  -ms-grid-columns: auto;
+  -ms-grid-rows: auto;
+}
+.win-listview .win-horizontal .win-gridlayout.win-headerpositionleft .win-groupheadercontainer {
+  -ms-grid-row: 1;
+}
+.win-listview .win-horizontal .win-gridlayout.win-headerpositionleft .win-itemscontainer {
+  -ms-grid-row: 1;
+}
+.win-listview .win-vertical .win-gridlayout.win-headerpositiontop.win-surface {
+  -ms-grid-columns: auto;
+  -ms-grid-rows: auto;
+}
+.win-listview .win-vertical .win-gridlayout.win-headerpositiontop .win-itemscontainer {
+  -ms-grid-column: 1;
+}
+.win-listview .win-vertical .win-gridlayout.win-headerpositionleft.win-surface {
+  -ms-grid-columns: auto 1fr;
+  -ms-grid-rows: auto;
+}
+.win-listview .win-vertical .win-gridlayout.win-headerpositionleft .win-itemscontainer {
+  -ms-grid-column: 2;
+}
+.win-listview .win-gridlayout.win-structuralnodes .win-uniformgridlayout.win-itemscontainer.win-laidout {
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  -ms-flex-direction: row;
+  -webkit-flex-direction: row;
+  flex-direction: row;
+}
+.win-listview .win-horizontal .win-listlayout .win-itemscontainer,
+.win-listview.win-groups .win-horizontal .win-listlayout .win-itemscontainer.win-laidout,
+.win-listview .win-horizontal .win-listlayout .win-itemsblock,
+.win-listview .win-horizontal .win-gridlayout .win-uniformgridlayout.win-itemscontainer.win-laidout,
+.win-listview .win-horizontal .win-gridlayout .win-uniformgridlayout .win-itemsblock {
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  -ms-flex-direction: column;
+  -webkit-flex-direction: column;
+  flex-direction: column;
+  -ms-flex-wrap: wrap;
+  -webkit-flex-wrap: wrap;
+  flex-wrap: wrap;
+  -ms-flex-line-pack: start;
+  -webkit-align-content: flex-start;
+  align-content: flex-start;
+}
+.win-listview .win-horizontal .win-itemscontainer-padder {
+  height: 100%;
+}
+.win-listview .win-horizontal .win-gridlayout .win-uniformgridlayout .win-itemsblock {
+  height: 100%;
+}
+.win-listview .win-horizontal .win-gridlayout .win-cellspanninggridlayout.win-itemscontainer.win-laidout {
+  display: -ms-grid;
+}
+.win-listview .win-vertical .win-gridlayout.win-structuralnodes .win-uniformgridlayout.win-itemscontainer.win-laidout {
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  -ms-flex-direction: column;
+  -webkit-flex-direction: column;
+  flex-direction: column;
+}
+.win-listview .win-vertical .win-gridlayout .win-uniformgridlayout.win-itemscontainer.win-laidout,
+.win-listview .win-vertical .win-gridlayout .win-uniformgridlayout .win-itemsblock {
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  -ms-flex-direction: row;
+  -webkit-flex-direction: row;
+  flex-direction: row;
+  -ms-flex-wrap: wrap;
+  -webkit-flex-wrap: wrap;
+  flex-wrap: wrap;
+  -ms-flex-line-pack: start;
+  -webkit-align-content: flex-start;
+  align-content: flex-start;
+}
+.win-listview .win-vertical .win-gridlayout .win-uniformgridlayout .win-itemsblock {
+  width: 100%;
+}
+.win-listview .win-cellspanninggridlayout .win-container.win-laidout {
+  display: block;
+}
+.win-listview .win-cellspanninggridlayout .win-container {
+  display: none;
+}
+.win-listview .win-itembox {
+  position: relative;
+}
+.win-listview.win-dragover .win-itembox {
+  transform: scale(0.86);
+  -webkit-transform: scale(0.86);
+}
+.win-listview .win-itembox.win-dragsource,
+.win-itemcontainer .win-itembox.win-dragsource {
+  opacity: 0.5;
+  transition: opacity cubic-bezier(0.1, 0.9, 0.2, 1) 167ms, transform cubic-bezier(0.1, 0.9, 0.2, 1) 220ms;
+  -webkit-transition: opacity cubic-bezier(0.1, 0.9, 0.2, 1) 167ms, transform cubic-bezier(0.1, 0.9, 0.2, 1) 220ms;
+}
+.win-listview.win-dragover .win-itembox.win-dragsource {
+  opacity: 0;
+  transition: none;
+  -webkit-transition: none;
+}
+html.win-hoverable .win-listview.win-dragover .win-container:hover {
+  outline: none;
+}
+.win-listview .win-itembox {
+  transition: transform cubic-bezier(0.1, 0.9, 0.2, 1) 220ms;
+  -webkit-transition: -webkit-transform cubic-bezier(0.1, 0.9, 0.2, 1) 220ms;
+}
+.win-listview.win-groups > .win-vertical .win-surface.win-listlayout.win-headerpositionleft {
+  margin-left: 70px;
+}
+.win-listview.win-groups.win-rtl > .win-vertical .win-surface.win-listlayout.win-headerpositionleft {
+  margin-left: 0px;
+  margin-right: 70px;
+}
+.win-listview > .win-horizontal .win-surface.win-listlayout {
+  margin-left: 70px;
+}
+.win-listview.win-rtl > .win-horizontal .win-surface.win-listlayout {
+  margin-left: 0px;
+  margin-right: 70px;
+}
+.win-listview .win-vertical .win-gridlayout.win-surface {
+  margin-left: 20px;
+}
+.win-listview.win-rtl .win-vertical .win-gridlayout.win-surface {
+  margin-left: 0px;
+  margin-right: 20px;
+}
+.win-itemcontainer .win-itembox,
+.win-itemcontainer.win-container {
+  position: relative;
+}
+.win-itemcontainer {
+  touch-action: pan-x pan-y pinch-zoom;
+}
+html.win-hoverable .win-listview .win-itembox:hover::before,
+html.win-hoverable .win-itemcontainer .win-itembox:hover::before {
+  opacity: 0.4;
+}
+html.win-hoverable .win-listview .win-pressed .win-itembox:hover::before,
+html.win-hoverable .win-itemcontainer .win-pressed .win-itembox:hover::before,
+html.win-hoverable .win-listview .win-pressed.win-itembox:hover::before,
+html.win-hoverable .win-itemcontainer .win-pressed.win-itembox:hover::before {
+  opacity: 0.6;
+}
+html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover,
+html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover,
+html.win-hoverable .win-selectionstylefilled .win-itemcontainer.win-container:hover {
+  outline: none;
+}
+.win-selectionstylefilled.win-itemcontainer .win-itembox,
+.win-selectionstylefilled .win-itemcontainer .win-itembox,
+.win-listview.win-selectionstylefilled .win-itembox {
+  background-color: transparent;
+}
+.win-listview.win-selectionstylefilled .win-container.win-selected .win-selectionborder,
+.win-itemcontainer.win-selectionstylefilled.win-container.win-selected .win-selectionborder {
+  border-color: transparent;
+}
+.win-listview.win-selectionstylefilled .win-surface.win-selectionmode .win-itembox::after {
+  background-color: transparent;
+}
+.win-listview.win-selectionstylefilled .win-selectioncheckmarkbackground,
+.win-itemcontainer.win-selectionstylefilled .win-selectioncheckmarkbackground {
+  border-color: transparent;
+}
+.win-listview.win-selectionstylefilled .win-selected a,
+.win-listview.win-selectionstylefilled .win-selected progress,
+.win-listview.win-selectionstylefilled .win-selected .win-rating .win-star.win-full,
+.win-itemcontainer.win-selectionstylefilled.win-selected a,
+.win-itemcontainer.win-selectionstylefilled.win-selected progress,
+.win-itemcontainer.win-selectionstylefilled.win-selected .win-rating .win-star.win-full {
+  color: #ffffff;
+}
+.win-listview.win-selectionstylefilled .win-selected.win-selected a:hover:active,
+.win-itemcontainer.win-selectionstylefilled.win-selected.win-selected a:hover:active {
+  color: rgba(255, 255, 255, 0.6);
+}
+html.win-hoverable .win-listview.win-selectionstylefilled .win-selected a:hover,
+html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-selected a:hover {
+  color: rgba(255, 255, 255, 0.8);
+}
+.win-listview.win-selectionstylefilled .win-selected button,
+.win-listview.win-selectionstylefilled .win-selected input[type=button],
+.win-listview.win-selectionstylefilled .win-selected input[type=reset],
+.win-listview.win-selectionstylefilled .win-selected input[type=text],
+.win-listview.win-selectionstylefilled .win-selected input[type=password],
+.win-listview.win-selectionstylefilled .win-selected input[type=email],
+.win-listview.win-selectionstylefilled .win-selected input[type=number],
+.win-listview.win-selectionstylefilled .win-selected input[type=tel],
+.win-listview.win-selectionstylefilled .win-selected input[type=url],
+.win-listview.win-selectionstylefilled .win-selected input[type=search],
+.win-listview.win-selectionstylefilled .win-selected input::-ms-check,
+.win-listview.win-selectionstylefilled .win-selected textarea,
+.win-listview.win-selectionstylefilled .win-selected .win-textarea,
+.win-listview.win-selectionstylefilled .win-selected select,
+.win-itemcontainer.win-selectionstylefilled.win-selected button,
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=button],
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=reset],
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=text],
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=password],
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=email],
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=number],
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=tel],
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=url],
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=search],
+.win-itemcontainer.win-selectionstylefilled.win-selected input::-ms-check,
+.win-itemcontainer.win-selectionstylefilled.win-selected textarea,
+.win-itemcontainer.win-selectionstylefilled.win-selected .win-textarea,
+.win-itemcontainer.win-selectionstylefilled.win-selected select {
+  background-clip: border-box;
+  background-color: rgba(255, 255, 255, 0.8);
+  border-color: transparent;
+  color: #000000;
+}
+.win-listview.win-selectionstylefilled .win-selected button[type=submit],
+.win-listview.win-selectionstylefilled .win-selected input[type=submit],
+.win-itemcontainer.win-selectionstylefilled.win-selected button[type=submit],
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=submit] {
+  border-color: #ffffff;
+}
+.win-listview.win-selectionstylefilled .win-selected input[type=range]::-ms-fill-lower,
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=range]::-ms-fill-lower {
+  background-color: #ffffff;
+}
+.win-listview.win-selectionstylefilled .win-selected input[type=range]::-ms-thumb,
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=range]::-ms-thumb {
+  background-color: #000000;
+}
+.win-listview.win-selectionstylefilled .win-selected input[type=range]::-ms-fill-upper,
+.win-listview.win-selectionstylefilled .win-selected progress,
+.win-itemcontainer.win-selectionstylefilled.win-selected input[type=range]::-ms-fill-upper,
+.win-itemcontainer.win-selectionstylefilled.win-selected progress {
+  background-color: rgba(255, 255, 255, 0.16);
+}
+.win-listview.win-selectionstylefilled .win-selected progress:indeterminate,
+.win-itemcontainer.win-selectionstylefilled.win-selected progress:indeterminate {
+  background-color: transparent;
+}
+.win-listview.win-selectionstylefilled .win-selected .win-rating .win-star.win-empty,
+.win-itemcontainer.win-selectionstylefilled.win-selected .win-rating .win-star.win-empty {
+  color: rgba(255, 255, 255, 0.16);
+}
+.win-listview .win-viewport {
+  outline: none;
+}
+@media (-ms-high-contrast) {
+  .win-listview .win-groupheader {
+    color: WindowText;
+  }
+  .win-selectioncheckmark {
+    color: HighlightText;
+  }
+  .win-listview .win-focusedoutline,
+  .win-listview .win-groupheader,
+  .win-itemcontainer .win-focusedoutline {
+    outline-color: WindowText;
+  }
+  .win-listview.win-selectionstylefilled .win-itembox,
+  .win-itemcontainer.win-selectionstylefilled .win-itembox {
+    background-color: Window;
+    color: WindowText;
+  }
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover .win-itembox,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover .win-itembox {
+    background-color: Highlight;
+    color: HighlightText;
+  }
+  .win-listview.win-selectionstylefilled .win-container.win-selected .win-itembox,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container.win-selected:hover .win-itembox,
+  .win-itemcontainer.win-selectionstylefilled.win-container.win-selected .win-itembox,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container.win-selected:hover .win-itembox {
+    background-color: Highlight;
+    color: HighlightText;
+  }
+  .win-listview:not(.win-selectionstylefilled) .win-container.win-selected .win-selectionborder,
+  .win-itemcontainer:not(.win-selectionstylefilled).win-container.win-selected .win-selectionborder {
+    border-color: Highlight;
+  }
+  .win-listview.win-selectionstylefilled .win-container.win-selected .win-selectionborder,
+  .win-itemcontainer.win-selectionstylefilled.win-container.win-selected .win-selectionborder {
+    border-color: transparent;
+  }
+  html.win-hoverable .win-listview:not(.win-selectionstylefilled) .win-container.win-selected:hover .win-selectionborder,
+  html.win-hoverable .win-itemcontainer:not(.win-selectionstylefilled).win-container.win-selected:hover .win-selectionborder {
+    border-color: Highlight;
+  }
+  .win-listview.win-selectionstylefilled .win-selected .win-selectionbackground,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-selected:hover .win-selectionbackground,
+  .win-itemcontainer.win-selectionstylefilled.win-selected .win-selectionbackground,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-selected:hover .win-selectionbackground {
+    background-color: Highlight;
+    color: HighlightText;
+  }
+  .win-listview.win-selectionstylefilled .win-selectioncheckmarkbackground,
+  .win-itemcontainer.win-selectionstylefilled .win-selectioncheckmarkbackground {
+    border-color: transparent;
+  }
+  .win-listview.win-selectionstylefilled .win-selected a,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover a,
+  .win-listview.win-selectionstylefilled .win-selected progress,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover progress,
+  .win-listview.win-selectionstylefilled .win-selected .win-rating .win-star:after,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover .win-rating .win-star:after,
+  .win-itemcontainer.win-selectionstylefilled.win-selected a,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover a,
+  .win-itemcontainer.win-selectionstylefilled.win-selected progress,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover progress,
+  .win-itemcontainer.win-selectionstylefilled.win-selected .win-rating .win-star:after,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover .win-rating .win-star:after {
+    color: HighlightText;
+  }
+  .win-listview.win-selectionstylefilled .win-selected input,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover input,
+  .win-listview.win-selectionstylefilled .win-selected input::-ms-check,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover input::-ms-check,
+  .win-listview.win-selectionstylefilled .win-selected input::-ms-value,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover input::-ms-value,
+  .win-listview.win-selectionstylefilled .win-selected input::-ms-track,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover input::-ms-track,
+  .win-listview.win-selectionstylefilled .win-selected button,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover button,
+  .win-listview.win-selectionstylefilled .win-selected progress,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover progress,
+  .win-listview.win-selectionstylefilled .win-selected progress::-ms-fill,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover progress::-ms-fill,
+  .win-listview.win-selectionstylefilled .win-selected select,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover select,
+  .win-listview.win-selectionstylefilled .win-selected textarea,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover textarea,
+  .win-listview.win-selectionstylefilled.win-selected input,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover input,
+  .win-itemcontainer.win-selectionstylefilled.win-selected input::-ms-check,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover input::-ms-check,
+  .win-itemcontainer.win-selectionstylefilled.win-selected input::-ms-value,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover input::-ms-value,
+  .win-itemcontainer.win-selectionstylefilled.win-selected input::-ms-track,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover input::-ms-track,
+  .win-itemcontainer.win-selectionstylefilled.win-selected button,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover button,
+  .win-itemcontainer.win-selectionstylefilled.win-selected progress,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover progress,
+  .win-itemcontainer.win-selectionstylefilled.win-selected progress::-ms-fill,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover progress::-ms-fill,
+  .win-itemcontainer.win-selectionstylefilled.win-selected select,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover select,
+  .win-itemcontainer.win-selectionstylefilled.win-selected textarea,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover textarea {
+    border-color: HighlightText;
+  }
+  .win-listview.win-selectionstylefilled .win-selected input[type=range]::-ms-fill-lower,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover input[type=range]::-ms-fill-lower,
+  .win-listview.win-selectionstylefilled .win-selected progress::-ms-fill,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover progress::-ms-fill,
+  .win-itemcontainer.win-selectionstylefilled.win-selected input[type=range]::-ms-fill-lower,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover input[type=range]::-ms-fill-lower,
+  .win-itemcontainer.win-selectionstylefilled.win-selected progress::-ms-fill,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover progress::-ms-fill {
+    background-color: HighlightText;
+  }
+  .win-listview.win-selectionstylefilled .win-selected input[type=range]::-ms-fill-upper,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover input[type=range]::-ms-fill-upper,
+  .win-listview.win-selectionstylefilled .win-selected progress,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover progress,
+  .win-itemcontainer.win-selectionstylefilled.win-selected input[type=range]::-ms-fill-upper,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover input[type=range]::-ms-fill-upper,
+  .win-itemcontainer.win-selectionstylefilled.win-selected progress,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover progress {
+    background-color: Highlight;
+  }
+  .win-listview.win-selectionstylefilled .win-selected .win-rating .win-star.win-full:before,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover .win-rating .win-star.win-full:before,
+  .win-itemcontainer.win-selectionstylefilled.win-selected .win-rating .win-star.win-full:before,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover .win-rating .win-star.win-full:before {
+    color: ButtonFace;
+  }
+  .win-listview.win-selectionstylefilled .win-selected .win-rating .win-star.win-empty:before,
+  html.win-hoverable .win-listview.win-selectionstylefilled .win-container:hover .win-rating .win-star.win-empty:before,
+  .win-itemcontainer.win-selectionstylefilled.win-selected .win-rating .win-star.win-empty:before,
+  html.win-hoverable .win-itemcontainer.win-selectionstylefilled.win-container:hover .win-rating .win-star.win-empty:before {
+    color: Highlight;
+  }
+  html.win-hoverable .win-listview .win-container:hover,
+  html.win-hoverable .win-itemcontainer.win-container:hover {
+    outline: Highlight solid 3px;
+  }
+}
+.win-flipview {
+  overflow: hidden;
+  height: 400px;
+}
+.win-flipview .win-surface {
+  -ms-scroll-chaining: none;
+}
+.win-flipview .win-navleft {
+  left: 0%;
+  top: 50%;
+  margin-top: -19px;
+}
+.win-flipview .win-navright {
+  left: 100%;
+  top: 50%;
+  margin-left: -20px;
+  margin-top: -19px;
+}
+.win-flipview .win-navtop {
+  left: 50%;
+  top: 0%;
+  margin-left: -35px;
+}
+.win-flipview .win-navbottom {
+  left: 50%;
+  top: 100%;
+  margin-left: -35px;
+  margin-top: -36px;
+}
+.win-flipview .win-navbutton {
+  border: none;
+  width: 20px;
+  height: 36px;
+  z-index: 1;
+  position: absolute;
+  font-family: "Segoe MDL2 Assets", "Symbols";
+  font-size: 16px;
+  padding: 0;
+  min-width: 0;
+}
+.win-flipview .win-item,
+.win-flipview .win-item > .win-template {
+  height: 100%;
+  width: 100%;
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  -ms-flex-align: center;
+  -webkit-align-items: center;
+  align-items: center;
+  -ms-flex-pack: center;
+  -webkit-justify-content: center;
+  justify-content: center;
+}
+@media (-ms-high-contrast) {
+  .win-flipview .win-navbottom {
+    left: 50%;
+    top: 100%;
+    margin-left: -35px;
+    margin-top: -35px;
+  }
+  .win-flipview .win-navbutton {
+    background-color: ButtonFace;
+    color: ButtonText;
+    border: 2px solid ButtonText;
+    width: 65px;
+    height: 35px;
+  }
+  .win-flipview .win-navbutton.win-navbutton:hover:active,
+  .win-flipview .win-navbutton.win-navbutton:active {
+    background-color: ButtonText;
+    color: ButtonFace;
+  }
+  .win-flipview .win-navright {
+    margin-left: -65px;
+  }
+  html.win-hoverable .win-flipview .win-navbutton:hover {
+    background-color: Highlight;
+    color: HighlightText;
+  }
+}
+.win-datepicker {
+  display: -ms-inline-flexbox;
+  display: -webkit-inline-flex;
+  display: inline-flex;
+  height: auto;
+  width: auto;
+}
+.win-datepicker select {
+  min-width: 80px;
+  margin-top: 4px;
+  margin-bottom: 4px;
+}
+.win-datepicker .win-datepicker-month {
+  margin-right: 20px;
+}
+.win-datepicker .win-datepicker-date.win-order0,
+.win-datepicker .win-datepicker-date.win-order1 {
+  margin-right: 20px;
+}
+.win-datepicker .win-datepicker-year.win-order0 {
+  margin-right: 20px;
+}
+.win-datepicker .win-datepicker-month:lang(ar),
+.win-datepicker .win-datepicker-month:lang(dv),
+.win-datepicker .win-datepicker-month:lang(fa),
+.win-datepicker .win-datepicker-month:lang(he),
+.win-datepicker .win-datepicker-month:lang(ku-Arab),
+.win-datepicker .win-datepicker-month:lang(pa-Arab),
+.win-datepicker .win-datepicker-month:lang(prs),
+.win-datepicker .win-datepicker-month:lang(ps),
+.win-datepicker .win-datepicker-month:lang(sd-Arab),
+.win-datepicker .win-datepicker-month:lang(syr),
+.win-datepicker .win-datepicker-month:lang(ug),
+.win-datepicker .win-datepicker-month:lang(ur),
+.win-datepicker .win-datepicker-month:lang(qps-plocm),
+.win-datepicker .win-datepicker-date.win-order0:lang(ar),
+.win-datepicker .win-datepicker-date.win-order0:lang(dv),
+.win-datepicker .win-datepicker-date.win-order0:lang(fa),
+.win-datepicker .win-datepicker-date.win-order0:lang(he),
+.win-datepicker .win-datepicker-date.win-order0:lang(ku-Arab),
+.win-datepicker .win-datepicker-date.win-order0:lang(pa-Arab),
+.win-datepicker .win-datepicker-date.win-order0:lang(prs),
+.win-datepicker .win-datepicker-date.win-order0:lang(ps),
+.win-datepicker .win-datepicker-date.win-order0:lang(sd-Arab),
+.win-datepicker .win-datepicker-date.win-order0:lang(syr),
+.win-datepicker .win-datepicker-date.win-order0:lang(ug),
+.win-datepicker .win-datepicker-date.win-order0:lang(ur),
+.win-datepicker .win-datepicker-date.win-order0:lang(qps-plocm),
+.win-datepicker .win-datepicker-date.win-order1:lang(ar),
+.win-datepicker .win-datepicker-date.win-order1:lang(dv),
+.win-datepicker .win-datepicker-date.win-order1:lang(fa),
+.win-datepicker .win-datepicker-date.win-order1:lang(he),
+.win-datepicker .win-datepicker-date.win-order1:lang(ku-Arab),
+.win-datepicker .win-datepicker-date.win-order1:lang(pa-Arab),
+.win-datepicker .win-datepicker-date.win-order1:lang(prs),
+.win-datepicker .win-datepicker-date.win-order1:lang(ps),
+.win-datepicker .win-datepicker-date.win-order1:lang(sd-Arab),
+.win-datepicker .win-datepicker-date.win-order1:lang(syr),
+.win-datepicker .win-datepicker-date.win-order1:lang(ug),
+.win-datepicker .win-datepicker-date.win-order1:lang(ur),
+.win-datepicker .win-datepicker-date.win-order1:lang(qps-plocm),
+.win-datepicker .win-datepicker-year.win-order0:lang(ar),
+.win-datepicker .win-datepicker-year.win-order0:lang(dv),
+.win-datepicker .win-datepicker-year.win-order0:lang(fa),
+.win-datepicker .win-datepicker-year.win-order0:lang(he),
+.win-datepicker .win-datepicker-year.win-order0:lang(ku-Arab),
+.win-datepicker .win-datepicker-year.win-order0:lang(pa-Arab),
+.win-datepicker .win-datepicker-year.win-order0:lang(prs),
+.win-datepicker .win-datepicker-year.win-order0:lang(ps),
+.win-datepicker .win-datepicker-year.win-order0:lang(sd-Arab),
+.win-datepicker .win-datepicker-year.win-order0:lang(syr),
+.win-datepicker .win-datepicker-year.win-order0:lang(ug),
+.win-datepicker .win-datepicker-year.win-order0:lang(ur),
+.win-datepicker .win-datepicker-year.win-order0:lang(qps-plocm) {
+  margin-right: 0;
+  margin-left: 20px;
+}
+.win-timepicker {
+  display: -ms-inline-flexbox;
+  display: -webkit-inline-flex;
+  display: inline-flex;
+  height: auto;
+  width: auto;
+}
+.win-timepicker select {
+  min-width: 80px;
+  margin-top: 4px;
+  margin-bottom: 4px;
+}
+.win-timepicker .win-timepicker-hour {
+  margin-right: 20px;
+}
+.win-timepicker .win-timepicker-period.win-order0 {
+  margin-right: 20px;
+}
+.win-timepicker .win-timepicker-minute.win-order1 {
+  margin-right: 20px;
+}
+.win-timepicker .win-timepicker-period.win-order0:lang(ar),
+.win-timepicker .win-timepicker-period.win-order0:lang(dv),
+.win-timepicker .win-timepicker-period.win-order0:lang(fa),
+.win-timepicker .win-timepicker-period.win-order0:lang(he),
+.win-timepicker .win-timepicker-period.win-order0:lang(ku-Arab),
+.win-timepicker .win-timepicker-period.win-order0:lang(pa-Arab),
+.win-timepicker .win-timepicker-period.win-order0:lang(prs),
+.win-timepicker .win-timepicker-period.win-order0:lang(ps),
+.win-timepicker .win-timepicker-period.win-order0:lang(sd-Arab),
+.win-timepicker .win-timepicker-period.win-order0:lang(syr),
+.win-timepicker .win-timepicker-period.win-order0:lang(ug),
+.win-timepicker .win-timepicker-period.win-order0:lang(ur),
+.win-timepicker .win-timepicker-period.win-order0:lang(qps-plocm),
+.win-timepicker .win-timepicker-hour:lang(ar),
+.win-timepicker .win-timepicker-hour:lang(dv),
+.win-timepicker .win-timepicker-hour:lang(fa),
+.win-timepicker .win-timepicker-hour:lang(he),
+.win-timepicker .win-timepicker-hour:lang(ku-Arab),
+.win-timepicker .win-timepicker-hour:lang(pa-Arab),
+.win-timepicker .win-timepicker-hour:lang(prs),
+.win-timepicker .win-timepicker-hour:lang(ps),
+.win-timepicker .win-timepicker-hour:lang(sd-Arab),
+.win-timepicker .win-timepicker-hour:lang(syr),
+.win-timepicker .win-timepicker-hour:lang(ug),
+.win-timepicker .win-timepicker-hour:lang(ur),
+.win-timepicker .win-timepicker-hour:lang(qps-plocm) {
+  margin-right: 0;
+  margin-left: 20px;
+}
+.win-timepicker .win-timepicker-minute.win-order1:lang(ar),
+.win-timepicker .win-timepicker-minute.win-order1:lang(dv),
+.win-timepicker .win-timepicker-minute.win-order1:lang(fa),
+.win-timepicker .win-timepicker-minute.win-order1:lang(he),
+.win-timepicker .win-timepicker-minute.win-order1:lang(ku-Arab),
+.win-timepicker .win-timepicker-minute.win-order1:lang(pa-Arab),
+.win-timepicker .win-timepicker-minute.win-order1:lang(prs),
+.win-timepicker .win-timepicker-minute.win-order1:lang(ps),
+.win-timepicker .win-timepicker-minute.win-order1:lang(sd-Arab),
+.win-timepicker .win-timepicker-minute.win-order1:lang(syr),
+.win-timepicker .win-timepicker-minute.win-order1:lang(ug),
+.win-timepicker .win-timepicker-minute.win-order1:lang(ur),
+.win-timepicker .win-timepicker-minute.win-order1:lang(qps-plocm),
+.win-timepicker .win-timepicker-minute.win-order0:lang(ar),
+.win-timepicker .win-timepicker-minute.win-order0:lang(dv),
+.win-timepicker .win-timepicker-minute.win-order0:lang(fa),
+.win-timepicker .win-timepicker-minute.win-order0:lang(he),
+.win-timepicker .win-timepicker-minute.win-order0:lang(ku-Arab),
+.win-timepicker .win-timepicker-minute.win-order0:lang(pa-Arab),
+.win-timepicker .win-timepicker-minute.win-order0:lang(prs),
+.win-timepicker .win-timepicker-minute.win-order0:lang(ps),
+.win-timepicker .win-timepicker-minute.win-order0:lang(sd-Arab),
+.win-timepicker .win-timepicker-minute.win-order0:lang(syr),
+.win-timepicker .win-timepicker-minute.win-order0:lang(ug),
+.win-timepicker .win-timepicker-minute.win-order0:lang(ur),
+.win-timepicker .win-timepicker-minute.win-order0:lang(qps-plocm) {
+  margin-left: 20px;
+  margin-right: 0;
+}
+body > .win-navigation-backbutton {
+  position: absolute;
+  top: 50px;
+  left: 20px;
+}
+.win-backbutton,
+.win-navigation-backbutton,
+.win-back {
+  display: inline-block;
+  min-width: 0;
+  min-height: 0;
+  padding: 0;
+  text-align: center;
+  width: 41px;
+  height: 41px;
+  font-size: 24px;
+  line-height: 41px;
+  vertical-align: baseline;
+}
+.win-backbutton::before,
+.win-back::before {
+  font-family: "Segoe MDL2 Assets", "Symbols";
+  font-weight: normal;
+  content: "\E0D5";
+  vertical-align: 50%;
+}
+.win-backbutton:lang(ar)::before,
+.win-backbutton:lang(dv)::before,
+.win-backbutton:lang(fa)::before,
+.win-backbutton:lang(he)::before,
+.win-backbutton:lang(ku-Arab)::before,
+.win-backbutton:lang(pa-Arab)::before,
+.win-backbutton:lang(prs)::before,
+.win-backbutton:lang(ps)::before,
+.win-backbutton:lang(sd-Arab)::before,
+.win-backbutton:lang(syr)::before,
+.win-backbutton:lang(ug)::before,
+.win-backbutton:lang(ur)::before,
+.win-backbutton:lang(qps-plocm)::before,
+.win-back:lang(ar)::before,
+.win-back:lang(dv)::before,
+.win-back:lang(fa)::before,
+.win-back:lang(he)::before,
+.win-back:lang(ku-Arab)::before,
+.win-back:lang(pa-Arab)::before,
+.win-back:lang(prs)::before,
+.win-back:lang(ps)::before,
+.win-back:lang(sd-Arab)::before,
+.win-back:lang(syr)::before,
+.win-back:lang(ug)::before,
+.win-back:lang(ur)::before,
+.win-back:lang(qps-plocm)::before {
+  content: "\E0AE";
+}
+button.win-navigation-backbutton,
+button.win-navigation-backbutton:active,
+html.win-hoverable button.win-navigation-backbutton:enabled:hover,
+button.win-navigation-backbutton:enabled:hover:active {
+  background-color: transparent;
+  border: none;
+}
+@media (-ms-high-contrast) {
+  button.win-navigation-backbutton,
+  button.win-navigation-backbutton:active,
+  html.win-hoverable button.win-navigation-backbutton:enabled:hover,
+  button.win-navigation-backbutton:enabled:hover:active {
+    /* Overwrite default background and border styles from BackButton control's <button> element */
+    background-color: transparent;
+    border: none;
+  }
+  .win-backbutton,
+  .win-back {
+    background-color: ButtonFace;
+    border-color: ButtonText;
+    color: ButtonText;
+  }
+  .win-backbutton.win-backbutton:enabled:hover:active,
+  .win-navigation-backbutton.win-navigation-backbutton:enabled:hover:active .win-back {
+    background-clip: border-box;
+    background-color: ButtonText;
+    border-color: transparent;
+    color: ButtonFace;
+  }
+  .win-backbutton:disabled,
+  .win-navigation-backbutton:disabled .win-back,
+  .win-backbutton:disabled:active,
+  .win-navigation-backbutton:disabled:active .win-back {
+    background-color: ButtonFace;
+    border-color: GrayText;
+    color: GrayText;
+  }
+  .win-backbutton:-ms-keyboard-active,
+  .win-navigation-backbutton:-ms-keyboard-active .win-back {
+    background-clip: border-box;
+    background-color: ButtonText;
+    border-color: transparent;
+    color: ButtonFace;
+  }
+  html.win-hoverable .win-backbutton:enabled:hover,
+  html.win-hoverable .win-navigation-backbutton:enabled:hover .win-back {
+    background-color: Highlight;
+    border-color: ButtonText;
+    color: HighlightText;
+  }
+}
+.win-tooltip {
+  display: block;
+  position: fixed;
+  top: 30px;
+  left: 30px;
+  max-width: 320px;
+  box-sizing: border-box;
+  margin: 0;
+  padding: 4px 7px 6px 7px;
+  border-style: solid;
+  border-width: 1px;
+  z-index: 9999;
+  word-wrap: break-word;
+  animation-fill-mode: both;
+  font-size: 12px;
+  font-weight: 400;
+  line-height: 1.167;
+}
+.win-tooltip-phantom {
+  display: block;
+  position: fixed;
+  top: 30px;
+  left: 30px;
+  background-color: transparent;
+  border-width: 0;
+  margin: 0;
+  padding: 0;
+}
+@media (-ms-high-contrast) {
+  .win-tooltip {
+    background-color: Window;
+    border-color: WindowText;
+    color: WindowText;
+  }
+}
+.win-rating {
+  display: -ms-inline-flexbox;
+  display: -webkit-inline-flex;
+  display: inline-flex;
+  -ms-flex-pack: self;
+  -webkit-justify-content: self;
+  justify-content: self;
+  -ms-flex-align: stretch;
+  -webkit-align-items: stretch;
+  align-items: stretch;
+  height: auto;
+  width: auto;
+  white-space: normal;
+  outline: 0;
+}
+.win-rating .win-star {
+  -ms-flex: 1 1 auto;
+  -webkit-flex: 1 1 auto;
+  flex: 1 1 auto;
+  height: 24px;
+  width: 24px;
+  padding: 9px 10px 11px 10px;
+  font-family: "Segoe MDL2 Assets", "Symbols";
+  font-size: 24px;
+  overflow: hidden;
+  text-indent: 0;
+  line-height: 1;
+  cursor: default;
+  position: relative;
+  letter-spacing: 0;
+  -ms-touch-action: none;
+  touch-action: none;
+}
+.win-rating.win-small .win-star {
+  width: 12px;
+  height: 12px;
+  font-size: 12px;
+  padding: 3px 4px 5px 4px;
+}
+.win-rating .win-star:before {
+  content: "\E082";
+}
+.win-rating .win-star.win-disabled {
+  cursor: default;
+  -ms-touch-action: auto;
+  touch-action: auto;
+}
+@media (-ms-high-contrast) {
+  .win-rating .win-star:before {
+    content: "\E082" !important;
+  }
+  .win-rating .win-star.win-full {
+    color: HighLight;
+  }
+  .win-rating .win-star.win-tentative.win-full {
+    color: ButtonText;
+  }
+  .win-rating .win-star.win-empty {
+    color: ButtonFace;
+  }
+  .win-rating .win-star:after {
+    content: "\E224" !important;
+    position: relative;
+    top: -100%;
+    color: ButtonText;
+  }
+}
+.win-toggleswitch {
+  outline: 0;
+}
+.win-toggleswitch .win-toggleswitch-header {
+  max-width: 470px;
+  margin-bottom: 14px;
+  margin-top: 22px;
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 1.333;
+}
+.win-toggleswitch .win-toggleswitch-values {
+  display: inline-block;
+  vertical-align: top;
+}
+.win-toggleswitch .win-toggleswitch-value {
+  min-width: 65px;
+  margin-left: 12px;
+  height: 16px;
+  vertical-align: top;
+  font-size: 15px;
+  font-weight: 400;
+  line-height: 16px;
+}
+.win-toggleswitch .win-toggleswitch-description {
+  font-size: 12px;
+  width: 22em;
+  margin-top: 28px;
+  display: none;
+}
+.win-toggleswitch .win-toggleswitch-clickregion {
+  display: inline-block;
+  touch-action: none;
+  -ms-user-select: none;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  user-select: none;
+}
+.win-toggleswitch .win-toggleswitch-track {
+  position: relative;
+  display: inline-block;
+  width: 44px;
+  height: 16px;
+  border-style: solid;
+  border-width: 2px;
+  border-radius: 8px;
+  box-sizing: border-box;
+}
+.win-toggleswitch .win-toggleswitch-thumb {
+  position: absolute;
+  top: 2px;
+  display: inline-block;
+  width: 20px;
+  height: 8px;
+  border-radius: 4px;
+  -webkit-transition: left 0.1s;
+  transition: left 0.1s;
+}
+.win-toggleswitch:focus .win-toggleswitch-track {
+  outline-width: 1px;
+  outline-style: dotted;
+}
+.win-toggleswitch.win-toggleswitch-dragging .win-toggleswitch-thumb {
+  -webkit-transition: none;
+  transition: none;
+}
+.win-toggleswitch.win-toggleswitch-off .win-toggleswitch-value-on {
+  visibility: hidden;
+  height: 0;
+  font-size: 0;
+  line-height: 0;
+}
+.win-toggleswitch.win-toggleswitch-on .win-toggleswitch-value-off {
+  visibility: hidden;
+  height: 0;
+  font-size: 0;
+  line-height: 0;
+}
+.win-toggleswitch.win-toggleswitch-on .win-toggleswitch-thumb {
+  left: 18px;
+}
+.win-toggleswitch.win-toggleswitch-off .win-toggleswitch-thumb {
+  left: 2px;
+}
+.win-toggleswitch:lang(ar),
+.win-toggleswitch:lang(dv),
+.win-toggleswitch:lang(fa),
+.win-toggleswitch:lang(he),
+.win-toggleswitch:lang(ku-Arab),
+.win-toggleswitch:lang(pa-Arab),
+.win-toggleswitch:lang(prs),
+.win-toggleswitch:lang(ps),
+.win-toggleswitch:lang(sd-Arab),
+.win-toggleswitch:lang(syr),
+.win-toggleswitch:lang(ug),
+.win-toggleswitch:lang(ur),
+.win-toggleswitch:lang(qps-plocm) {
+  direction: rtl;
+}
+.win-toggleswitch:lang(ar).win-toggleswitch-on .win-toggleswitch-thumb,
+.win-toggleswitch:lang(dv).win-toggleswitch-on .win-toggleswitch-thumb,
+.win-toggleswitch:lang(fa).win-toggleswitch-on .win-toggleswitch-thumb,
+.win-toggleswitch:lang(he).win-toggleswitch-on .win-toggleswitch-thumb,
+.win-toggleswitch:lang(ku-Arab).win-toggleswitch-on .win-toggleswitch-thumb,
+.win-toggleswitch:lang(pa-Arab).win-toggleswitch-on .win-toggleswitch-thumb,
+.win-toggleswitch:lang(prs).win-toggleswitch-on .win-toggleswitch-thumb,
+.win-toggleswitch:lang(ps).win-toggleswitch-on .win-toggleswitch-thumb,
+.win-toggleswitch:lang(sd-Arab).win-toggleswitch-on .win-toggleswitch-thumb,
+.win-toggleswitch:lang(syr).win-toggleswitch-on .win-toggleswitch-thumb,
+.win-toggleswitch:lang(ug).win-toggleswitch-on .win-toggleswitch-thumb,
+.win-toggleswitch:lang(ur).win-toggleswitch-on .win-toggleswitch-thumb,
+.win-toggleswitch:lang(qps-plocm).win-toggleswitch-on .win-toggleswitch-thumb {
+  left: 2px;
+}
+.win-toggleswitch:lang(ar).win-toggleswitch-off .win-toggleswitch-thumb,
+.win-toggleswitch:lang(dv).win-toggleswitch-off .win-toggleswitch-thumb,
+.win-toggleswitch:lang(fa).win-toggleswitch-off .win-toggleswitch-thumb,
+.win-toggleswitch:lang(he).win-toggleswitch-off .win-toggleswitch-thumb,
+.win-toggleswitch:lang(ku-Arab).win-toggleswitch-off .win-toggleswitch-thumb,
+.win-toggleswitch:lang(pa-Arab).win-toggleswitch-off .win-toggleswitch-thumb,
+.win-toggleswitch:lang(prs).win-toggleswitch-off .win-toggleswitch-thumb,
+.win-toggleswitch:lang(ps).win-toggleswitch-off .win-toggleswitch-thumb,
+.win-toggleswitch:lang(sd-Arab).win-toggleswitch-off .win-toggleswitch-thumb,
+.win-toggleswitch:lang(syr).win-toggleswitch-off .win-toggleswitch-thumb,
+.win-toggleswitch:lang(ug).win-toggleswitch-off .win-toggleswitch-thumb,
+.win-toggleswitch:lang(ur).win-toggleswitch-off .win-toggleswitch-thumb,
+.win-toggleswitch:lang(qps-plocm).win-toggleswitch-off .win-toggleswitch-thumb {
+  left: 18px;
+}
+.win-semanticzoom {
+  touch-action: pan-x pan-y double-tap-zoom;
+  height: 400px;
+}
+.win-semanticzoom .win-listview > .win-viewport * {
+  touch-action: auto;
+}
+.win-semanticzoom * {
+  touch-action: inherit;
+}
+.win-semanticzoom-button {
+  z-index: 100;
+  position: absolute;
+  min-width: 25px;
+  min-height: 25px;
+  width: 25px;
+  height: 25px;
+  padding: 0px;
+  bottom: 21px;
+  touch-action: none;
+}
+.win-semanticzoom-button::before {
+  font-family: "Segoe MDL2 Assets", "Symbols";
+  font-weight: normal;
+  font-size: 11px;
+  content: "\E0B8";
+  /* minus sign */
+}
+.win-semanticzoom-button-location {
+  left: auto;
+  right: 4px;
+}
+.win-semanticzoom-button-location:lang(ar),
+.win-semanticzoom-button-location:lang(dv),
+.win-semanticzoom-button-location:lang(fa),
+.win-semanticzoom-button-location:lang(he),
+.win-semanticzoom-button-location:lang(ku-Arab),
+.win-semanticzoom-button-location:lang(pa-Arab),
+.win-semanticzoom-button-location:lang(prs),
+.win-semanticzoom-button-location:lang(ps),
+.win-semanticzoom-button-location:lang(sd-Arab),
+.win-semanticzoom-button-location:lang(syr),
+.win-semanticzoom-button-location:lang(ug),
+.win-semanticzoom-button-location:lang(ur),
+.win-semanticzoom-button-location:lang(qps-plocm) {
+  left: 4px;
+  right: auto;
+}
+@media (-ms-high-contrast) {
+  .win-semanticzoom-button {
+    background-color: ButtonFace;
+    border-color: ButtonText;
+    color: ButtonText;
+  }
+  .win-semanticzoom-button.win-semanticzoom-button:hover:active {
+    background-clip: border-box;
+    background-color: ButtonText;
+    border-color: transparent;
+    color: ButtonFace;
+  }
+  .win-semanticzoom-button:-ms-keyboard-active {
+    background-clip: border-box;
+    background-color: ButtonText;
+    border-color: transparent;
+    color: ButtonFace;
+  }
+  html.win-hoverable win-semanticzoom-button:hover {
+    background-color: Highlight;
+    border-color: ButtonText;
+    color: HighlightText;
+  }
+}
+.win-pivot {
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  -ms-flex-direction: column;
+  -webkit-flex-direction: column;
+  flex-direction: column;
+  -ms-flex-wrap: none;
+  -webkit-flex-wrap: nowrap;
+  flex-wrap: nowrap;
+  height: 100%;
+  width: 100%;
+  overflow: hidden;
+  -ms-scroll-limit-x-max: 0px;
+  touch-action: manipulation;
+}
+.win-pivot .win-pivot-navbutton {
+  position: absolute;
+  width: 20px;
+  height: 36px;
+  padding: 0px;
+  margin: 0px;
+  top: 10px;
+  min-width: 0px;
+  border-width: 0px

<TRUNCATED>

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org