<!--
  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.
-->
<!-- saved from url=(0014)about:internet -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>SampleAccelerometer.mxml</title>
<link rel="stylesheet" type="text/css" href="../SourceStyles.css"/>
</head>

<body>
<pre><span class="MXMLProcessing_Instruction">&lt;?xml version="1.0" encoding="utf-8"?&gt;</span>
<span class="MXMLComponent_Tag">&lt;s:ViewNavigatorApplication</span><span class="MXMLDefault_Text"> xmlns:fx="</span><span class="MXMLString">http://ns.adobe.com/mxml/2009</span><span class="MXMLDefault_Text">"
			  xmlns:s="</span><span class="MXMLString">library://ns.adobe.com/flex/spark</span><span class="MXMLDefault_Text">" 
			  firstView=&quot;<span class="MXMLString">views.SampleAccelerometer</span>&quot;<span class="MXMLComponent_Tag">&gt;</span>
               </span>
<span class="MXMLSpecial_Tag">   &lt;fx:Declarations&gt;</span>
       <span class="ActionScriptBracket/Brace"></span><span class="ActionScriptString">&lt;!-- Place non-visual elements (e.g., services, value objects) here --&gt;</span><span class="ActionScriptBracket/Brace"></span>
<span class="MXMLSpecial_Tag">   &lt;/fx:Declarations&gt;</span><span class="MXMLComponent_Tag"></span>
    
<span class="MXMLComponent_Tag">&lt;/s:ViewNavigatorApplication&gt;</span></pre></body>
</html>
