<!--

  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.

-->
<flex-config>

    <compiler>
        <accessible>false</accessible>
        
        <external-library-path>
        </external-library-path>
        
		<mxml>
			<children-as-data>true</children-as-data>
		</mxml>
		<binding-value-change-event>org.apache.flex.events.ValueChangeEvent</binding-value-change-event>
		<binding-value-change-event-kind>org.apache.flex.events.ValueChangeEvent</binding-value-change-event-kind>
		<binding-value-change-event-type>valueChange</binding-value-change-event-type>

        <keep-as3-metadata>
          <name>Bindable</name>
          <name>Managed</name>
          <name>ChangeEvent</name>
          <name>NonCommittingChangeEvent</name>
          <name>Transient</name>
        </keep-as3-metadata>
	  
        <locale/>
        
        <library-path>
        </library-path>
        
        <namespaces>
            <namespace>
                <uri>library://ns.apache.org/flexjs/createjs</uri>
                <manifest>../src/main/resources/createjs-manifest.xml</manifest>
            </namespace>
        </namespaces>
        
        <source-path>
            <path-element>../src/main/flex</path-element>
        </source-path>
        
        <library-path>
            <path-element>../../../externs/Core.swc</path-element>
            <path-element>../../../externs/HTML.swc</path-element>
            <path-element>../../../externs/Graphics.swc</path-element>
        </library-path>
        
        <warn-no-constructor>false</warn-no-constructor>
    </compiler>
    
    <include-file>
    </include-file>

    <include-sources>
    </include-sources>
    
    <include-classes>
        <class>CreateJSClasses</class>
    </include-classes>
    
    <include-namespaces>
        <uri>library://ns.apache.org/flexjs/createjs</uri>
    </include-namespaces>
    
    <!--<target-player>${playerglobal.version}</target-player>-->
	

</flex-config>
