# 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.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<actionScriptProperties mainApplicationPath="TextLayoutEditor.mxml" projectUUID="25a11cce-bfc0-49b8-b743-c253827caea8" version="6">
  <compiler additionalCompilerArguments="-locale en_US  -default-size 875 425" autoRSLOrdering="true" copyDependentFiles="true" generateAccessible="false" htmlExpressInstall="true" htmlGenerate="false" htmlHistoryManagement="true" htmlPlayerVersionCheck="true" includeNetmonSwc="false" outputFolderPath="bin" sourceFolderPath="src" strict="true" targetPlayerVersion="0.0.0" useApolloConfig="false" useDebugRSLSwfs="true" verifyDigests="true" warn="true">
    <compilerSourcePath/>
    <libraryPath defaultLinkType="1">
      <libraryPathEntry kind="3" linkType="4" path="/textLayout_editBar/bin/textLayout_editBar.swc" useDefaultLinkType="true"/>
      <libraryPathEntry kind="3" linkType="4" path="/textLayout_ui/bin/textLayout_ui.swc" useDefaultLinkType="true"/>
      <libraryPathEntry kind="4" path="">
        <excludedEntries>
          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/flex.swc" useDefaultLinkType="false"/>
        </excludedEntries>
      </libraryPathEntry>
    </libraryPath>
    <sourceAttachmentPath/>
  </compiler>
  <applications>
    <application path="TextLayoutEditor.mxml"/>
  </applications>
  <modules/>
  <buildCSSFiles/>
</actionScriptProperties>
